递归下降文法C语言实验报告,递归下降语法分析器实验报告.doc
遞歸下降語法分析器實(shí)驗(yàn)報(bào)告
編譯原理實(shí)驗(yàn)報(bào)告
題目: 遞歸下降語法分析器
學(xué) 院 計(jì)算機(jī)科學(xué)與技術(shù)
專 業(yè) xxxxxxxxxxxxxxxx
學(xué) 號(hào) xxxxxxxxxxxx
姓 名 寧劍
指導(dǎo)教師 xx
20xx年xx月xx日
遞歸下降語法分析器
一、實(shí)驗(yàn)?zāi)康?
???? 了解語法分析的內(nèi)部工作原理,通過在本次實(shí)驗(yàn)中運(yùn)用一定的編程技巧,掌握對(duì)表達(dá)式進(jìn)行處理的一種方法。
算術(shù)表達(dá)式的文法可以是可以根據(jù)需要適當(dāng)改變:
→E+E|E-E|E*E|E/E|(E)|i
??? ?根據(jù)遞歸下降分析法或預(yù)測分析法 ,對(duì)表達(dá)式進(jìn)行語法分析 ,判斷一個(gè)表達(dá)式是否正確 。
(1) 準(zhǔn)備:1. 閱讀課本有關(guān)章節(jié),確定算術(shù)表達(dá)式的文法(設(shè)計(jì)出預(yù)測分析表2. 考慮好設(shè)計(jì)方案;3. 設(shè)計(jì)出模塊結(jié)構(gòu) 、測試數(shù)據(jù),初步編制好程序。
(2) 上機(jī)調(diào)試,發(fā)現(xiàn)錯(cuò)誤,分析錯(cuò)誤,再修改完善。教師根據(jù)學(xué)生的設(shè)計(jì)方案與學(xué)生進(jìn)行探討,以修改方案和代碼 。
(3)改造后的文法:E→E+T|E-T|T
T→TF|T/F|F
F→F^|P
P→c |id| (E)
四、實(shí)驗(yàn)環(huán)境?
計(jì)算機(jī) 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(
總結(jié)
以上是生活随笔為你收集整理的递归下降文法C语言实验报告,递归下降语法分析器实验报告.doc的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 穆图与天使与迦尔纳谁好
- 下一篇: c语言进制转换pdf下载,C语言实现任意