语法分析和语法树

时间:2011-11-20 21:33:05

标签: parsing compiler-construction lexical-analysis abstract-syntax-tree

我正在为学校课程实现编译器,我在如何继续学习方面遇到了一些问题。 词汇分析已经完成。对我的词法分析是我有一个返回令牌对象的函数,并且还会打印一些在词法分析期间可以检查的错误。

令牌包含id,string(如果当前id是字符串,如果不是,则为null),number(如果令牌是数字,如果不是,则为null)和令牌找到的行。

我想进行语法分析,但我不确定是否必须在此过程中生成语法树。我确信在生成中间代码时这是必要的,但老师会将决定留给我们。

结束。老师希望我们明白这是必要的吗? 如果真的有必要构建语法树的最佳方法是什么? 我也错过了一些会在后期引起麻烦的事情吗?

1 个答案:

答案 0 :(得分:1)

基本上,您的语法分析最终会成为某种形式的finite-state machine。这个过程的结果通常是AST;如果不将结果存储在某处,语法分析似乎毫无意义。

虽然有many different well-known and established algorithms for creating the state tables and for implementing the actual processor,但您可能希望开始像编译器一样思考并手动定义状态(这对于非常简单的语言是可行的):

  • 一开始,什么代币可以接受? (开始状态)
  • 每个令牌都会引导您进入另一个状态,并可能让您执行操作以将令牌合并到抽象语法树中。 (状态转换)
  • 我建议将“文件结束”视为标记器返回的特殊标记,这样您的语法分析就不需要任何特殊代码来处理文件结尾(只是处理EOF标记的正常状态转换)

请注意,您也可以使用函数来代表您的状态,而不是使用表格。

您尝试实施的语言是什么?