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

Kra*_*ken 5 c abstract-syntax-tree semantic-analysis

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

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

Ira*_*ter 5

“抽象语法树”规则(这是一个奇怪的术语)可能被解释为那些在解析过程中塑造抽象语法结构的规则。这些通常写在非终结符 T 的语法规则中,作为通过解析 T 的辅助短语产生的抽象语法树上的构造函数。如果

 T = '(' A ';' B ')' ;
Run Code Online (Sandbox Code Playgroud)

是语法规则,T 的 AST 构造函数可能是

   T(A,B)
Run Code Online (Sandbox Code Playgroud)

这意味着构建一个 T 节点,其子节点是为 A 和 B 子解析构建的 AST。

语义规则是程序必须满足的约束才能合法,而不仅仅是语法。所以可以构造一个抽象的语法树(来自“规则”);这样做只能证明程序在语法上是正确的。但是抽象语法可以说一些语义上毫无意义的东西,例如,

  "declare s as function; ...  s=7; ..."
Run Code Online (Sandbox Code Playgroud)

通常检查这一点的唯一方法是遍历抽象语法树,在本地收集事实(例如,“s 是一个函数”是从声明语句中提取的事实;“s 被分配了一个整数”是从赋值中收集的) 并传播这些事实,直到它们相遇并被证明是(不)兼容的。