编译原理-递归下降分析法 c程序部分的分析
实验三 语法分析程序实验
专业 商软2班 姓名 黄仲浩 学号 201506110166
一、 实验目的
编制一个部分文法分析程序。
二、 实验内容和要求
输入:源程序字符串
输出:正确或者错误
三、 实验方法、步骤及结果测试
- 源程序名:递归下降分析.c
可执行程序名:递归下降分析.c
- 原理分析及流程图
#include<stdio.h> #include<string.h> char Token[30];//存储输入的字符 char sym;//记录下一个字符 char s;//输入字符的传递 static int p=0 ;//下一个字符的下标 void S(); void T(); void U(); void scaner();//下一个字符 void error();//错误结束 //以此文法为基础作此程序 //S->a|^|(T) //T->SU //U->,SU|$ int main() { int i=-1; printf("Please input :\n"); do { scanf("%c",&s);i++; Token[i]=s; }while(Token[i]!='#'); scaner(); S(); if(sym=='#') printf("Success!\n"); else printf("fail!\n"); return 0 ; } void scaner() { sym=Token[p]; p++; } void error() { printf("error!"); } void S() { if(sym=='a'||sym=='^')//如果是a或者是^ scaner(); else if(sym=='(') { scaner(); T(); if(sym==')') scaner(); else error(); } } void T() { S(); U(); } void U() { if(sym==',') { scaner(); S(); U(); } else if(sym!=')') error(); }
- 主要程序段及其解释:
S().T().U()//只是分析c语言的部分
scaner()//进行下一个字符的记录
error()//结束的标志
- 运行结果及分析
四、 实验总结
此程序只是以部分为主做出来,是为了慢慢地做好全部c语言的分析。我会慢慢以此思考LL(1)文法来进行最终的文法改写分析。