1
实验?/p>
算数表达式解释器的设计与实现
一
.
实验目的
1
、了解并掌握自顶向下语法分析的思想,熟悉递归下降子程序分析法?/p>
2
、了解并掌握语法制导翻译法,掌握采用递归子程序进行语义分析的方法?/p>
?/p>
.
实验内容
用适当的程序设计语言编制一个算术表达式的解释器?/p>
并完成相应的调试?/p>
要求该程?/p>
能够读入一个算术表达式,运行后给出计算的结果?/p>
1
.算术表达式的解释过程(参考)
第一步:首先进行词法分析(即使用实验一编制的词法分析器?/p>
,提取最终得到的结果
——单词符号序列,将其作为语法和语义分析的输入?/p>
第二步:
调用算术表达式的语法分析器?/p>
本次实验要求采用递归下降子程序法编写语法
分析器,并且此语法分析器中包含对语义的分析?/p>
分析结束后,显示表达式的计算结果?/p>
2
.使用的文法
E
?/p>
> TE
?/p>
E
?/p>
?/p>
> +TE
?/p>
|
?/p>
|-TE
?/p>
T
?/p>
> FT
?/p>
T
?/p>
?/p>
> *FT
?/p>
|
?/p>
|/TE
?/p>
F
?/p>
i
?/p>
(E)
其中
i
可为整数
(
简单点?/p>
)
,如果考虑周全的话,可取实数类?/p>
(
需要看一下自己编制的
词法分析器是否对实数进行了识?/p>
)
?/p>
该文法的递归下降子程序参见课堂笔?/p>
(
单纯语法分析
部分在第四章介绍?/p>
,
结合语义分析的部分代码在第六章介绍过
)
?/p>
3.
有能力的同学在完成加乘算术表达式的计算后?/p>
试扩?/p>
2
中定义的文法
,
增加识别?/p>
法和除法的规则,并修改对应的程序,使之能够识别并计算加减乘除四则运算式?/p>
?/p>
.
实验要求
1.
程序完成后,由实验老师检查代码,验证程序的功能。如
:
输入
(2+3)*10
对文法进行扩充的,输?/p>
(12-8)*20/5+4
等等?/p>
2.
实验二共
4
学时,实验完成后,提交一份实验报告,写清实验的目的、内容、思路?/p>
设计及实现的过程
(
包括关键的代码,不宜?/p>
)
,以及实验的结果。实验类型为设计型实验?/p>
?/p>
.
程序设计流程?/p>
语法分析器遵循自上而下语法分析的基本算法。其核心思想是将每个非终结符组织?/p>
函数的形式,
并在每个函数中依据相应的产生式右部的符号序列?/p>
对读进的符号串进行匹配?/p>
如果在产生式右部遇到终结符,
那么新读进的符号必须与该终结符一致;
如果遇到非终结符?/p>
那么则根据预测分析表?/p>
调用相应的非终结符对应的函数继续匹配?/p>
如果不能满足以上两点?