J Flex Cup

Preview:

DESCRIPTION

Conferencia sobre JFlex y CUP por Julio Santizo

Citation preview

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