解析木と抽象構文木 (AST) の違いは何ですか? 質問する

解析木と抽象構文木 (AST) の違いは何ですか? 質問する

これらはコンパイル プロセスの異なるフェーズによって生成されたものですか? それとも、同じものの異なる名前なのでしょうか?

ベストアンサー1

これは、式評価ツール文法は Terrence Parr によるものです。

この例の文法:

grammar Expr002;

options 
{
    output=AST;
    ASTLabelType=CommonTree; // type of $stat.tree ref etc...
}

prog    :   ( stat )+ ;

stat    :   expr NEWLINE        -> expr
        |   ID '=' expr NEWLINE -> ^('=' ID expr)
        |   NEWLINE             ->
        ;

expr    :   multExpr (( '+'^ | '-'^ ) multExpr)*
        ; 

multExpr
        :   atom ('*'^ atom)*
        ; 

atom    :   INT 
        |   ID
        |   '('! expr ')'!
        ;

ID      : ('a'..'z' | 'A'..'Z' )+ ;
INT     : '0'..'9'+ ;
NEWLINE : '\r'? '\n' ;
WS      : ( ' ' | '\t' )+ { skip(); } ;

入力

x=1
y=2
3*(x+y)

解析ツリー

解析ツリーは入力の具体的な表現です。解析ツリーは入力のすべての情報を保持します。空のボックスは空白、つまり行末を表します。

解析ツリー

AST

AST は入力の抽象表現です。関連付けはツリー構造から導出できるため、AST には括弧が存在しないことに注意してください。

AST

より詳しい説明についてはコンパイラとコンパイラジェネレータ23ページ
または抽象構文木21ページのプログラミング言語の構文と意味論

おすすめ記事