Click here to load reader
View
7.634
Download
3
Embed Size (px)
DESCRIPTION
Conferencia sobre JFlex y CUP por Julio Santizo
INTRODUCCIN A JFLEX
Y JAVA CUP
Julio Rene Santizo Ochoa
Fases del compilador
ScannerExpresiones regulares
ParserGramatica
LexemaProduccion
Anlisis descendente
LL1
Anlisis ascendente
SLR
LR1
LALR
Que es JFlex?
Es una herramienta que genera analizadores lexicos, escritos en Java.
Que es JFlex?
Definiciondel AL
JFlexAnalizador Lexico
Que es Java CUP
Es una herramienta para la construccin de analizadores sintcticos que genera parsers escritos en java.
Los parsers que se obtienen utilizan el mtodo deanlisis ascendente LALR
Que es Java CUP
Definiciondel AS
CUPAnalizador Sintactico
Como se usan?
Se les da un archivo de entrada, con las especificaciones del analizador que queremos generar, estas herramientas se encargan de generarlos y luego podemos utilizar los analizadores generados, en cualquier proyecto de Java.
Como se usan?
Para utilizarlos, debemos tenerlos dentro del classpath, invocarlos y luego utilizar las clases generadas como querramos.
Que es el CLASSPATH?
The Classpath is an argument set on the command-line, or through an environment variable, that tells the Java Virtual Machine where to look for user-defined classes and packages in Java programs.
Que es una variable de entorno?
export CLASSPATH =
echo $CLASSPATH
EJEMPLO #1
Integracion con eclipse
Agregar external tool jflex
Agregar external tool java_cup
Agregar biblioteca java_cup.runtime
Configurar builders
EJEMPLO #2
Archivos .jflex
CODIGO DE USUARIO%%OPCIONES Y MACROS%%REGLAS Y ACCIONES
Codigo de usuario
Este codigo, se copia literalmente a la clase del scanner generado.
Si esta seccion termina con un comentario de documentacion de la clase para javadoc, se coloca este comentario, de lo contrario se genera un comentario automatico.
Opciones y macros
Todas las opciones empiezan con %
%class%public%apiprivate
%{...%}
Opciones y macros
%init{...%init}
%cup%ignorecase%char%line%columnMACRO = exp regular
Estados
%states
{expr1 { action1 }expr2 { action2 }}
Reglas y acciones
'[:jletter:]' '[:jletterdigit:]' '[:letter:]' '[:digit:]' '[:uppercase:]' '[:lowercase:]' '.'
Reglas y acciones
[a-zA-Z][abc][^a]
Reglas y acciones
* unary postfix operators ('*', '+', '?', {n}, {n,m})
* unary prefix operators ('!', '~')
* concatenation (RegExp::= RegExp Regexp)
* union (RegExp::= RegExp '|' RegExp)
Funciones en las acciones
yytext() Devuelve el lexema reconocido.yylength() Devuelve el la longitud del lexema.yycharat( int n ) Devuelve el ensimo carcter del lexema reconocido.yycharyylineyycolumn
Archivos .cup
Package e importsCodigo de usuarioLista de simbolosPrecedencia y asociacionGramatica
Bibliografia
http://jflex.de/manual.html
http://www2.cs.tum.edu/projects/cup/manual.html
LIBRO DEL DRAGON
Material
http://www.coecys.com/archivos/MaterialJlexyCup.zip