购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.4 从解析树到抽象语法树

正如我们所看到的,Lark解析器的输出是一棵解析树,即由Tree和Token节点组成的树。因此,下一步是将解析树转换为抽象语法树。这可以通过递归函数来实现,该函数检查每个节点的data字段,然后构造相应的AST节点,使用递归来处理其子节点。下面的代码片段摘自 L Int 的parse_tree_to_ast函数:

习题3.1 使用Lark为 L Var 创建lexer和parser。使用Lark的默认解析算法(Earley 算法 ),将二义性选项设置为'explicit',这样,如果你的文法是二义性的,输出将包括多棵解析树,这些解析树将提示你文法存在问题。你的解析器parser应该忽略空白,因此我们建议使用Lark的%ignore指令,如下所示。

将第2章中的编译器更改为使用Lark解析器parser,而不是使用ast模块中的parse函数。在你创建的所有 L Var 程序上测试编译器,并创建四个额外的程序来测试文法中的二义性。 PBotirzcoPs28sA1GsamxEtZIjKJKhCBPOdOfEjrzRCNgVYebJgGR+2hLlBMo1IV

点击中间区域
呼出菜单
上一章
目录
下一章
×