资源描述:
《编译原理语法分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
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