0

如何使用具体语法树解析文件并生成抽象语法树?

我在这篇关于ungrammar的博客文章中遇到了具体的语法树。但是我不知道如何构建解析器。

4

1 回答 1

1

具体的语法树只是树形式的源代码的无损表示。它基本上是抽象语法树的超集,因为它包含具有相对相同结构的相同信息,但带有抽象语法树会丢弃的额外“琐事”信息。

如果您熟悉更传统的形式解析技术,您可能还听说过它被称为“解析树”,它将由非基于动作的解析器生成器输出,然后您通常会将其后处理到AST 更适合后来的编译器传递。

CST 更接近于 AST,因为它通常比词汇结构更匹配语言的语义结构,但最终它们都是相同的结构基本概念,只是表示解析语言的略有不同的视图。

因此,无论您是解析为正式的解析树、CST,还是直接解析为 AST(甚至是 IR 字节码),这些都不会直接影响您使用的解析技术,只会影响您构建的结构解析。

所以你的问题归结为“我应该如何解析源代码”的意见问题,这是一个相当开放的问题。解析器组合器在 Rust 中往往很流行,但即使只是固定前瞻递归下降也非常强大且易于操作。

于 2021-09-14T02:05:25.203 回答