資源簡介
通過C語言編寫一個語法分析器采用遞歸下降分析法編寫語法分析程序及LL(1)語法分析法編寫語法分析程序。附上實驗報告。

代碼片段和文件信息
#include??
#include??
#include??
#define?N?100??
??
int?seekProd(int?stackTopint?inputstrTop);??
//char?inputstr[10]=“i*i+i#“;??
char?inputstr[20];??
char?stack[10]=““;??
??
typedef?struct?production{??
????char?leftChar;??
????char?rightChars[4];??
????char?allChars[8];??
}Prod;??
??
Prod?productions[8];??
void?init();??
int?stackPush(int?*top?Prod?prod);??
int?matching(int?*top?char?*inputstr);??
int?main()??
{??
????int?len;//輸入串的長度??
????int?stackTop=1;??
????int?inputstrTop=0;??
????int?i;??
????char?*z=“#“;??
????int?index=0;??
??
??????
????init();//產生式初始化??
??????
????stack[0]=‘#‘;??
????stack[stackTop]=‘E‘;??
????printf(“請輸入字符串:“);??
????gets(inputstr);??
??????
????len=strlen(inputstr);??
????inputstr[len]=‘#‘;??
????while(?stackTop>=0?)??
????{??
????//??printf(“%d%d\n“stackTopinputstrTop);??
????????printf(“第%2d步:“++index);??
????????printf(“當前棧:%-8s“stack);??
????????printf(“輸入字符串:%8s“inputstr);??
????????//根據棧定元素和字符串首字母??
??????????
????????if(matching(&stackTopinputstr)){??
????????????printf(“\n“);??
????????}else{??
????????????i=seekProd(stackTopinputstrTop);??
????????????stackPush(&stackTopproductions[i]);//壓棧??
????????????printf(“進行下一步所用的產生式:%s\n“productions[i].allChars);??
????????}?????????
????}??
????if(stackTop+1==0)??
????{??
????????printf(“分析成功!\n“);??
????}??
??
????return?0;??
}??
??
//搜索分析表??
int?seekProd(int?stackTopint?inputstrTop)??
{??
//??printf(“stack[stackTop]=%c\n“stack[stackTop]);??
????if(stack[stackTop]==‘E‘){??
????????if(inputstr[inputstrTop]==‘i‘)??
????????{??
????????????return?0;??
????????}else?if(inputstr[inputstrTop]==‘(‘){??
????????????return?0;??
????????}else{??
????????????return?-1;??
????????}??
????}else?if(stack[stackTop]==‘X‘){??
????????if(inputstr[inputstrTop]==‘+‘)??
????????{??
????????????return?1;??
????????}else?if(inputstr[inputstrTop]==‘)‘){??
????????????return?2;??
????????}else?if(inputstr[inputstrTop]==‘#‘){??
????????????return?2;??
????????}else{??
????????????return?-1;??
????????}??
????}else?if(stack[stackTop]==‘T‘){??
????????if(inputstr[inputstrTop]==‘i‘)??
????????{??
????????????return?3;??
????????}else?if(inputstr[inputstrTop]==‘(‘){??
????????????return?3;??
????????}else{??
????????????return?-1;??
????????}??
????}else?if(stack[stackTop]==‘Y‘){??
????????if(inputstr[inputstrTop]==‘+‘)??
????????{??
????????????return?5;??
????????}else?if(inputstr[inputstrTop]==‘*‘){??
????????????return?4;??
????????}else?if(inputstr[inputstrTop]==‘)‘){??
????????????return?5;??
????????}else?if(inputstr[inputstrTop]==‘#‘){??
????????????return?5;??
????????}else{??
????????????return?-1;??
????????}??
????}else?if(stack[stackTop]==‘F‘){??
????????if(inputstr[inputstrTop]==‘i‘){??
????????????return?7;??
????????}else?if(inputstr[inputstrTop]==‘(‘){??
????????????return?6;??
????????}else{??
????????????return?-1;??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2017-04-17?16:13??語法分析器\
?????文件????????4907??2017-04-17?16:13??語法分析器\語法分析器代碼.c
?????文件???????75776??2017-04-12?22:49??語法分析器\語法分析器實驗報告.doc
- 上一篇:詞法分析器C語言編寫附實驗報告
- 下一篇:回到原點的騎士游歷問題代碼
評論
共有 條評論