本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的过程。Р3.3 概要设计Р语法分析器能识别由加+ 减- 乘* 除/ 乘方^ 括号()操作数所组成的算术表达式,其文法如下:РE→E+T|E-T|TРT→T*F|T/F|FРF→P^F|PРp→(E)|iР 使用的算法可以是:预测分析法;递归下降分析法;算符优先分析法;LR分析法等Р3.4 详细设计Р语法分析器主程序图[4]Р3.5 测试数据与结果Р3.6 心得体会Р此次实验,让我们组对编译原理的基本知识有了深入的了解,加强了对语法分析的认识。代码的编写过程中用到了一些以前从未用过的函数,都是现学现用,掌握还不是很深。在代码调试过程中结果出现许多无法解释的错误,但仍旧坚持下来了,最终调试出了结果。通过这次实验,我们组的动手实践能力得到很大的提高。Р4 中间代码产生器的设计与实现Р4.1 基础理论说明Р在进行了语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间表示或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统复杂性介于源程序语言和机器语言之间,容易将它翻译成目标代码。另外,还可以在中间代码一级进行与机器无关的优化。产生中间代码的过程叫中间代码生成。Р4.2 需求分析Р定义一种语言除了要求定义语法外,还要求定义语义,即对语言的各种语法单位赋予具体的意义。语义分析的任务是首先对每种语法单位进行静态的语义审查,然后分析其含义,并用另一种语言形式,即比源语言更加接近于目标语言的一种中间代码来进行描述这种语言。因此,中间代码就显得十分重要,它关系着整个程序语言的正确编译与否,同时也是进行下一步编译的重要先决条件。Р4.3 概要设计Р产生上述算术表达式的中间代码(四元式序列)Р递归下降子程序:Р数据结构: SYN —算符栈;РSEM —语义栈;