112 votes

Quelle est la différence entre l'arbre d'analyse et AST?

Est-il généré par la phase de différence d'un processus de compilation? Ou juste des noms de différence pour la chose?

90voto

Guy Coder Points 3526

Ceci est basé sur l' évaluation de l'Expression de la grammaire, de Terrence Parr.

La grammaire pour cet exemple:

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(); } ;

Entrée

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

Arbre D'Analyse

L'arbre d'analyse est une représentation concrète de l'entrée. L'arbre d'analyse conserve toutes les informations de l'entrée. Les cases vides représentent les espaces, c'est à dire la fin de la ligne.

Parse Tree

AST

L'AST est une représentation abstraite de l'entrée. Notez que les parenthèses ne sont pas présents dans l'AST parce que les associations sont dérivables à partir de la structure de l'arbre.

AST

MODIFIER

Pour un plus au travers d'explications voir le Compilateur de Compilateurs et des Générateurs de pg. 23

17voto

D'après ce que j'ai compris, l'AST met davantage l'accent sur les relations abstraites entre les composants du code source, tandis que l'arbre d'analyse porte sur la mise en œuvre réelle de la grammaire utilisée par le langage, y compris les détails épineux. Ils ne sont certainement pas les mêmes, puisqu'un autre terme pour "arbre d'analyse" est "arbre de syntaxe concrète".

J'ai trouvé cette page qui tente de résoudre cette question exacte.

11voto

Wim Deblauwe Points 2570

Le livre DSL de Martin Fowler l'explique bien. L'AST ne contient que tous les éléments "utiles" qui seront utilisés pour un traitement ultérieur, tandis que l'arbre d'analyse contient tous les artefacts (espaces, crochets, ...) du document d'origine que vous analysez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X