当前位置:文档之家› 编译原理实验报告——实验二 递归下降分析

编译原理实验报告——实验二 递归下降分析

if(sym=='*') {
printf("T'->*FT'\t"); printf("#E'T'F*\t\t"); print(); } else { printf("T'->/FT'\t"); printf("#E'T'F/\t\t"); print(); }
7
myAdvance(); printf("\t\t"); printf("#E'T'F\t\t"); print(); myF(); } if( sym!='*'||sym!='/') { printf("T'->^\t\t"); printf("#E'\t\t"); print(); } return(1); } else return(0); } /*判断是否是表达式或者括号*/ int myF() { int p; if (sym >= 'A' && sym <= 'Z' || sym >= 'a' && sym <= 'z' ) { printf("F->i\t\t"); printf("#E'T'i\t\t"); print(); myAdvance(); printf("\t\t"); printf("#E'T'\t\t"); print(); return(1); } else{
9
print(); return(1); } } } /*移位*/ void myAdvance() { int i; if (ip < strlen(st)) { ip = ip + 1; sym1(); } } /*main 函数*/ void main() { gets(st); init(); printf("所用产生式\t 符号栈\t\t 输入串\n"); printf("\t\t"); printf("#E\t\t"); print(); myE(); if (sym!='#' || tz==1) { printf("error\n"); tz = 0; } else printf("right\n"); } 六、实验者自评(主要从实验态度、方法、效果上给一个客观公正的自我评价) 通过这次实验知道了递归下降分析的过程,刚开始这个程序我只是按照实验指导书上 给出的流程图以及要求写了最简单的一种,但是不能把分析过程显示出来,并且还有地方 有错,并没有达到老师要求。后来经过修改才体现了分#39;->^\t\t"); printf("#\t\t"); print(); return(1);
} } else
return(0); } /*判断乘除*/ int myT() {
printf("T->FT'\t\t"); printf("#E'T'F\t\t"); print(); int p; p=myF(); if(p) { while( sym=='*'||sym=='/') {
10
通过本次试验,我能够设计、编制、调试一个递归下降语法分析程序,实现对词法分 析程序所提供的单词序列进行语法检查和结构分析,掌握常用的语法分析方法,掌握了从 源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法,理解了词法分析 的实现方法、
11
return(1); else
return(0); }
if (sym != ')' ) { printf("error\n"); tz = 1; return(0);
} else { printf("F->(E)\t\t"); printf("#E'T'(E)\t"); print(); myAdvance(); printf("\t\t"); printf("#E'T'\t\t");
2
四、讨论与分析 根据递归下降法分析法和分析对象,可以得出下面的流程图。 用递归下降法分析上述算术表达式的框图,如图 3-4 所示。 这里,ZC 过程为总控程序,主要完成: (a)通知外界键入算术表达式; (b)控制E过程分析算术表达式; (c)根据分析结果之正误,分别通知外界不同的信息。 ZC 过程被设计成可以分析无穷多个算术表达式。E、T 和 F 三个过程分别对应〈算术 表达式〉、〈项〉和〈因式〉三个产生式的处理。它们用到两个公共过程。一个是函数 过程 SYM,它负责从输入字符串 ST 中取出下一个字符,并存入 SYM 中等待分析。另一个 过程 ADVANCE 负责剔除 ST 中的首字符。
编译原理实验报告
实验名称: 实验类型: 指导教师: 专业班级: 姓 名: 学 号: 电子邮件: 实验地点: 实验成绩:
编写递归下降语法分析器 验证型实验 庄燕滨 10 软件卓越 黄子轩 10030416
15251909800@ 秋白楼 B705
日期: 2013 年 5 月 31 日
1
一、实验目的 通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单 词序列进行语法检查和结构分析,掌握常用的语法分析方法。通过本实验,应达到以 下目标: 1、掌握从源程序文件中读取有效字符的方法和产生源程序的内部表示文件的方法。 2、掌握词法分析的实现方法。 3、上机调试编出的语法分析程序。 二、实验过程 1、分析对象 分析算术表达式的 BNF 定义如下: 〈算术表达式〉→〈项〉|〈算术表达式〉+〈项〉|〈算术表达式〉-〈项〉 〈项〉→〈因式〉|〈项〉*〈因式〉|〈项〉/〈因式〉 〈因式〉→〈变量〉│(〈算术表达式〉) 〈变量〉→i 用符号表示如下: E→T|E+T|E-T T→F|T*F|T/F F→i│(E) 2、题目: 编写递归下降语法分析器。 3、要求: 根据递归下降法分析法,完成上述算术表达式的分析器构造。主要完成: (1) 通知外界键入算术表达式; (2) 控制过程分析算术表达式; (3) 根据分析结果正误,分别通知外界不同的信息。 三、实验结果 测试数据:i*i+i# 实验结果:
3
4
5
五、附录:关键代码(给出适当注释,可读性高) /* 判断加减*/ int myE() { printf("E->TE'\t\t"); printf("#E'T\t\t"); print(); int p ; p=myT(); if(p) { while(sym=='+'||sym=='-') {
if (sym !='(' )
8
{ printf("error\n"); return(0); tz = 1;
} else {
printf("F->(E)\t\t"); printf("#E'T'(E)\t"); print(); myAdvance(); printf("\t\t"); printf("#E'T'\t\t"); print(); p =myE(); if(p)
if(sym=='+') {
printf("E'->+TE'\t"); printf("#E'T+\t\t"); print(); } else { printf("E'->-TE'\t"); printf("#E'T-\t\t"); print(); } myAdvance(); printf("\t\t"); printf("#E'T\t\t"); print(); myT(); return(1); } if(sym!='+'||sym!='-')
相关主题