Professional Documents
Culture Documents
Introduo a Compilao
Fases de um compilador
Analisadores lxicos
Quebra um programa em tokens e classifica estes tokens
Identificar erros lxicos
2
Lianet Seplveda Torres e Maria Luca Castro Jorge
Parsers
Implementar um parser manualmente pode ser uma tarefa muito trabalhosa Geradores de Parsers H dois tipos de parsers
Parser Top-down (no curso implementaremos este) Parser Bottom-up
3
Lianet Seplveda Torres e Maria Luca Castro Jorge
Geradores de Parsers
Arquivo de especificao da gramtica a ser aceita pelo parser Gerador de Parser
4
Lianet Seplveda Torres e Maria Luca Castro Jorge
5
Lianet Seplveda Torres e Maria Luca Castro Jorge
JavaCC
Converte a gramtica para um programa em JAVA que pode reconhecer programas para a dada gramtica A descrio dos tokens dada em expresso regular Est no mesmo arquivo da gramtica (p.ex. lex e yacc geram arquivos separados)
6
Lianet Seplveda Torres e Maria Luca Castro Jorge
JavaCC
Sequncia de caracteres do programa Analisador Lxico
Sequncia de objetos da classe Token ( dada pelo JavaCC) + especificao da gramtica (regras so sequncias de funes)
JavaCC
L uma gramtica no formato EBNF Gramtica LL(k) L - Left-right: sentido de leitura da esquerda para a direita L Leftmost derivation: tipo de derivao considerada derivao mais esquerda (k) k lookahead: nmero de smbolos necessrios para distinguir a produo correta
9
Lianet Seplveda Torres e Maria Luca Castro Jorge
LL(k)
LL(1):
1. Dada: A -> X1A1 | X2A2|...| XnAn First(Xis) no so disjuntos.
Os conjuntos primeiro das produes da gramtica devem ser disjuntos entre si
CORRETO
Exemplos retirados de: Using JAVACC: http://www.cs.lmu.edu/~ray/notes/javacc/
11
Lianet Seplveda Torres e Maria Luca Castro Jorge
Exemplos retirados de: Building your own languages with JAVACC: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-cooltools.html
12
Exemplos retirados de: Building your own languages with JAVACC: http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-cooltools.html
13
LL(1)
Exerccio de casa
Verificar se CLike com as extenses LL(1)
14
Lianet Seplveda Torres e Maria Luca Castro Jorge
Instalao do JavaCC
Instale o JAVA (jdk 6.0, por exemplo) Faa o download do JAVACC e descompacte: http://javacc.java.net/ Adicione o diretrio /bin do JAVACC na varivel de ambiente do sistema PATH JavaCC Plug-in de Eclipse (Help/Install New Software http://eclipse-javacc.sourceforge.net/)
15
Lianet Seplveda Torres e Maria Luca Castro Jorge
Gramtica:
Start -> Expression Expression Term (PLUS Term | MINUS Term) Term Primary (TIMES Primary) Primary -> NUMBER
Exemplo adaptado de: JAVACC Tutorial: http://www.engr.mun.ca/~theo/JavaCC-Tutorial/ Lianet Seplveda Torres e Maria Luca Castro Jorge
16
Entrada de tokens
Mtodo gerado pelo smbolo inicial da gramtica Classes de excees geradas pelo JAVACC
17
Exemplo adaptado de: JAVACC Tutorial: http://www.engr.mun.ca/~theo/JavaCC-Tutorial/ Lianet Seplveda Torres e Maria Luca Castro Jorge
18
Lianet Seplveda Torres e Maria Luca Castro Jorge
Start -> Expression Expression Term (PLUS Term | MINUS Term) Term Primary (TIMES Primary) Primary -> <NUMBER>
Primeiro exemplo Calculadora 3. Definio das Produes (Componente Sinttico) Aes semnticas associadas
Cada no terminal da gramtica um mtodo do parser
19
Lianet Seplveda Torres e Maria Luca Castro Jorge
Start -> Expression Expression Term (PLUS Term | MINUS Term) Term Primary (TIMES Primary) Primary -> NUMBER
20
Lianet Seplveda Torres e Maria Luca Castro Jorge
21
Lianet Seplveda Torres e Maria Luca Castro Jorge
SimpleCharStream.java responsvel por adaptar a entrada para o analisador lxico Token.java classe que representa os tokens
Image string que representa o token Kind nmero que representa o tipo do token ... Exemplo adaptado de: JAVACC Tutorial: http://www.engr.mun.ca/~theo/JavaCC-Tutorial/
23
Primeiro exemplo Calculadora (Calculator.jj) Mensagens para erros lxicos podem ser editadas no arquivo TokenMgrError.java Exemplo de erro lxico uso do operador / no definido
Operao: 33/1 Erro lxico!
24
Lianet Seplveda Torres e Maria Luca Castro Jorge
Primeiro exemplo Calculadora (Calculator.jj) Mensagens para erros sintticos podem ser editadas no arquivo ParserException.java Exemplo de erro sinttico algo no definido nas regras da gramtica
Operao: +33 Erro sinttico!
25
Lianet Seplveda Torres e Maria Luca Castro Jorge
Primeiro exemplo Calculadora (Calculator.jj) Erros semnticos so identificados durante a anlise sinttica Exemplo de erro semntico overflow
Operao: 777766669999+33 Erro semntico!
Trecho de cdigo retirado do mtodo Primary() identificao de erro semntico
26
Lianet Seplveda Torres e Maria Luca Castro Jorge
Start -> Expression Expression Term (PLUS Term | MINUS Term) Term Primary (TIMES Primary) Primary -> NUMBER
Primeiro exemplo Calculadora (Calculator.jj) Exerccio: Incluir operaes de negao e operaes parentesadas na calculadora, com as prioridades: Parnteses e negao tem a mesma prioridade de nmero
27
Lianet Seplveda Torres e Maria Luca Castro Jorge
29
Lianet Seplveda Torres e Maria Luca Castro Jorge
31
Lianet Seplveda Torres e Maria Luca Castro Jorge
33
Lianet Seplveda Torres e Maria Luca Castro Jorge
Referncias
JavaCC [tm]: Documentation Index: http://javacc.java.net/doc/docindex.html Building your own languages with JAVACC: http://www.javaworld.com/javaworld/jw-122000/jw-1229-cooltools.html JAVACC Tutorial: http://www.engr.mun.ca/~theo/JavaCC-Tutorial/ Using JAVACC: http://www.cs.lmu.edu/~ray/notes/javacc/ Java Compiler Compiler Documentation: http://javacc.java.net/doc/ JAVACC: Java compilers compiler: http://ltiwww.epfl.ch/~petitp/GenieLogiciel/GenLog7.pdf Writing Interpreters with JAVACC: http://www.cs.nmsu.edu/~rth/cs/cs471/InterpretersJavaCC.html A Start Kit for JAVACC: http://w3.msi.vxu.se/users/jonasl/javacc/ Gramticas LL(k) Notas de Aula: http://winandy.voila.net/LLk_NotasAula.pdf Notas de aula da professora Sandra Maria Alusio Aho, A. V., Lam, M. S., Sethi, R. e Ullman, J. D. (2008): Compiladores: Princpios, tcnicas e ferramentas. 2Edio, Pearson Addison-Wesley Create your own Programming Languege: http://www.codeproject.com/Articles/50377/Create-Your-Own-Programming-Language JavaCC Eclipse Plug-in: http://eclipse-javacc.sourceforge.net/
35
Lianet Seplveda Torres e Maria Luca Castro Jorge