j flex cup
DESCRIPTION
Conferencia sobre JFlex y CUP por Julio SantizoTRANSCRIPT
INTRODUCCIÓN A JFLEX Y JAVA CUP
Julio Rene Santizo OchoaJulio Rene Santizo Ochoa
Fases del compilador
Scanner Expresiones regulares
Parser Gramatica
Lexema Produccion
Análisis descendenteLL1
Análisis ascendenteSLRLR1LALR
Que es JFlex?
Es una herramienta que genera analizadores lexicos, escritos en Java.
Que es JFlex?
Definiciondel AL
JFlex Analizador Lexico
Que es Java CUP
Es una herramienta para la construcción de analizadores sintácticos que genera parsers escritos
en java.
Los parsers que se obtienen utilizan el método deanálisis ascendente LALR
Que es Java CUP
Definiciondel AS
CUP Analizador 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
<STRING> { 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 enésimo carácter del lexema reconocido.
yycharyyline
yycolumn
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