编译原理语法分析实验报告

编译原理语法分析实验报告

ID:10938486

大小:419.50 KB

页数:11页

时间:2018-07-09

编译原理语法分析实验报告_第1页
编译原理语法分析实验报告_第2页
编译原理语法分析实验报告_第3页
编译原理语法分析实验报告_第4页
编译原理语法分析实验报告_第5页
资源描述:

《编译原理语法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、编译原理实验报告二、语法分析(一)实验题目编写程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析。(二)实验内容和要求1.要求程序至少能分析的语言的内容有:1)变量说明语句2)赋值语句3)条件转移语句4)表达式(算术表达式和逻辑表达式)5)循环语句6)过程调用语句2.此外要处理:包括依据文法对句子进行分析;出错处理;输出结果的构造。3.输入输出的格式:输入:单词文件(词法分析的结果)输出:语法成分列表或语法树(都用文件表示),错误文件(对于不合文法的句子)。4.实现方法:可以采用递归下降分析法,LL(1)分析法,算符优先法或LR分析法的任何一种

2、,也可以针对不同的句子采用不同的分析方法。(三)实验分析与设计过程1.待分析的C语言子集的语法:该语法为一个缩减了的C语言文法,估计是整个C语言所有文法的60%(各种关键字的定义都和词法分析中的一样),具体的文法如下:语法:100:program->declaration_list101:declaration_list->declaration_listdeclaration

3、declaration102:declaration->var_declaration

4、fun_declaration103:var_declaration->type_speci

5、fierID;

6、type_specifierID[NUM];104:type_specifier->int

7、void

8、float

9、char

10、long

11、double

12、105:fun_declaration->type_specifierID(params)

13、compound_stmt106:params->params_list

14、void107:param_list->param_list,param

15、param108:param->type-spectifierID

16、type_specifierID[]109:compound_stmt->{local_d

17、eclarationsstatement_list}110:local_declarations->local_declarationsvar_declaration

18、empty111:statement_list->statement_liststatement

19、empty11编译原理实验报告112:statement->epresion_stmt

20、compound_stmt

21、selection_stmt

22、iteration_stmt

23、return_stmt113:expression_stmt->expression;

24、;114:selection_s

25、tmt->if{expression)statement

26、if(expression)statementelsestatement115:iteration_stmt->while{expression)statement116:return_stmt->return;

27、returnexpression;117:expression->var=expression

28、simple-expression118:var->ID

29、ID[expression]119:simple_expression->additive_expressionrelopadditiv

30、e_expression

31、additive_expression120:relop-><=

32、<

33、>

34、>=

35、==

36、!=121:additive_expression->additive_expressionaddopterm

37、term122:addop->+

38、-123:term->termmulopfactor

39、factor124:mulop->*

40、/125:factor->(expression)

41、var

42、call

43、NUM126:call->ID(args)127:args->arg_list

44、empty128:arg_list->arg_list,exp

45、ression

46、expression该文法满足了实验的要求,而且多了很多的内容,相当于一个小型的文法说明:把文法标号从100到128是为了程序中便于找到原来的文法。1.实现方法的选择:因为时间的问题,我选择了递归下降的方法进行开发。2.消除左递归因为递归下降要求文法中不能出现有左递归的产生式,因此必须把待分析的C语言子集的语法中带有左递归的都消除左递归。其中产生式101、110、111、121、123、128均为左递归文法。这些产生式消除左递归后的文法如下:1)101消除左递归后的产生式分别为:101:declaration_list->declarati

47、ondeclaration_list_zdg135:declara

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。