摘要:公式編輯、編譯及執行系統是基于Visual Basic 6.0環境下設計和開發的,從公式編輯、編譯及執行系統的設計思想和實現來看,可以說它的實質就是一個可以實現簡單功能的編譯器。它的設計與實現可以說明一個高級語言編譯程序實現的基本原理和方法。詞法分析模塊的設計和實現(具體包括詞法分析逐個字符的說明和實現技術,詞法分析程序的原則 ,單詞的描述技術,識別機制及詞法分析程序的構造原理等內容。)尤其是此類系統的重要基礎工作。
關鍵詞:編譯器;詞法分析;模塊
中圖分類號:TP314文獻標識碼:A文章編號:1009-3044(2008)33-1456-03
Lexical Analysis in Formula Edition Translation and Execution System Application
ZHAO Hong-yan
(School of Computer Information, Yang'en University, Quanzhou 362014, China)
Abstract: The formula edition, the translation and the execution system are based on Visual under the Basic 6.0 environment the design and the development, from the formula edition, the translation and the execution system design concept and the realization looked, may say its essence is one may realize the simple function compiler.Its design and the realization may show a higher order language compiler realization the basic principle and the method. The lexical analysis module design and the realization (includes the lexical analysis one by one character specifically showing and the realization technology, the lexical analyser principle, the word description technology, the recognition mechanism and lexical analyser contents and so on structure principle.) In particular this kind of systematic important foundation work.
Key words: compiler; lexical analysis; module
1 引言
編譯程序是現代計算機系統的基本組成部分之一。公式的編譯及執行是基于編譯器來設計的。編譯器產生于20世紀60年代,在計算機科學技術的發展歷史中發揮了巨大的作用,是開發計算機應用系統不可缺少的重要工具。簡單的說編譯器是一個程序,它讀入用某種語言(源語言)編寫的程序并將其翻譯成一個與之等價的以另一種語言(目標語言)編寫的程序。作為這個翻譯過程的一個重要組成部分,編譯器能夠向用戶報告被編譯的源程序中的錯誤 。詞法分析就是基于編譯程序設計的原理和實現方法應用到本系統中的。[1]
2 公式編輯、編譯及執行系統簡述
公式編輯、編譯及執行系統簡稱(FETES)是基于Visual Basic 6.0環境下開發的一個公式編輯、編譯及執行系統,從它的功能可以看出它可以作為一個簡單的編譯器,主要完成了從程序代碼的輸入到輸出表達式結果的整體編譯過程。
FETES充分的體現了一個高級語言編譯程序實現的基本技術和步驟,成為各種各樣的源語言和目標語言設計和構造編譯程序的典型實例。同時,它也適用于其它相關技術領域,如會計、審計、銀行等需要進行算術運算的行業。將FETES嵌入到實用程序中,可以大大減輕工作的負擔,提高工作效率!
本文從編譯程序的基本原理和技術出發,論述了FETES的功能和特點,闡明了FETES的設計思想和總體結構。在此基礎上采用遞歸子程序分析方法重點論述了FETES的詞法分析模塊的設計思想和實現方法,以及在設計和實現過程中所涉及的一些關鍵技術和算法說明。
3 FETES的總體結構,運行環境及特點
3.1 FETES編譯程序結構
FETES是基于Visual Basic 6.0環境下開發的一個公式編輯、編譯及執行系統,相當于一個小型的編譯器。它的編譯程序主要是算術表達式的編輯、編譯及執行系統。FETES在VB環境下生成可執行文件,是一個移植性很強的小型系統,能夠在任何機器上操作和實現。其編譯過程分為詞法分析、語法分析和目標代碼生成三個階段。
首先在源程序中輸入一串字符流,由詞法分析程序對其進行掃描和識別,根據字符間的緊密聯系,判斷它們在邏輯上是否構成一個單詞。如遇到以字母開頭,后跟字母或數字的字符流就標識為標識符。然后語法分析依據語言的語法規則將詞法分析輸出的單詞序列分解成各類語法短語,如“賦值語句”,“表達式”等等。這樣,通過語法分析就能確定出整個字符流是否是一個符合語法要求的正確程序。若程序無語法錯誤,還要審計運算對象數據的類型是否匹配。編譯程序的最后階段是目標代碼生成,它將優化后的中間代碼轉換成特定機器的匯編語言或機器語言,從而完成了整個復雜的工作過程。此外,錯誤處理程序會伴隨詞法分析和語法分析程序的運行,遇到錯誤就會彈出消息對話框提示錯誤。[2]
主程序使用一個模塊,四個類模塊組成。結構圖如圖1所示。

圖1 FETES編譯程序的結構圖
注: 空心箭頭表示數據流;實心箭頭表示調用關系。

圖2FETES程序界面
3.2 FETES的運行環境及特點
3.2.1 界面設計
FETES是基于Visual Basic 6.0環境下開發的,界面如圖2所示:[3]
系統界面采取了簡潔實用的設計方法,包括兩個文本框:源程序輸入和編譯程序輸出,兩個系統執行命令按鈕及兩個菜單選項。
3.2.2 使用方法
系統語法規則語法:1)定義變量,int a;或float a,b;2)變量賦值,a=3;或b=23.344454;3)輸出語句,print (a+4);4)支持函數,cos,sin,tan,cot,sqr
使用示例:
在源程序文本框內輸入源程序:
int a,b;
float c;
a=3;
b=5;
c=3.1415926;
print (cos(b-1-a-1)+c*sqr(9));
注意:print ,sin,等函數必須用\"(\"和\")\"把要計算的表達式括起來然后按編譯執行,得出結果。
通過菜單選項來完成打開,保存,退出等功能!
注意:本系統主要針對公式,所進行的詞法分析、語法分析主要針對限制性輸入,對于過程未做考慮。
4 FETES中詞法分析實現原理及功能
4.1 詞法分析的基本概念
詞法分析是編譯的第一階段。詞法分析程序的主要任務是讀入輸入的字符,產生記號序列,提交給語法分析使用。這種交互通??梢酝ㄟ^使詞法分析程序作為語法分析程序的子程序或協作程序來實現。當詞法分析程序收到語法分析程序發出的“取下一個記號”的命令時,詞法分析程序讀入輸入的字符,直到識別出下一個記號。
詞法分析程序是編譯器中讀入源程序的部分,因此它還可以完成一些相關的輔助任務。一個任務是濾掉源程序中的注釋.空格.制表符.換行符;另一個任務是使編譯器能將發現的錯誤信息與源程序出錯位置聯系起來。例如:詞法分析程序負責記錄遇到的換行符的個數,以便將行號和出錯信息聯系起來。在某些編譯程序中,詞法分析程序負責拷貝一份源程序并將出錯信息加入其中。如果源語言支持宏預處理功能,可以在詞法分析階段完成這些預處理功能。[4]
4.2 單詞的描述
程序設計語言中的單詞是基本的語法符號。單詞符號的語法可以用有效的工具加以描述,并且基于這類描述工具,可以建立詞法分析技術,進而可以建立詞法分析程序的自動構造方法。
4.2.1 單詞的種類
本系統定義單詞的種類有以下五種:
基本字:也稱保留字,如then、if
運算符:如:+、-、*、/
標識符:用戶定義的變量名、常數名、過程名
常數:如:123,159等整數
界符:如:“;”、“?!钡?/p>
這幾類單詞可用下述規則描述:
<標識符> —> 1|1<字母數字>
<字母數字> —> 1|d|1<數字字母>|d<字母數字>
<無符號整數> —> d|d<無符號整數>
<運算符> —> +|-|*|/|=|〈〈等號>|><等號>……
<等號> —> =
<界符> —> ,|;|(|)|……
其中1表示a-z中的任何一個英文字母,d表示0-9中的任何一個數字。
5 詞法分析的具體實現
5.1 實現算法
FETES系統詞法分析程序GETTOKEN是一個獨立的過程,其功能是為語法分析提供單詞用的,是語法分析的基礎,它把輸入的字符串形成的源程序分割成一個個單詞符號。
為此編譯程序設置了三個全程量的公用單元如下:
TOKEN:存放每個單詞的類別。
ID:存放用戶所定義的標識符的值。
NUM:存放用戶定義的數。
詞法分析過程GETTOKEN如圖3所示。
由流程圖可以看出本系統的詞法分析過程和將完成的任務:
濾空格:空格在詞法分析時是一種不可缺少的界符,而在語法分析時是沒用的必須濾掉。
識別保留字:設有一張保留字表。對每個字母打頭的字母、數字字符要查此表。若查到了則為保留字,將對應的類放在TOKEN中。如IF對應值IFTOKEN。若查不著,則認為是用戶自定義的。
識別標識符;對用戶定義的標識符將IDENT放在TOKEN中,標識符本身的值放在ID中。
拼數:當所取單詞是數字時,將數的類別NUMBER放在TOKEN中,數值本身的值存放在NUM中。
拼復合詞:對兩個字符組成的算符 如: :〉=、:=等單詞,識別后將類別送TOKEN中。
從以上的解釋中我們不難看出,這個系統的詞法分析過程并不復雜,主要分成了兩部分:判斷字母、判斷數字。然后進行取單詞,進行一系列的判斷。
由于一個單詞往往是由一個或幾個字符組成的,所以在詞法分析過程CETTOKEN中又定義了一個取字符的過程CETCH如圖4,由詞法分析需要取字符上調用。
CETCHC所用單元的說明:
CH:存放當前讀取的字符,初值為空。
LINE:為一維數組,起數組元素是字符,用于讀入一行字符的緩沖區。
LL和CC為計數器,初值為0。
5.2 實現過程中應注意的幾個問題
1) 在進行詞法分析前,應該準備好如下兩個文件,分別是:
源程序文件:待分析的源程序文件。源程序文件可以在其文本框中即時更改;
保留字文件:待分析語言保留字的集合。它是按一種特殊格式編寫的文本文件,包含此種語言的所有保留字,其書寫的格式同標識符;
2) 在詞法分析過程中,詞法分析器建立和維護常數表,標識符表和保留字表。
3) 詞法分析最后的結果是生成Token序列。并與相關的表格聯系。

圖3 Gettoken流程圖

圖4 過程CETCH流程圖
6 總結
FETES是基于Visual Basic 6.0環境下開發的一個公式編輯、編譯及執行系統,相當于一個小型的編譯器,主要完成了從程序代碼的輸入到輸出表達式結果的整體編譯過程。
FETES 編譯程序的每個階段都是一個獨立的處理過程,但各個階段所進行的操作在邏輯上是緊密連接在一起的。詞法分析是為語法分析提供了識別的單詞序列并對其進行文法產生式的推導,從而判斷出整個程序是否符合已定義的語法規則,同時它完成了為編譯程序的下一個階段——FETES目標代碼生成提供中間代碼的功能FETES語言結構清晰,可讀性強,體現了高級語言編譯程序的關鍵技術和重要內容,是一般高級語言的必須部分。
參考文獻:
[1] Hausler P.Denotational program slicing[R].In Procecdings of the 22nd Hawaii International Conference on System Sciences.1989(2):486-494
[2] 呂映芝,張素琴,蔣維杜.編譯原理[M].北京:清華大學出版社,1998.
[3] 唐學忠.Visusal Basic程序設計教程[M].北京:中國電力出版社,2002.
[4] 杜叔敏,王永寧.編譯程序原理[M].北京:北京大學出版社,1986.