Expr

ANTLR4: Expr

Exemplo:

grammar Expr;
stat : assign;
assign : ID ’= ’ expr ’;’ ;
expr : INT ;
ID : [a-z]+ ;
INT : [0-9]+ ;
WS : [ \t \r \n ]+ -> skip ;

Se executarmos o compilador criado com a entrada:

  • sp = 100;

Vamos obter a seguinte árvore sintática:

ANTLR4: contexto automático

Para facilitar a análise semântica e a síntese, o ANTLR4 tenta ajudar na resolução automática de muitos problemas (como é o caso dos visitors e dos listeners).

No mesmo sentido são geradas classes (e em execução os respectivos objectos) com o contexto de todas as regras da gramática:

ANTLR4: contexto automático (2)

ANTLR4: visitor

Os objectos de contexto têm a si associada toda a informação relevante da análise sintática (tokens, referência aos nós filhos da árvore, etc).

Por exemplo o contexto AssignContext contém métodos ID e expr para aceder aos respectivos nós.

No caso do código gerado automaticamente do tipo visitor o padrão de invocação é ilustrado a seguir:

ANTLR4: listener

O código gerado automaticamente do tipo listener tem o seguinte padrão de invocação:

A sua ligação à restante aplicação é a seguinte:

ANTLR4: atributos e acções

É possível associar atributos e acções às regras:

Ao contrário dos visitors e listeners, a execução das acções ocorre durante a análise sintática.

A execução de cada acção ocorre no contexto onde ela é declarada. Assim se uma acção estiver no fim de uma regra (como exemplificado acima), a sua execução ocorrerá após o respectivo reconhecimento.

A linguagem a ser executada na acção não tem de ser necessariamente Java (existem muitas outras possíveis, como C++ e python).

Também podemos passar atributos para a regra (tipo passagem de argumentos para um método):

É clara a semelhança com a passagem de argumentos e resultados de métodos.

Diz que os atributos são sintetizados quando a informação provém de sub-regras, e herdados quando se envia informação para sub-regras.

Last updated