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?



ANother Tool for Language Recognition
Ferramenta poderosa para o processo
de construção de uma linguagem de
programação
Oferece um framework para
desenvolvimento de compiladores,
tradutores e aplicações afins
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
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.
ANTLR
Editor
ANTLR
Interpretador
ANTLR
Debugger
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
Exercícios
Devem ser enviados ao e-mail da
monitoria <[email protected]>
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
number
= '+' ;
= '-' ;
: term ( ( PLUS | MINUS )
: number ;
: DIGIT+ ;
term )* ';' ;
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
Download

Análise léxica e sintática