Buscar

antlr4 walking

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 17 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

ANTLR4
Tree Walking
Preparação
● Abram o ANTLRWorks (ferramenta da aula 
passada)
● Façam download do arquivo "antlr-tree-visit" 
na página da disciplina.
○ Importem o projeto contido no arquivo para o 
Eclipse
Geração de código
● O ANTLR suporta dois mecanismos de tree-
walking: visitors e listeners 
● Listeners são mais simples
○ Basta implementar os callbacks que o ANTLR irá 
chamá-los durante a exploração da árvore
○ No entanto, são menos versáteis do que visitors
● Vamos nos focar no uso de Visitors na aula 
de hoje
Visitors
Labels
● O ANTLR gera métodos no visitor de acordo 
com as regras de produção da gramática.
● Por padrão, não são criados métodos para 
as alternativas de cada regra.
● Podemos "etiquetar" com uma label as 
alternativas das regras que desejamos que 
seja gerado um método no visitor
Labels
stat : ((attrStmt | expr) ';')+ # Expressions
 ;
attrStmt: ID '=' expr # Assign
 ;
expr : expr op=('*'|'/') expr # MultDiv
 | expr op=('+'|'-') expr # AddSub 
 | INT # Int
 | ID # Identifier
 | '(' expr ')' # Paren
 ;
Labels (resultado)
public interface TestVisitor<T> extends 
ParseTreeVisitor<T>{
T visitAssign(TestParser.AssignContext ctx);
T visitExpressions(TestParser.ExpressionsContext ctx);
T visitAddSub(TestParser.AddSubContext ctx);
T visitIdentifier(TestParser.IdentifierContext ctx);
T visitInt(TestParser.IntContext ctx);
T visitParen(TestParser.ParenContext ctx);
T visitMultDiv(TestParser.MultDivContext ctx);
}
Outras dicas
● O ANTLR cria campos e métodos auxiliares 
para os tokens.
○ Deixá-los explícitos pode facilitar bastante
expr : expr op=('*'|'/') expr # MultDiv 
 | expr op=('+'|'-') expr # AddSub 
MUL : '*';
DIV : '/';
ADD : '+';
SUB : '-';
Geração de código
● No menu, selecione Run - Generate Recognizer
● Tela 1:
○ Especifique o diretório de saída
● Tela 2:
○ Selecione a opção "Generate visitor"
○ Desmarque "Generate listener"
○ Especifique o pacote das classes que serão geradas
● Tela 3:
○ Clique em finish
Arquivos gerados
● FooLexer: Analisador léxico
● FooParser: Analisador sintático
● FooVisitor: Interface do visitor
● FooBaseVisitor: Implementação padrão do 
visitor
● Foo.tokens: Tokens usados no parser
Demonstração prática
Exercícios
● Crie um visitor que imprima a expressão 
visitada em notação polonesa reversa (link). 
Ex:
○ x = (3 - 4) * 5; ==>> x 3 4 - 5 * =;
Exercícios
● Crie um visitor que computa o resultado das 
expressões definidas na gramática do 
exercício da aula passada
○ x = (3 - 4) * 5; //entrada
> x = -5 //saída
○ x = (3 - 4) * 5; //entrada (linha 1)
y = x + 10; //entrada (linha 2)
> x = -5, y = 5 //saída
Exercícios
● Crie um novo visitor para detectar variáveis 
não definidas nas expressões.
○ x = (3 - 4) * 5; //entrada (linha 1)
y = z + 10; //entrada (linha 2)
> error: undefined variable 'z' at line
 2, col 4 //saída
Exercícios
● Crie um interpretador de expressões 
aritiméticas. 
○ O programa deverá ler as expressões da entrada 
padrão e imprimir o resultado na tela. 
○ O estado deve ser mantido após cada expressão.
○ Em caso de erro, o programa deve imprimir a causa 
do erro e aguardar pela entrada do usuário. O 
estado das variáveis não deve ser modificado nesse 
caso.
Exercícios (entrega)
● Enviem um email para mab@cin 
○ assunto = "[if688] atividade da aula prática 2"
○ até a próxima terça (04/07)
● O anexo deve conter o projeto do eclipse 
com:
○ gramática utilizada na geração do 
visitor/parser/lexer
○ um arquivo README na raiz contendo uma breve 
explicação do que foi feito e como rodar o projeto
● Grupos de até 3 pessoas
Dicas
● Prestem atenção no código de exemplo
● Adicionem o código do ANTLR na build path 
do projeto
○ Facilita bastante na hora de depurar algo
● A documentação da wiki é bastante escassa 
- leiam o livro escrito pelo autor do projeto: 
http://pragprog.com/book/tpantlr2/the-
definitive-antlr-4-reference

Continue navegando