詞法 語法 語義分析結合

2022-12-07 23:33:04 字數 3593 閱讀 1952

一、實驗目的與要求

在實現詞法、語法分析程式的基礎上,編寫相應的語義子程式,進行語義處理,加深對語法制導翻譯原理的理解,進一步掌握將語法分析所識別的語法範疇變換為某種中間**(四元式)的語義分析方法,並完成相關語義分析器的**開發。

二、實驗內容

語法制導翻譯模式是在語法分析的基礎上,增加語義操作來實現的。對於給定文法中的每一產生式,編寫相應的語義子程式。在語法分析過程中,每當用乙個產生式進行推導或歸約時,語法分析程式除執行相應的語法分析動作之外,還要呼叫相應的語義子程式,以便完成生成中間**、查填有關**、檢查並報告源程式中的語義錯誤等工作。

每個語義子程式需指明相應產生式中各個符號的具體含義,並規定使用該產生式進行分析時所應採取的語義動作。這樣,語法制導翻譯程式在對源程式從左到右進行的一遍掃瞄中,既完成語法分析任務,又完成語義分析和中間**生成方面的工作。

輸入:包含測試用例,如由無符號數和構成的算術表示式的源程式檔案。

輸出:將源程式轉換為中間**形式表示,並將中間**序列輸出到檔案中。若源程式中有錯誤,應指出錯誤資訊。

三、一般實現方法

語法制導翻譯模式實際上是對前後文無關文法的一種擴充套件。一般而言,首先需要根據進行的語義工作,完成對文法的必要拆分和語義動作的編寫,從而為每個產生式都配備相應的語義子程式,以便在進行語法分析的同時進行語**釋。要求從編譯器的整體設計出發,重點通過對實驗二中語法分析程式的擴充套件,完成乙個編譯器前端程式的編寫、除錯和測試工作,形成乙個將源程式翻譯為中間**序列的編譯系統。

四、基本實驗題目

題目:對文法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...