欢迎来到天天文库
浏览记录
ID:44645290
大小:228.71 KB
页数:10页
时间:2019-10-24
《编译原理-语法分析》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理实验报告词法分析实验班级:计算机科学与技术1201姓名:学号:一、实验题目表达式语法分析设计二、实验目的熟悉并设计一个表达式的语法分析器三、实验内容1.设计表达式的语法分析器算法2・编写代码并上机调试运行通过要求:输入表达式输出——表达式语法是否正确四、概要设计语法分析4种常用的语法分析方法四种算法为(1)设计算术表达式的递归下降子程序分析算法(2)设计算术表达式的LL(1)分析算法(3)设计算术表达式的简单优先分析算法(4)设计算术表达式的SLR(l)分析算法根据算术表达式的特点,决定选取第•和第二种算
2、法。其中递归下降算法对其文法进行变换1・算术表达式文法G(E):ETE3°TTTTTFF9i
3、(E)2.文法变换:G,(E)ETT{o0T}TTF{3】F}FTi(E)根据文法变换后的形式编写程序。第二个算法LL仃)分析算法,依据算术表达式的文法进行变换,变换后的文法形式为:文法变换:G‘(E):ETTeeT+Te£TTFttT*Ft
4、eFTi
5、(E)根据此文法建立分析表,根据分析表采用if和else语句实现分析表。五、递归下降子程序框图:六、递归下降程序源代码#includeviostream>usingnam
6、espacestd;intvalue=l;charch;intiloact=0;charstr[80];voidProT(void);voidProF(void);voiderror()〃出错处理函数cout«"语法分析未通过,}voidProE(void){ProT();if(ch==*+'){iloact++;ch=str[iloact];ProE();}}voidProT(void){ProF();if(ch==,**){iloact++;ch=str[iloact];ProT();}}voidProF(v
7、oid){if(ch==,(,){iloact++;ch=str[iloact];ProE();if(ch==T)表达式语法不正确"«endl;〃语法E的递归程序〃向前移一个位置〃语法T的递归程序〃语法F的递归程序elseiloact++;ch=str[iloact];error();value=0;}}elseif(ch>='0'
8、
9、ch<='9'){iloact++;ch=str[iloact];}else{error();value=0;}}intmain(){cout«"输入表达式:"«endl;cin»
10、str;ch=str[O];while(ch!='#')〃进行递归下降分析{ProE();if(!value)break;}if((ch=='#')&&(value!=0))cout«"语法分析通过,表达式语法正确"«endl;return0;}七.测试数据及运行结果递归下降测试数据1:6*(1+9)+1#运行结果:C:PrograMFilesBicrosoftVisualStudioMyProjectsrqDebugrq.exe*6++l#语法分析通过,表达式正确Pressanykeytoc
11、ontinue.递归下降测试数据2:6*(l+9)+l运行结果:递归下降测试数据3:7*5+(1+2)运行结果:MC:Progra>FileslicrosoftVisualStudioIyProjectskjlkjlkDebugkj...忆*5X1+2〉恫法分析未通过,表达兀不正确Pressanykeytocontinue八、实验思考题语法分析的任务是什么?答:语法分析器的任务是识别和处理比单词更大的语法单位,如:程序设计语言中的表达式、各种说明和语句乃至全部源程序,指出其中的语法错误;必要时,可生成
12、内部形式,便于下一阶段处理。
此文档下载收益归作者所有