问题描述
|
我正在上一个编译器设计类,我们必须在其中实现自己的编译器(使用flex和bison)。我有解析的经验(编写EBNF和递归下降解析器),但这是我第一次编写编译器。
语言设计是开放式的(教授把它留给了我们)。上课时,教授结束了生成中间代码的工作。他说,我们在解析时不必构造抽象语法树或解析树,并且我们可以在进行过程中生成中间代码。
我发现这令人困惑,原因有两个:
如果在定义函数之前调用该函数怎么办?如何解决分支目标?我猜您将必须成为一个规则,即必须在使用函数之前定义函数,或者可能要预先定义函数(如C一样?)
您将如何处理有条件的?如果您有一个
if-else
甚至是一个if
,那么当条件为false
时(如果您正在生成代码)如何解决resolve1ѭ的分支目标?
我计划生成一个AST,然后在创建它之后遍历树,以解析功能和分支目标的地址。这是正确的还是我错过了什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)