我正在为学校课程实现编译器,我在如何继续学习方面遇到了一些问题。 词汇分析已经完成。对我的词法分析是我有一个返回令牌对象的函数,并且还会打印一些在词法分析期间可以检查的错误。
令牌包含id,string(如果当前id是字符串,如果不是,则为null),number(如果令牌是数字,如果不是,则为null)和令牌找到的行。
我想进行语法分析,但我不确定是否必须在此过程中生成语法树。我确信在生成中间代码时这是必要的,但老师会将决定留给我们。
结束。老师希望我们明白这是必要的吗? 如果真的有必要构建语法树的最佳方法是什么? 我也错过了一些会在后期引起麻烦的事情吗?
答案 0 :(得分:1)
基本上,您的语法分析最终会成为某种形式的finite-state machine。这个过程的结果通常是AST;如果不将结果存储在某处,语法分析似乎毫无意义。
虽然有many different well-known and established algorithms for creating the state tables and for implementing the actual processor,但您可能希望开始像编译器一样思考并手动定义状态(这对于非常简单的语言是可行的):
请注意,您也可以使用函数来代表您的状态,而不是使用表格。
您尝试实施的语言是什么?