首先,语义规则和抽象语法树规则是一样的吗?
现在,如果我有语言规范,并且我有CFG,那么我该如何构建抽象语法树规则。 任何来源都表示赞赏。感谢。
答案 0 :(得分:4)
“抽象语法树”规则(这是一个奇怪的术语)可能被解释为在解析过程中形成抽象语法结构的那些规则。这些通常是在非终结T的语法规则中编写的,作为通过解析T的辅助短语而产生的抽象语法树的构造函数。如果
T = '(' A ';' B ')' ;
是一个语法规则,T的AST构造函数可能是
T(A,B)
暗示构造一个T节点,其子节点是为A和B子空间构造的AST。
语义规则是程序必须满足的约束,不仅仅是语法。所以可以构造一个抽象语法树(来自“规则”);这样做只表明该程序在语法上是正确的。但抽象语法可以说出语义上简单无意义的事情,例如
"declare s as function; ... s=7; ..."
通常检查这一点的唯一方法是遍历抽象语法树,在本地收集事实(例如,“s是一个函数”是从declare语句中提取的事实;“s被赋予一个整数”被收集来自任务)并传播这些事实直到它们相遇并且被证明是(在)兼容的。
答案 1 :(得分:0)
回答第二个问题,这是一篇将语法和语法树的概念联系在一起的文章,并研究了一些解析算法。
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
这也突出了处理含糊不清的语法的问题。