我已经编写了一个返回令牌的词法分析器,现在我正在处理解析器。我有一个问题。
想象一下这段代码示例:
print("Hello, world!")
词法分析器返回四个标记(print
,(
,"Hello, world!"
和)
)。最终的程序应该打印字符串“Hello,world!”。
但解析器应该怎么做?如果解析器已经执行了代码,它是否应该返回由另一个对象处理的内容(以及什么)?
答案 0 :(得分:5)
解析器应生成abstract syntax tree,它是程序的内存表示形式。解析后可以遍历此树以执行代码生成。我建议你读一些关于这个主题的好书,也许是一本involving dragons。
答案 1 :(得分:1)
答案 2 :(得分:1)
通常,解析器不执行任何操作。解析器通常采用输入(文本或二进制)并生成内存中的表示,仅此而已......但已经很多了!
如果您已有Lexer,那么第二步通常是执行语义分析,以生成Abstract Syntax Tree。
这意味着,产生以下形式的东西:
(FunctionCall "print" [
(StringLiteral "Hello, World!")
]
)
答案 3 :(得分:0)
它应该返回abstract syntax tree。
答案 4 :(得分:0)
解析器基本上应该做两件事: