【发布时间】:2012-03-05 20:58:21
【问题描述】:
首先,语义规则和抽象语法树规则是一样的吗?
现在,如果我有语言规范,并且我有 CFG,那么我该如何构建抽象语法树规则。 任何来源表示赞赏。谢谢。
【问题讨论】:
标签: c abstract-syntax-tree semantic-analysis
首先,语义规则和抽象语法树规则是一样的吗?
现在,如果我有语言规范,并且我有 CFG,那么我该如何构建抽象语法树规则。 任何来源表示赞赏。谢谢。
【问题讨论】:
标签: c abstract-syntax-tree semantic-analysis
“抽象语法树”规则(这是一个奇怪的术语)可能被解释为在解析过程中塑造抽象语法结构的那些规则。这些通常写在非终结符 T 的语法规则中,作为通过解析 T 的附属短语生成的抽象语法树上的构造函数。如果
T = '(' A ';' B ')' ;
是一个语法规则,T 的 AST 构造函数可能是
T(A,B)
暗示构建一个 T 节点,其中子节点是为 A 和 B 子解析构建的 AST。
语义规则是程序合法性必须满足的约束,超出了单纯的语法。因此可以构造一棵抽象语法树(来自“规则”);这样做只能证明程序在语法上是正确的。但是抽象语法可以说在语义上毫无意义的事情,例如,
"declare s as function; ... s=7; ..."
通常检查这一点的唯一方法是遍历抽象语法树,在本地收集事实(例如,“s is a function”是从 declare 语句中提取的事实;“s is assigned an integer”被收集从分配中)并传播这些事实,直到它们相遇并被证明是(不)兼容的。
【讨论】:
为了回答您的第二个问题,这里有一篇文章将语法和语法树的概念联系在一起,并检查了一些解析算法。
http://www.cs.purdue.edu/homes/xyzhang/spring11/notes/ast.pdf
来自文章:
The resulting grammar is called the concrete grammar.
The corresponding derivation tree is called the parse tree.
具体语法树或解析树是根据某种形式语法表示字符串的句法结构的树。
这是一个从语法推导解析树的示例的链接:
http://www.cs.rochester.edu/~nelson/courses/csc_173/grammars/parsetrees.html
这也突出了处理歧义语法的问题。
【讨论】: