如何使用具体的语法树来解析文件并生成抽象的语法树?
在这篇关于ungrammar的博客文章中,我遇到了一些具体的语法树。但是我无法理解如何构建解析器。
发布于 2021-09-14 02:05:25
具体的语法树只是源代码以树的形式的无损表示。它基本上是抽象语法树的超集,因为它包含具有相对相同结构的相同信息,但具有抽象语法树可能会丢弃的额外“琐碎”信息。
如果您熟悉更传统的正式解析技术,您可能也听说过它被称为“解析树”,它将由非基于操作的解析器生成器输出,然后通常会将其后处理为更适合以后的编译器传递的AST。
CST更接近AST,因为它通常更符合语言的语义结构,而不是词汇结构,但归根结底,它们都是一个结构的基本概念,只是代表了解析语言的略微不同的视图。
因此,无论您是解析到正式的解析树、CST,还是直接解析到AST (甚至IR字节码),这些都不会对您使用的解析技术产生任何直接影响,而只是对您在解析时构建的结构有任何直接影响。
因此,您的问题可以归结为“我应该如何解析源代码”这个观点问题,这是一个相当开放的问题。解析器组合子在Rust中很流行,但即使是固定的先行递归下降也是非常强大和简单的。
https://stackoverflow.com/questions/69168171
复制相似问题