付葉薔 河南大學軟件學院
編譯原理產生于20世紀40年代,由于著名匈牙利裔美籍數學家,計算機科學家,物理學家和化學家馮.諾伊曼在存儲程序在計算機方面的領頭作用,在計算機中編寫一串代碼或程序保存在計算機中執(zhí)行是非常有必要的。起初,這些程序都是用機器語言編寫的指令(只有0和1的程序)。機器語言是一種指令集的體系。這種指令集,稱機器碼,是電腦的CPU可直接解讀的數據,機器語言具有靈活、直接執(zhí)行和速度快等特點。但同時,機器語言大量繁雜瑣碎的細節(jié)牽制著程序員,所以編寫這樣的代碼充滿挑戰(zhàn),非常困難。從而這種代碼形式很快被產生于符號語言(匯編語言)編寫的程序代替了。隨著時間推移和科技發(fā)展,用于編譯原理的編譯器包括了更復雜的算法應用程序,主要用于推斷或簡化程序中的信息。
詞法分析是編譯過程的第一個階段,主要任務是對構成源程序的字符流從左至右進行掃描和分解,把它識別為一個個具有獨立意義的最小語法單位,即單詞,從而產生一個個的單詞符號, 把作為字符串的源程序改造成為單詞符號串的中間程序,用于語法分析,因此,詞法分析是編譯的基礎。執(zhí)行詞法分析的程序稱為詞法分析程序或掃描程序, 它按構詞規(guī)則識別單詞, 將作為字符串的源程序改造成為單詞符號串。單詞一般采用形如(單詞種別, 單詞符號的屬性值>的二元組形式表示, 其中單詞類別是語法分析需要的信息, 而單詞自身值則是其他編譯階段需要的信息。編譯程序是在單詞的級別上來分析和翻譯源程序的, 因此,詞法分析在編譯原理中發(fā)揮著首要作用。詞法分析程序除了識別單詞這個基本任務外, 還可完成如對源程序進行處理, 組織源程序的輸入、刪除注釋等。
詞法分析滲透在計算機領域的各個方面。它在軟件工程中得到了極為廣泛的應用,這主要是由于詞法分析特性決定,詞法分析是對構成源程序的字符流進行掃描, 然后根據構詞規(guī)則識別單詞符號, 這正是源代碼逆向分析過程中重要的的一步。因為,詞法分析是機器翻譯的第一階段, 當源語言文本送入計算機后, 首先要進行詞法分析, 及輸出單詞符號,對關鍵字、標識符、常數、運算符、界符進行分析。這也是完成計算機翻譯過程的基礎和關鍵階段, 此步為接下來的句法分析和目標語言生成奠定了基礎, 其準確程度的高低直接影響著句法分析的準確率和譯文的準確性。詞法分析可以實現(xiàn)軟件工程中的構架應用系統(tǒng)和三層構架應用系統(tǒng)中超文本鏈接的自動測試等。同時,依據詞法分析的特性,可以為數據庫中數據的獲取和存儲提供基礎,良好的解決了數據庫中關鍵字的建立問題等。
語法分析程序從掃描程序中獲取記號形式的源代碼,并完成定義程序結構的語法分析 ,這與自然語言中句子的語法分析類似。語法分析是編譯過程的核心部分。它的任務是在詞法分析識別出單詞符號串的基礎上,分析并判定程序的語法結構是否符合語法規(guī)則??梢源致缘匕颜Z法分析分成兩類,一類是自上而下分析法,一類是自下而上分析法。自上而下,及從文法的開始符號出發(fā),向下推導,推出句子。自上而下的分析法可以構造一顆語法樹,把文法的開始符號當成根節(jié)點依次遞歸推導產生。自下而上,就是從輸入串開始,逐步進行規(guī)約,直至歸納到文法的開始符號,換種說法,也就是從語法樹的末端開始,逐步往上,直到根節(jié)點。自下而上的分析使用了“移近-規(guī)約法”,用一個寄存符號先進后出棧,把輸入符號逐個移進棧里,當棧頂形成某個產生式的一個候選式時,再替換。
編譯原理這門課研究的是編譯器方面產生原理和技術問題,為大學生本科階段的在計算機方面的學習提供了很好的基礎,使學生對編譯程序有了更深刻的理解。雖然編譯原理從本質上來說只是一個算法問題而已,但當其需解決的問題十分復雜時,其算法也相對復雜。與數據結構這門課程相比,編譯原理這門課程講的是比較專注解決一種的算法。曾經,編譯器的編寫一直被認為是十分困難的事情,在人們嘗試編寫編譯器的同時,誕生了許多跟編譯相關的理論和技術,而這些理論和技術比一個實際的編譯器本身價值更大。
[1]陳火旺,劉春林,譚慶平,趙客佳,劉越.程序設計語言編譯原理.北京:國防工業(yè)出版社,2004
[2]王峰,張浩軍,閻娟,侯惠芳. 編譯原理課程教學中的詞法分析及其應用[J].計算機教育, 2013 (17) .