5

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

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

4

2 回答 2

5

“抽象语法树”规则(这是一个奇怪的术语)可能被解释为在解析过程中塑造抽象语法结构的那些规则。这些通常写在非终结符 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”是从赋值中收集的) 并传播这些事实,直到它们相遇并被证明是(不)兼容的。

于 2012-03-06T01:20:31.060 回答
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

这也突出了处理模棱两可的语法的问题。

于 2012-03-05T21:09:10.057 回答