概述
说起这次的语义分析,不得不说的是我的重大的改变。上一次的语法分析是利用了预测分析法来实现的,经过多方考证,发现用预测分析法的语法分析器基础来实现语义分析的困难重重,例如在语法指导翻译的时候那个栈的变化和各种属性的传递就已经让我头晕脑胀了。无奈之下,只好重写语法分析,用了递归下降来实现语法分析进而实现我的语义分析。
使用递归下降的最大好处就是思路特别清晰,一旦开始写了,就特别明确接下来要做什么。这就是我选择递归下降的原因。
简单的说一下,递归下降语法分析的思想。一个递归下降的语法分析程序由一堆的过程组成,每个非终结符号都有一个对应的过程。程序的执行从开始符号对应的过程开始,如果这个过程的过程体扫描了整个输入串,它就停止执行,并且语法分析结束。
而要在递归下降语法分析的过程中进行翻译:在语法分析中对应于每个非终结符A都有一个函数A,在函数A的函数体中,可以进行语法分析和处理继承属性和综合属性。
1.决定用哪一个产生式来展开A
2.当需要读入一个终结符号时,在输入中检查这些符号是否出现。
3.在局部变量中保存所有必要的属性值。这些属性可以用来计算产生式体中的非终结符号的继承属性,或产生式左部的非终结符号的综合属性。
4.调用对应于被选定产生式体中的非终结符号的函数,向他们提供正确的参数。
实现语义分析很关键的一点是语义动作的书写。我的语义动作都嵌入到了每个非终结符所对应的类中的某些方法来实现的。
例如在类Expression中有如下几个方法:
/**
* 返回一个可以成为某个三地址指令的右部
* @return 一个项
*/
public Expression gen() {
ret
最后
以上就是标致飞机为你收集整理的编译原理——Java实现C语言语义分析(递归下降)的全部内容,希望文章能够帮你解决编译原理——Java实现C语言语义分析(递归下降)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复