編譯原理實驗 語法分析器

2021-08-30 19:25:00 字數 2248 閱讀 2898

/*

待分析的簡單語言的語法

用擴充的bnf表示如下:

⑴《程式》::=begin《語句串》end

⑵《語句串》::=《語句》

⑶《語句》::=《賦值語句》

⑷《賦值語句》::=id:=《表示式》

⑸《表示式》::=《項》

⑹《項》::=《因子》;//關鍵字表

int syn,p,m,n,sum;

/*syn是種別碼,p為prog陣列的指標,m為token陣列的指標,n為rwtab陣列的指標,sum為詞法分析器裡的數字數值大小*/

int flag;//flag與判斷是否end有關

void factor(void);//因式 factor

void expression(void);//表示式 expression

void yucu(void);

void term(void);//項 term

void statement(void);// 語句 statement

void parser(void);

void scaner(void);//掃瞄器

int main(void)

while(ch!='#');

p=0;

scaner();//主要完成賦值種別碼等詞法分析功能

parser();//呼叫各種遞迴子程式,完成語法分析的過程

//getch();

}/*呼叫各種遞迴子程式,完成語法分析的過程*/

void parser(void)

else

}else

return;

}void yucu(void)

return;

}void statement(void)

else

}else

return;

}void expression(void)

return;

}void term(void)

return;

}void factor(void)//因式處理函式

else if(syn==27)//開頭是左括號(

else

}else

return;

}/*主要完成賦值種別碼等詞法分析功能*/

void scaner(void)//掃瞄器,詞法分析器內容

p--;//迴圈跳出,要-1

syn=10;//10,字母開頭

token[m++]='\0';//\0為字串結束符

/*判別是否為關鍵字*/

for(n=0;n<6;n++)//n為rwtab的指標

if(strcmp(token,rwtab[n])==0)//strcmp返回值為0,則兩個引數大小相同

}else if((ch>='0')&&(ch<='9'))//遇到數字

p--;//回溯

syn=11;//11為數字

} /*除數字和字母開頭以外的其他符號*/

else

switch(ch)

else if(ch=='=')

else

break;

case '>':

m=0;

ch=prog[p++];

if(ch=='=')

else

break;

case ':':

m=0;

ch=prog[p++];

if(ch=='=')

else

break;

case '+':

syn=13;

break;

case '-':

syn=14;

break;

case '*':

syn=15;

break;

case '/':

syn=16;

break;

case '(':

syn=27;

break;

case ')':

syn=28;

break;

case '=':

syn=25;

break;

case ';':

syn=26;

break;

case '#':

syn=0;

break;

default:

syn=-1;

break;

}}

編譯原理語法分析器

採用至少一種句法分析技術 ll 1 slr 1 lr 1 或lalr 1 對類高階語言中的基本語句進行句法分析。闡述句法分析系統所要完成的功能。1 能識別以下幾類語句 宣告語句 包括變數宣告 陣列宣告 記錄宣告和過程宣告 表示式及賦值語句 包括陣列元素的引用和賦值 分支語句 if then else...

編譯原理 語法分析器

當乙個文法滿足ll 1 條件時,我們就可以為它構造乙個不帶回溯的自上而下分析程式,這個分析程式是由一組遞迴過程組成的,每個過程對應文法的乙個非終結符。這樣的乙個分析程式成為遞迴下降分析器。例 乙個支援 的簡單文法為 用 表示空字元 e te e te t ft t ft f e i 編譯原理 第三版...

編譯原理 LL(1)語法分析器

1.專案要求 文法要求 1 從檔案讀入,每條產生式占用一行 2 文法為ll 1 文法 從檔案中讀入文法,從鍵盤上輸入待分析的符號串,採用 ll 1 分析演算法判斷該符號串是否為該文法的句子。2.實驗思路 首先實現集合first x 構造演算法和集合follow a 構造演算法,再根據first和fo...