JavaCC – Análise Sintática
JavaCC – Análise Sintática
Análise Sintática com JavaCC
• Na aula anterior sobre JavaCC, estudamos como implementar um parser para avaliar apenas as regras léxicas de uma linguagem
(soma de inteiros)
• Nesta aula mudaremos o foco para estudar a implementação de regras sintáticas no
JavaCC
• Para tal, utilizaremos como objeto de estudo, uma estrutura usada na maioria das linguagens de programação: declaração de variáveis 2
Análise Sintática com JavaCC
• Veja o seguinte exemplo de declaração de variável em linguagem C: int soma;
• Como desenvolver um parser que valide a estrutura de uma declaração como esta?
• Em primeiro lugar, é necessário desenvolver uma gramática que sirva como base para a verificação de qualquer declaração de variáveis.
3
Análise Sintática com JavaCC
START ::= "int" IDENT ";"
IDENT::= (ALFA|$|_)(ALFA|DIGIT|$|_)*
ALFA ::= [a-z]|[A-Z]
DIGIT ::= [0-9]
4
Análise Sintática com JavaCC
• Modificando o Parser:
TOKEN : { < INT : "int" > }
TOKEN : { < SEMICOLON : ";" > }
TOKEN : { < IDENT : (|"$"|"_")(|
|"$"|"_")* > }
TOKEN : { < #DIGIT : ["0"-"9"] > }
TOKEN : { < #ALFA : ["a"-"z","A"-"Z"] > } void Start() :
{}
{
}
5
Análise Sintática com JavaCC
• Observe o seguinte exemplo: float total;
• Como atualizar o parser existente aceitar mais tipos de dados?
para
• É necessário atualizar a gramática para refletir a necessidade de novos tipos de dados
6
Análise Sintática com JavaCC
START ::= TIPO IDENT ";"
TIPO ::= "char"|"int"|"float"
IDENT::= (ALFA|$|_)(ALFA|DIGIT|$|_)*
ALFA ::= [a-z]|[A-Z]
DIGIT ::= [0-9]
7
Análise Sintática com JavaCC
• Atualizando o Parser:
...
TOKEN : { < CHAR : "char" > }
TOKEN : { < FLOAT : "float" > } void Start() :
{}
{ Tipo()
} void Tipo() :
{}
{ | |
}
8
Análise Sintática com JavaCC
• Observe o seguinte exemplo: float total = 10.5;
• Como atualizar o parser existente para aceitar a inicialização