【问题标题】:Semantic Rules / Abstract Syntax Tree Rules语义规则/抽象语法树规则
【发布时间】:2012-03-05 20:58:21
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

     T = '(' A ';' B ')' ;
    

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

       T(A,B)
    

    暗示构建一个 T 节点,其中子节点是为 A 和 B 子解析构建的 AST。

    语义规则是程序合法性必须满足的约束,超出了单纯的语法。因此可以构造一棵抽象语法树(来自“规则”);这样做只能证明程序在语法上是正确的。但是抽象语法可以说在语义上毫无意义的事情,例如,

      "declare s as function; ...  s=7; ..."
    

    通常检查这一点的唯一方法是遍历抽象语法树,在本地收集事实(例如,“s is a function”是从 declare 语句中提取的事实;“s is assigned an integer”被收集从分配中)并传播这些事实,直到它们相遇并被证明是(不)兼容的。

    【讨论】:

      【解决方案2】:

      为了回答您的第二个问题,这里有一篇文章将语法和语法树的概念联系在一起,并检查了一些解析算法。

      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

      这也突出了处理歧义语法的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多