Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
JFlex
JFlex
Especificao
JFlex
Classe do Lexer
Especificando um Lexer
Especificando um Lexer
Parte 1 Cdigo
Parte 1 Cdigo
Definir o pacote ao qual o lexer vai pertencer Definir imports Definir a classe Token ou qualquer outra classe, desde que no seja pblica
No recomendo
Comentrios de documentao
7
Veremos separadamente...
8
Geralmente definem detalhes de como ser a classe gerada (para funcionar como lexer)
%line ativa o contador de linhas (no atributo yyline) %column ativa o contador de colunas (yychar)
11
Para usar a definio de uma macro, deve-se delimitar seu nome por chaves
ALPHA_NUMERIC={ALPHA}|{DIGIT}
14
Parte 3 Regras
15
Parte 3 Regras
As regras podem ser criadas com uma expresso regular pura ou usar macros A ao associada expresso regular pode ser qualquer cdigo Java
Ateno: Esse cdigo (assim como o da opo %{ na segunda parte) no verificado pelo JFlex ele apenas copiado fielmente para a classe!
16
Parte 3 Regras
Para expresses que representam tokens, a regra deve ter um return passando o token Se for uma expresso que representa comentrios ou espao em branco, a ao no deve retornar valor
Se for preciso recuperar o lexema (como um objeto String), basta chamar a funo yytext()
17
Parte 3 Regras
Exemplo
[0-9]+ { return new Symbol(sym.NUMERO, yytext()); } "//"[^\n] { /* representa um comentrio portanto, no faz nada */ }
18
Gerando o Lexer
Gerando o Lexer
Primeiramente, deve-se salvar a especificao para um arquivo No necessrio salvar com uma extenso especfica, mas comum usar .flex
20
Gerando o Lexer
\doc tem o manual \examples tem exemplos de uso do JFlex \lib tem a verso compilada do JFlex \src tem o cdigo fonte do JFlex
21
Gerando o Lexer
Gerando o Lexer
Gerando o Lexer
Coloque o arquivo .java gerado no seu projeto (do Eclipse, por exemplo) e compile Erros de compilao podem acontecer na classe por conta de trechos de cdigo errados colocados na especificao
24
Exemplo
Adicionarei no site um exemplo de uso do JFlex Implementao dos tokens da linguagem XPR-1
def myVar = (10 + 3) - 4; myVar * myVar; //imprime o resultado! 19 + 10 * myVar; //imprime o resultado!
25
Referncias (Java)
Site do JFlex
http://jflex.de
Manual do JFlex
http://jflex.de/manual.html
26
Referncias (C)
http://sourceforge.net/projects/gnuwin32/
Manual do flex
http://flex.sourceforge.net/manual/
27