一、實驗目的與要求
在實現詞法、語法分析程式的基礎上,編寫相應的語義子程式,進行語義處理,加深對語法制導翻譯原理的理解,進一步掌握將語法分析所識別的語法範疇變換為某種中間**(四元式)的語義分析方法,並完成相關語義分析器的**開發。
二、實驗內容
語法制導翻譯模式是在語法分析的基礎上,增加語義操作來實現的。對於給定文法中的每一產生式,編寫相應的語義子程式。在語法分析過程中,每當用乙個產生式進行推導或歸約時,語法分析程式除執行相應的語法分析動作之外,還要呼叫相應的語義子程式,以便完成生成中間**、查填有關**、檢查並報告源程式中的語義錯誤等工作。
每個語義子程式需指明相應產生式中各個符號的具體含義,並規定使用該產生式進行分析時所應採取的語義動作。這樣,語法制導翻譯程式在對源程式從左到右進行的一遍掃瞄中,既完成語法分析任務,又完成語義分析和中間**生成方面的工作。
輸入:包含測試用例,如由無符號數和構成的算術表示式的源程式檔案。
輸出:將源程式轉換為中間**形式表示,並將中間**序列輸出到檔案中。若源程式中有錯誤,應指出錯誤資訊。
三、一般實現方法
語法制導翻譯模式實際上是對前後文無關文法的一種擴充套件。一般而言,首先需要根據進行的語義工作,完成對文法的必要拆分和語義動作的編寫,從而為每個產生式都配備相應的語義子程式,以便在進行語法分析的同時進行語**釋。要求從編譯器的整體設計出發,重點通過對實驗二中語法分析程式的擴充套件,完成乙個編譯器前端程式的編寫、除錯和測試工作,形成乙個將源程式翻譯為中間**序列的編譯系統。
四、基本實驗題目
題目:對文法g3[《算術表示式》]中的產生式新增語義處理子程式,完成無符號數的四則運算的計值處理,將輸入的四則運算轉換為四元式形式的中間**。本實驗只進行了算術表示式四元式的翻譯。
5、源**
詞法分析.**件
# include <>
# include <>
# include <>
# include <>
# include <>
# define unknown -1
# define lb 0//左括號
# define rb 1//右括號
# define pl 2
# define mi 3
# define mu 4
# define di 5
# define ucon 6 //suppose the class number of unsigned constant is 7
# define over 7
//# define int 7
# define lt 8
# define le 9
# define eq 10
# define ne 11
# define gt 12
# define ge 13
# define is 19//14至18被五個關鍵字占用
# define id 20
#define max_key_number 20 /*關鍵字的數量*/
#define key_word_end "waiting for your expanding" /*關鍵字結束標記*/
char *keywordtable[max_key_number]=;
char token[20]="";//儲存已掃瞄的單詞
char ch=' ';//用於儲存帶判斷的字元
int row=1;//row標識錯誤在第幾行
//無符號數部分
#define digit 1
#define point 2
#define other 3
#define power 4
#define plus 5
#define minus 6
#define classother 200
#define endstate -1
int index=0;//儲存已讀的字串的索引
//char judgestr[256];//儲存已讀的字串
int w,n,p,e,d;
int class; //used to indicate class of the word
int icon;
float fcon;
static int currentstate; //used to present current state, the initial value:0
///////語法分析部分
//產生式
/* 1、e->e+t 2、e->e-t 3、e->t 4、t->t*f 5、t->t/f 6、t->f 7、f->(e) 8、f->i
*/# define smax 256
//goto表的列項
# define e 0
# define t 1
# define f 2
int statestack[smax];//狀態棧
int stackpoint;//狀態棧指標
int topstate;//作為狀態棧盞棧頂指標
int inputwordtype;//輸入的單詞型別
ichar action[16][8][4]=;//action表
e t f
int goto[16][3]=,
1, -1, -1},
1, -1, -1},
1, -1, -1},
10, 2, 3},
1, -1, -1},
1, 11, 3},
1, 12, 3},
1, -1, 13},
1, -1, 14},
1, -1, -1},
1, -1, -1},
1, -1, -1},
1, -1, -1},
1, -1, -1},
1, -1, -1},};//goto表
//語義分析部分
#define pmax 5//define 後面不加括號,定義產生式符號屬性字串的長度
int nxq=0; /*全域性變數nxq用於指示所要產生的下乙個四元式的編號*/
int nxtemp=1;//整型變數nxtemp指示臨時變數的編號
int sentencecount=1;//存放檔案中句子的個數
struct quaternion /*四元式表的結構*/
pquad[256]; /*存放四元式的陣列*/
char ebracket_place[pmax];//(e)的語義屬性
char i_place[pmax];
char e_place[pmax];
char t_place[pmax];
char f_place[pmax];
//char judgestr[100];
int excute (int state, int symbol,file *fp,char judgestr,int row,int index);
int getchar (char ch);
int handleerror (char strjudge,int row);
int push( int state );
法語病句分析
一些初學法語的中國學生因為對法語單詞搭配 短語運用 句型結構等掌握不太熟練,又因為受漢語影響,往往用漢語的模式,用中國人的思維講出或寫出一些語意不明 不符合法語語法和法語習慣的不正確的法語和漢語式法語 現列舉一部分病句分別加以分析與說明。1 他慢慢地朝前走。誤 il ance lentement e...
四級文法語法句型總結
四級主要句型 1比 表示比較,謂語是形容詞或形容動詞 2不如 助詞 是以某一事例來表示狀態,性質的。謂語用形容詞或形容動詞的否定形式 3 a b 比 更 助詞 接在比較的物件後面。謂語上形容詞或形容動詞4 a ba ba和b哪個 表示詢問a,b相比較時的句型 5 中 何在 裡,哪個最 6 a b c...
日語四級考試文法語法句型總結
四級主要句型 1比 表示比較,謂語是形容詞或形容動詞 2不如 助詞 是以某一事例來表示狀態,性質的。謂語用形容詞或形容動詞的否定形式 3 a b 比 更 助詞 接在比較的物件後面。謂語上形容詞或形容動詞4 a ba ba和b哪個 表示詢問a,b相比較時的句型 5 中 何在 裡,哪個最 6 a b c...