これらはコンパイル プロセスの異なるフェーズによって生成されたものですか? それとも、同じものの異なる名前なのでしょうか?
ベストアンサー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 には括弧が存在しないことに注意してください。
より詳しい説明についてはコンパイラとコンパイラジェネレータ23ページ
または抽象構文木21ページのプログラミング言語の構文と意味論