电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

递归下降分析器程序(c语言版,编译原理实验)1VIP免费

递归下降分析器程序(c语言版,编译原理实验)1_第1页
递归下降分析器程序(c语言版,编译原理实验)1_第2页
递归下降分析器程序(c语言版,编译原理实验)1_第3页
《编译原理》实验报告 实验二:语法分析程序设计 班级: 08 计算计(3)班 姓名: 斯军浩 学号: E08620325 递归下降分析器设计 [实验目的]: 1. 了解语法分析的主要任务。 2. 熟悉编译程序的编制。 [实验内容]:根据某文法,构造一基本递归下降语法分析程序。给出分析过程中所用的产生式序列。 [实验要求]: 1. 构造一个小语言的文法,例如,Pascal语言子集的文法(同实验一),考虑其中的算术表达式文法: G[<表达式>]: G[E]: <表达式>→<表达式>+<项>|<表达式>-<项>|<项> E→E+T|T <项>→<项>*<因式>|<项>/<因式>|<因式> T→T*F|F <因式>→<标识符>|<无符号整数>|(<表达式>) F→i|(E) 2. 设计语法树的输出形式,例如: 产生式 …… 3. 编写递归下降语法分析程序dgxj.c 实现基本的递归下降分析器,能够分析任给的符号串是否为该文法所定义的合法算术表达式。实验报告中要说明分析使用的方法。 4. 生成并输出分析过程中所用的产生式序列: 1 产生式1 2 产生式2 …… [实验步骤]: 1. 写出一个小语言的文法,根据情况自由选择C语言或Pascal语言。 2. 写出该小语言的算术表达式等价的LL(1)文法。 G[E]: 其中 E→TG G为E’ G→+TG|∧ ∧为ε T→FS S为T’ S→*FS|∧ F→i|(E) 3. 编写递归下降语法分析程序。 4. 调试运行程序。 5. 结果分析。 6. 撰写实验报告。 实验代码 #include void E(); void T(); void E1(); void T1(); void F(); char s[100]; int i, SIGN; int main() { printf("请输入一个语句,以#号结束语句(直接输入#号推出)\n"); while( 1 ) { SIGN = 0; i=0; scanf("%s",&s); if( s[0] == '#') return 0; E(); if(s[i]=='#') printf("正确语句!\n"); printf("请输入一个语句,以#号结束语句\n"); } return 1; } void E() { if(SIGN==0) { T(); E1(); } } void E1() { if(SIGN==0) { if(s[i]=='+') { ++i; T(); E1(); } else if(s[i]!='#'&&s[i]!=')') { printf("语句有误!\n"); SIGN=1; } } } void T() { if(SIGN==0) { F(); T1(); } } void T1() { if(SIGN==0) { if(s[i]=='*') { ++i; F(); T1(); } else if(s[i]!='#'&&s[i]!=')'&&s[i]!='+') { printf("语句有误!\n"); SIGN=1; } } } void F() { if(SIGN==0) { if(s[i]=='(') { ...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部