Click here to load reader

J Flex Cup

  • View
    7.634

  • Download
    3

Embed Size (px)

DESCRIPTION

Conferencia sobre JFlex y CUP por Julio Santizo

Text of J Flex Cup

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

Search related