一、實驗目的:
利用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
#include
using namespace std;
char ch;
char arr1[100], arr2[15],arr3[15];//arr1輸入,arr2輸出
int syn, row, sum ; //syn為單詞種別碼,sum為整形常數。
int p=0,m=0,n=0;
int flag=0;
char* words[6] = ;
void sca();
void s();//解析語句
void s1();
void s2();
void s3();
void s4();
void c();//解析條件
void e();//解析表示式
void e1();
void t();//解析項
void t1();
void f();//解析因子
void s()
else if(syn == 2)
else if(syn == 4)
else if(syn == 0)
else
}elseelse}}
void s1()
else
}void s2()
else
}void s3()
else
}void s4()
if(syn == 6)
else
}else
}void c()
else
e();
} void e()
void e1()
else if(syn == 28 || syn == 0)
}void t()
void t1()
else if(syn == 13 ||syn == 14 || syn == 28 || syn == 0)
}void f()
else
}else if(syn == 10 || syn == 11)
else
}int main()
while (ch != '#');
p = 0;
// do
////
arr2[m++] = '\0';
--p;
syn = 10;
for (n = 0; n < 6; ++n)}}
else if ((ch >= '0' && ch <= '9'))
--p;
syn = 11;
if (sum > 32767)
}else switch (ch)
else if (ch == '=')
else
break;
case '>':
m = 0;
arr2[m++] = ch;
ch = arr1[p++];
if (ch == '=')
else
break;
case ':':
m = 0;
arr2[m++] = ch;
ch = arr1[p++];
if (ch == '=')
else
break;
case '*':
syn = 13;
arr2[0] = ch;
break;
case '/':
syn = 14;
arr2[0] = ch;
break;
case '+':
syn = 15;
arr2[0] = ch;
break;
case '-':
syn = 16;
arr2[0] = ch;
break;
case '=':
syn = 25;
arr2[0] = ch;
break;
case ';':
syn = 26;
arr2[0] = ch;
break;
case '(':
syn = 27;
arr2[0] = ch;
break;
case ')':
syn = 28;
arr2[0] = ch;
break;
case '#':
syn = 0;
arr2[0] = ch;
break;
case '\n':
syn = -2;
break;
default:
syn = -1;
arr3[0]=ch;
break;}}
實驗二 遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
實驗二 遞迴下降語法分析
一 實驗目的 利用c語言編制遞迴下降分析程式,並對簡單語言進行語法分析。編制乙個遞迴下降分析程式,實現對詞法分析程式所提供的單詞序列的語法檢查和結構分析。二 實驗原理 每個非終結符都對應乙個子程式。該子程式根據下乙個輸入符號 select集 來確定按照哪乙個產生式進行處理,再根據該產生式的右端 三 ...
遞迴下降語法分析實驗
通過設計 開發乙個高階語言的遞迴下降語法分析程式,實現 對詞法分析程式所提供的單詞序列進行語法檢查和結構分析,加 深對相關課堂教學內容的理解,提高語法分析方法的實踐能力。1 理解語法分析在編譯程式中的作用,以及它與詞法分析程式的 關係 2 掌握遞迴下降語法分析方法的主要原理 3 理解遞迴下降分析法對...