首先,语义规则和抽象语法树规则是一样的吗?
现在,如果我有语言规范,并且我有 CFG,那么我该如何构建抽象语法树规则。任何来源表示赞赏。谢谢。
首先,语义规则和抽象语法树规则是一样的吗?
现在,如果我有语言规范,并且我有 CFG,那么我该如何构建抽象语法树规则。任何来源表示赞赏。谢谢。
“抽象语法树”规则(这是一个奇怪的术语)可能被解释为在解析过程中塑造抽象语法结构的那些规则。这些通常写在非终结符 T 的语法规则中,作为通过解析 T 的附属短语产生的抽象语法树的构造函数。如果
T = '(' A ';' B ')' ;
是一个语法规则,T 的 AST 构造函数可能是
T(A,B)
暗示构建一个 T 节点,其中子节点是为 A 和 B 子解析构建的 AST。
语义规则是程序必须满足才能合法的约束,而不仅仅是语法。因此可以构造一棵抽象语法树(来自“规则”);这样做只能证明程序在语法上是正确的。但是抽象句法可以说在语义上毫无意义的事情,例如,
"declare s as function; ... s=7; ..."
一般来说,检查这一点的唯一方法是遍历抽象语法树,在本地收集事实(例如,“s 是一个函数”是从声明语句中提取的事实;“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
这也突出了处理模棱两可的语法的问题。