Expr
Last updated
Last updated
Exemplo:
Se executarmos o compilador criado com a entrada:
sp = 100;
Vamos obter a seguinte árvore sintática:
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:
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:
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:
É 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.