27

Click here to load reader

J Flex Cup

Embed Size (px)

DESCRIPTION

Conferencia sobre JFlex y CUP por Julio Santizo

Citation preview

Page 1: J Flex Cup

INTRODUCCIÓN A JFLEX Y JAVA CUP

Julio Rene Santizo OchoaJulio Rene Santizo Ochoa

Page 2: J Flex Cup

Fases del compilador

Page 3: J Flex Cup

Scanner Expresiones regulares

Parser Gramatica

Lexema Produccion

Page 4: J Flex Cup

Análisis descendenteLL1

Análisis ascendenteSLRLR1LALR

Page 5: J Flex Cup

Que es JFlex?

Es una herramienta que genera analizadores lexicos, escritos en Java.

Page 6: J Flex Cup

Que es JFlex?

Definiciondel AL

JFlex Analizador Lexico

Page 7: J Flex Cup

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

Page 8: J Flex Cup

Que es Java CUP

Definiciondel AS

CUP Analizador Sintactico

Page 9: J Flex Cup

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.

Page 10: J Flex Cup

Como se usan?

Para utilizarlos, debemos tenerlos dentro del classpath, invocarlos y luego utilizar las clases

generadas como querramos.

Page 11: J Flex Cup

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.

Page 12: J Flex Cup

Que es una variable de entorno?

export CLASSPATH =

echo $CLASSPATH

Page 13: J Flex Cup

EJEMPLO #1

Page 14: J Flex Cup

Integracion con eclipse

Agregar external tool jflex

Agregar external tool java_cup

Agregar biblioteca java_cup.runtime

Configurar builders

Page 15: J Flex Cup

EJEMPLO #2

Page 16: J Flex Cup

Archivos .jflex

CODIGO DE USUARIO%%OPCIONES Y MACROS%%REGLAS Y ACCIONES

Page 17: J Flex Cup

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.

Page 18: J Flex Cup

Opciones y macros

Todas las opciones empiezan con %

%class%public%apiprivate

%{...%}

Page 19: J Flex Cup

Opciones y macros

%init{...%init}

%cup%ignorecase%char%line%columnMACRO = exp regular

Page 20: J Flex Cup

Estados

%states

<STRING> { expr1 { action1 } expr2 { action2 }}

Page 21: J Flex Cup

Reglas y acciones

'[:jletter:]' '[:jletterdigit:]' '[:letter:]' '[:digit:]' '[:uppercase:]' '[:lowercase:]' '.'

Page 22: J Flex Cup

Reglas y acciones

[a-zA-Z][abc][^a]

Page 23: J Flex Cup

Reglas y acciones

* unary postfix operators ('*', '+', '?', {n}, {n,m})

* unary prefix operators ('!', '~')

* concatenation (RegExp::= RegExp Regexp)

* union (RegExp::= RegExp '|' RegExp)

Page 24: J Flex Cup

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

Page 25: J Flex Cup

Archivos .cup

Package e importsCodigo de usuarioLista de simbolosPrecedencia y asociacionGramatica

Page 26: J Flex Cup

Bibliografia

http://jflex.de/manual.html

http://www2.cs.tum.edu/projects/cup/manual.html

LIBRO DEL DRAGON

Page 27: J Flex Cup

Material

http://www.coecys.com/archivos/MaterialJlexyCup.zip