一、實驗目的:
利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。
編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。
二、實驗原理
每個非終結符都對應乙個子程式。
該子程式根據下乙個輸入符號(select集)來確定按照哪乙個產生式進行處理,再根據該產生式的右端:
三、實驗要求說明
輸入單詞串,以「#」結束,如果是文法正確的句子,則輸出成功資訊,列印「success」,否則輸出「error」,並指出語法錯誤的型別及位置。
例如:
輸入begin a:=9;x:=2*3;b:=a+x end #
輸出success
輸入x:=a+b*c end #
輸出『end' error
四、實驗步驟
1.待分析的語言的語法(參考p90)
2.將其改為文法表示,至少包含
–語句
–條件
–表示式
3. 消除其左遞迴
4. 提取公共左因子
5. select集計算
6. ll(1)文法判斷
7. 遞迴下降分析程式
#include
#include
#include
void lrparser();
void yucu();
void scaner(); //詞法分析
void statement();//語句
void condition();//條件
void expression();//表示式
void term();//項
void factor();//因子
int kk=0;
char prog[100],token[10];//輸入程式段陣列,大小為80
int syn,i=0,ks=0,js=0,m,n,sum=0,k=0;
char ch;
const char *blz[7]= ;//保留字
int main()
printf("********************語法分析程式***************\n");
printf("請輸入源程式,以#結束:\n");
ch=getchar();
while(ch!='#')
prog[i]='#';
i++;
prog[i]='\0';
i=0;
scaner();
lrparser();
printf("語法分析結束!\n");
}void scaner()
if((ch>='a' && ch<='z') ||(ch>='a' && ch<='z'))
token[n++]='\0';
for(n=0; n<7; n++)
if(syn==6)
break;}}
i--;
if(syn==10)
} else if(ch>='0' && ch<='9') else else if(ch=='=') else
break;
case '>':
ch=prog[i++];
if(ch=='=') else
break;
case ':':
ch=prog[i++];
if(ch=='=') else
break;
case '+':
syn=13;//當為+時,數字碼為13
printf("\n",ch,syn);
break;
case '-'://當為-時,數字碼為14
syn=14;
printf("\n",ch,syn);
break;
case '*':
syn=15;//當為*時,數字碼為15
printf("\n",ch,syn);
break;
case '/':
syn=16;//當為<>時,數字碼為21
printf("\n",ch,syn);
break;
case ';':
syn=26;//當為;時,數字碼為26
printf("\n",ch,syn);
break;
case '(':
syn=27;//當為(時,數字碼為27
printf("\n",ch,syn);
break;
case ')'://當為)時,數字碼為28
syn=28;
printf("\n",ch,syn);
break;
case '='://當為=時,數字碼為25
syn=25;
break;
case '#'://當為#時,數字碼為0
遞迴下降語法分析
看了這篇部落格之後,總算搞明白了以前編譯原理沒搞懂的ll文法的意義。下面用這種方法實現乙個簡單的計算機器程式 其bnf正規化如下 operator operator operator operator expression 0,1,2,3,4,9 expression operator expres...
遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
遞迴下降語法分析實驗
通過設計 開發乙個高階語言的遞迴下降語法分析程式,實現 對詞法分析程式所提供的單詞序列進行語法檢查和結構分析,加 深對相關課堂教學內容的理解,提高語法分析方法的實踐能力。1 理解語法分析在編譯程式中的作用,以及它與詞法分析程式的 關係 2 掌握遞迴下降語法分析方法的主要原理 3 理解遞迴下降分析法對...