它们是由编译过程的不同阶段生成的吗?或者它们只是同一事物的不同名称?
这是基于表达评估器 http://www.antlr3.org/works/help/tutorial/calculator.html泰伦斯·帕尔的语法。
本例的语法:
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(); } ;
Input
x=1
y=2
3*(x+y)
解析树
解析树是输入的具体表示。解析树保留输入的所有信息。空框代表空白,即行尾。
AST
AST 是输入的抽象表示。请注意,父项不存在于 AST 中,因为关联可以从树结构中导出。
有关更详细的解释,请参阅编译器和编译生成器 http://www.cs.ru.ac.za/compilers/pdfvers.pdf pg. 23
or 抽象语法树 http://homepage.divms.uiowa.edu/~slonnegr/plf/Book/Chapter1.pdf上页。 21 英寸编程语言的语法和语义 http://homepage.divms.uiowa.edu/~slonnegr/plf/Book/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)