gpt4 book ai didi

compiler-construction - 解析树和抽象语法树(AST)有什么区别?

转载 作者:行者123 更新时间:2023-12-03 05:11:19 25 4
gpt4 key购买 nike

它们是由编译过程的不同阶段生成的吗?或者它们只是同一事物的不同名称?

最佳答案

这是基于 Expression Evaluator泰伦斯·帕尔的语法。

此示例的语法:

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)

解析树

解析树是输入的具体表示。解析树保留输入的所有信息。空框代表空白,即行尾。

Parse Tree

AST

AST 是输入的抽象表示。请注意,AST 中不存在括号,因为关联可以从树结构中导出。

AST

有关更详细的解释,请参阅 Compilers and Compiler Generators第 页23
Abstract Syntax Trees上页。 21 在 Syntax and Semantics of Programming Languages

关于compiler-construction - 解析树和抽象语法树(AST)有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5026517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com