170 likes | 261 Views
Análise léxica e sintática. Teoria e Implementação de Linguagens Computacionais - IF688. Allan J. Souza { ajss }@ cin.ufpe.br. O que é ANTLR?. AN other T ool for L anguage R ecognition Ferramenta poderosa para o processo de construção de uma linguagem de programação
E N D
Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza{ajss}@cin.ufpe.br
O que é ANTLR? • ANotherTool for Language Recognition • Ferramentapoderosapara o processo de construção de umalinguagem de programação • Oferece um frameworkparadesenvolvimento de compiladores, tradutores e aplicaçõesafins ANTLR foi desenvolvida por Terence Parr, professor de Ciência da Computação da Universidade de São Francisco
Funcionamento do ANTLR • Através da definição da gramática, ANTLR é responsável por gerar o analisador léxico (Lexer) e o analisador sintático (Parser)
Por que ANTLR? • Ganho no tempo de desenvolvimento • ANTLRWorks (IDE) - possui ferramentas para construção e depuração da gramática • Dá suporte a várias linguagens como C/C++, C#, Java, Python, entre outras
ANTLRWorks • GUI do ambiente de desenvolvimento de gramáticas para o ANTLR • Oferece: • Editor - highligthing, auto completion; • Diagrama de sintaxe - visualização das produções; • Interpretador - para prototipação rápida; • Debugger - isolamento de erros na gramática.
Resumindo... • Construir a gramática de forma incremental torna a tarefa mais fácil • O ANTLRWorks com seus recursos gráficos e de prototipação agilizarão o processo. • Geração automática do Lexer e do Parser utilizando a GUI.
Exercícios • Devem ser enviados ao e-mail da monitoria <monitoria-if688@googlegroups.com> até uma hora após o termino da aula. • As resoluções devem estar em arquivos diferentes para cada exercício. • Utilizem o arquivo http://www.cin.ufpe.br/~iols/compiladores/exercicio.g
Gramática ANTLR (Exemplo) grammar SimpleCalc ; tokens { PLUS = '+' ; MINUS = '-' ;} expr : term ( ( PLUS | MINUS ) term )* ';' ;term : number ; number : DIGIT+ ; DIGIT : '0'..'9' ;WHITESPACE : ( '\t' | ' ' | '\r' | '\n'| '\u000C' )+ { $channel = HIDDEN; } ;
Exercício 1 • Estender a gramática exemplo para reconhecer também operações de multiplicação e divisão • Obs.: a extensão deve ser feita respeitando a precedência dos operadores
Exercício 2 • Estender a gramática do exercício 1 para oferecer suporte a variáveis. • Ex: • a + 1 - b; • b - a * 4; • 3 / 1 + b;
Exercício 3 • Estender a gramática do exercício 2 para que reconheça comandos de atribuição. A linguagem também deve oferecer a possibilidade de comandos múltiplos (sequência de expressões e/ou atribuições)
Análise léxica e sintática Teoria e Implementação de Linguagens Computacionais - IF688 Allan J. Souza{ajss}@cin.ufpe.br