递归下降文法C语言实验报告,递归下降语法分析器实验报告.doc
遞歸下降語法分析器實驗報告
編譯原理實驗報告
題目: 遞歸下降語法分析器
學 院 計算機科學與技術
專 業 xxxxxxxxxxxxxxxx
學 號 xxxxxxxxxxxx
姓 名 寧劍
指導教師 xx
20xx年xx月xx日
遞歸下降語法分析器
一、實驗目的?
???? 了解語法分析的內部工作原理,通過在本次實驗中運用一定的編程技巧,掌握對表達式進行處理的一種方法。
算術表達式的文法可以是可以根據需要適當改變:
→E+E|E-E|E*E|E/E|(E)|i
??? ?根據遞歸下降分析法或預測分析法 ,對表達式進行語法分析 ,判斷一個表達式是否正確 。
(1) 準備:1. 閱讀課本有關章節,確定算術表達式的文法(設計出預測分析表2. 考慮好設計方案;3. 設計出模塊結構 、測試數據,初步編制好程序。
(2) 上機調試,發現錯誤,分析錯誤,再修改完善。教師根據學生的設計方案與學生進行探討,以修改方案和代碼 。
(3)改造后的文法:E→E+T|E-T|T
T→TF|T/F|F
F→F^|P
P→c |id| (E)
四、實驗環境?
計算機 VC++軟件#include
#include
#include
#include
#include
void error();
void terror();
void Scanner();
char sym=' ';
int i=0;
char strToken[30]={""};
FILE *in;
void E();
void E1();
void F();
void Retract(char str[30]){
for(int j=0;j<30;j++){
str[j]=0;
}
}
void Scanner(){
sym=fgetc(in);
if (isspace(sym)){
while(1){
if(isspace(sym)){
sym=fgetc(in);
}
else break;
}
}
if(isdigit(sym)){
while(1){
if (isdigit(sym)){
strToken[i]=sym;
i++;
sym=fgetc(in);
}
else{
printf("%s",strToken);
i=0;
Retract(strToken);
fseek(in,-2,1);
sym=fgetc(in);
break;
}
}
}
else{
if(sym=='+'){
printf("+");
}
else if(sym=='-'){
printf("-");
}
else if(sym=='*'){
printf("*");
}
else if(sym=='/'){
printf("/");
}
else if(sym=='^'){
printf("^");
}
else if(sym=='('){
printf("(");
}
else if(sym==')'){
printf(")");
}
}
}
void F(){
if(isdigit(sym)){
Scanner();
}
else if (sym=='('){
Scanner();
E();
if(sym==')'){
Scanner();
}
else error();
}
else terror();
}
void T1(){
if(sym=='*'||sym=='/'||sym=='^'){
Scanner();
F();
T1();
}
}
void T(){
F();
T1();
}
void E1(){
if (sym=='+'||sym=='-'){
Scanner();
T();
E1();
}
}
void E(){
T();
E1();
}
void error(){
printf("\nThis is a wrong phrase!\n");
exit(0);
}
void terror(
總結
以上是生活随笔為你收集整理的递归下降文法C语言实验报告,递归下降语法分析器实验报告.doc的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 穆图与天使与迦尔纳谁好
- 下一篇: 上海欢乐谷让带吃的进去吗