语义规则/抽象语法树规则

时间:2012-03-05 20:58:22

标签: c abstract-syntax-tree semantic-analysis

首先,语义规则和抽象语法树规则是一样的吗?

现在,如果我有语言规范,并且我有CFG,那么我该如何构建抽象语法树规则。 任何来源都表示赞赏。感谢。

2 个答案:

答案 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

这也突出了处理含糊不清的语法的问题。