【发布时间】:2011-07-18 13:55:02
【问题描述】:
我正在参加一个编译器设计课程,我们必须在其中实现我们自己的编译器(使用 flex 和 bison)。我有过解析(编写 EBNF 和递归下降解析器)的经验,但这是我第一次编写编译器。
语言设计是相当开放的(教授已经把它留给了我们)。在课堂上,教授复习了生成中间代码。他说我们在解析的时候不需要构造抽象语法树或者解析树,可以边做边生成中间代码。
我发现这令人困惑有两个原因:
如果您要调用一个函数在定义之前怎么办?如何解决分支目标?我想您必须制定一个规则,即您必须在使用函数之前定义它们,或者可能预先定义它们(就像 C 那样?)
-
您将如何处理条件语句?如果您有一个
if-else甚至只是一个if,当条件为false时,如何解析if的分支目标(如果您正在生成代码)?
我计划生成一个 AST,然后在创建它之后遍历树,以解析函数和分支目标的地址。这是正确的还是我遗漏了什么?
【问题讨论】:
标签: parsing language-design compiler-construction intermediate-code