Kra*_*ken 5 c abstract-syntax-tree semantic-analysis
首先,语义规则和抽象语法树规则是一样的吗?
现在,如果我有语言规范,并且我有CFG,那么我该如何构建抽象语法树规则.任何来源都表示赞赏.谢谢.
“抽象语法树”规则(这是一个奇怪的术语)可能被解释为那些在解析过程中塑造抽象语法结构的规则。这些通常写在非终结符 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 被分配了一个整数”是从赋值中收集的) 并传播这些事实,直到它们相遇并被证明是(不)兼容的。