gpt4 book ai didi

parsing - 抽象语法树和具体语法树有什么区别?

转载 作者:行者123 更新时间:2023-12-01 19:34:22 26 4
gpt4 key购买 nike

我已经阅读了一些有关解释器/编译器如何工作的内容,其中一个让我感到困惑的领域是 AST 和 CST 之间的区别。我的理解是,解析器生成一个 CST,将其交给语义分析器,后者将其转换为 AST。然而,我的理解是语义分析器只是确保遵循规则。我真的不明白为什么它实际上会做出任何改变以使其抽象而不是具体。

关于语义分析器,我是否遗漏了什么,或者 AST 和 CST 之间的差异有些人为?

最佳答案

具体的语法树以解析的形式准确地表示源文本。一般来说,它符合定义源语言的上下文无关语法。

然而,具体的语法和树有很多使源文本明确可解析所必需的东西,但对实际意义没有贡献。例如,为了实现运算符优先级,您的 CFG 通常具有多个级别的表达式组件(术语、因子等),运算符在不同级别将它们连接起来(您添加术语以获取表达式,术语由可选地乘以的因子组成) , ETC。)。然而,要实际解释或编译该语言,您不需要这个;您只需要具有运算符和操作数的表达式节点。抽象语法树是将具体语法树简化为表示程序含义实际需要的东西的结果。该树的定义要简单得多,因此在执行的后期阶段更容易处理。

您通常不需要实际构建具体的语法树。 YACC(或Antlr,或Menhir,或其他...)语法中的操作例程可以直接构建抽象语法树,因此具体语法树仅作为表示源文本的解析结构的概念实体存在。

关于parsing - 抽象语法树和具体语法树有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com