一、實驗目的:
加深對語法分析器工作過程的理解;加強對遞迴下降法實現語法分析程式的掌握;能夠採用一種程式語言實現簡單的語法分析程式;能夠使用自己編寫的分析程式對簡單的程式段進行語法翻譯。
二、實驗內容:
在實驗1的基礎上,用遞迴下降分析法編制語法分析程式,語法分析程式的實現可以採用任何一種程式設計工具。
三、實驗要求:
1. 對語法規則有明確的定義;
2. 編寫的分析程式能夠進行正確的語法分析;
3. *對於遇到的語法錯誤,能夠做出簡單的錯誤處理,給出簡單的錯誤提示,保證順利完成語法分析過程;
4. 實驗報告要求用文法的形式對語法定義做出詳細說明,說明語法分析程式的工作過程,說明錯誤處理的實現*。
四、實驗步驟:
1. 定義目標語言的語法規則;
2. 根據語法規則輸入語句段,用遞迴下降分析的方法進行語法分析,直到結束;
3. *對遇到的語法錯誤做出錯誤處理。
五、實驗內容:
1.程式設計實現給定文法的遞迴下降分析程式。
e→t|e+t
t→f|t*f
f→(e)|i
2.對文法先進行消除左遞迴。
3.分析程式由一組遞迴過程組成,文法中每個非終結符對應乙個過程幾個全域性過程和變數:
advance,把輸入串指示器ip指向下乙個輸入符號,即讀入乙個單字符號
sym,ip當前所指的輸入符號
error,出錯處理子程式
每個非終結符有對應的子程式的定義,首先在分析過程中,當需要從某個非終結符出發進行展開(推導)時,就呼叫這個非終結符對應的子程式。
4. 具體實現時:
(1)當遇到終結符,編寫: if(當前讀到的輸入符號=i)
讀入下乙個輸入符號
(2)當遇到非終結符e時,編寫語句: 呼叫e()
(3)當遇到e-->e 編寫語句 if(當前讀到的輸入符號不屬於follow(e))
error();
(4)當某個非終結符的規則有多個候選式時,按ll(1)文法的條件能唯一的選擇乙個候選式進行推導。
#include
using namespace std;
chara[80];
// 字串的存入
charsym;
// 單個的判斷字元
inti=0;
// 字串下標
voide();
// 功能識別函式
voide2();
// 功能識別函式
voidt();
// 功能識別函式
voidt2();
// 功能識別函式
voidf();
// 功能識別函式
void input();
// 輸入函式
void advance(); // 字串小標進一函式
。。。。。。。。
#include
#include
#include
#include
char a[50] ,b[50],d[200],e[10];
char ch;
int n1,i1=0,flag=1,n=5;
int total=0;
int e();
int e1();
int t();
int g();
int s();
int f();
void input();
void input1();
void output();
voidmain()
while(ch!='#');
n1=j;
ch=b[0]=a[0];
printf("步驟t文法t分析串tt分析字元t剩餘串n");
f=e1();
if (f==0) return;
if (ch=='#')
}else
printf("n");
printf("回車返回n");
getchar();
getchar();
}int e1()
int e()
int t()
int g()
printf("%dtg-->^t",total);total++;
e[0]='g';e[1]='=';e[2]='>';e[3]='^';e[4]='#';
output();
flag=1;
input();input1();
return(1);
}int s()
printf("%dts-->^t",total);total++;
e[0]='s';e[1]='=';e[2]='>';e[3]='^';e[4]='#';
output();
flag=1;
a[i1]=ch;
input();input1();
return(1);}
int f()
else
}else if(ch=='i')
else
return(1);
}voidinput()
void input1()
d[n]='#';
for(j=3;e[j]!='#';j++)
k=k+1;
while(d[k]!='=')
d[n]='#';
system("pause");
}
遞迴下降語法分析
看了這篇部落格之後,總算搞明白了以前編譯原理沒搞懂的ll文法的意義。下面用這種方法實現乙個簡單的計算機器程式 其bnf正規化如下 operator operator operator operator expression 0,1,2,3,4,9 expression operator expres...
遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...