Manual J-Flex
EN WINDOWS
Universidad De San Carlos Facultad de Ingeniería Escuela de Ciencias y Sistemas Organización de Lenguajes y Compiladores 1 Ing. Manuel Haroldo Castillo Reyna Aux. Aura Luz Cifuentes Reyes
Jflex es una herramienta desarrollada en Java, la cual genera un programa en Java a partir de una especificación en el que se indican los tokenspermitidos por nuestro lenguaje con la ayuda JAVACUP es un analizador sintáctico o sea un parser generador vamos a gestionar jflex. parser-generador
Manual Jflex Sin Cup Compiladores 1 Sección B
Instalación:
Paso 1: Descarga de Libreras
Descargamos las fuentes de JFlex en la página: http://jflex.de/download.html
Paso 2: Creación de Carpeta contenedora de fuentes
Creamos la Carpeta“Fuentes” dentro de la unidad C: Descomprimimos el contenido de la carpeta anteriormente descargado: jflex-1.4.3 dentro de la carpeta de Fuentes.
Paso 3: Creación de Archivo de Configuración Lexico.bat
Cambiamos la dirección de JAVA_HOME por la dirección de nuestra actual JDK. Agregamos la dirección de nuestro actual proyecto. Fichero: Lexico.bat SET JAVA_HOME="C:\Program Files(x86)\Java\jdk1.6.0_17\bin" SET PATH=%JAVA_HOME%;%PATH% SET CLASSPATH=%JAVA_HOME%; SET JFLEX_HOME= C:\Fuentes\jflex-1.4.3 cd C:\Users\lucita\Documents\NetBeansProjects\SimpleLex\src\simplelex java -jar %JFLEX_HOME%\lib\JFlex.jar scanner.jflex pause
Paso 4: Creación de un proyecto de Netbeans
File -> New Project -> Java Application Project Name: SimpleLex
Manual Jflex Sin Cup Compiladores 1 Sección B Dentro dela carpeta del proyecto, agregamos una carpeta “lib”. Copiamos la librería: java-cup-11a-runtime.jar dentro de la carpeta lib. Clic secundario en Librerías, y le damos Agregar nuevo JAR/FOLDER.
Paso 5: Creación Scanner.jflex
Scanner.jflex: package simplelex; import java_cup.runtime.Symbol; import java.util.LinkedList;
%% tstring numero letra iden =[\"] [^\"\n]+ [\"\n] =[0-9]+ "."? [0-9]*=[a-zA-ZÑñ]+ ={letra}({letra}|{numero}|"_")*
%cupsym simbolo %class scanner %cup %unicode %public %line
Manual Jflex Sin Cup Compiladores 1 Sección B %char %ignorecase %{ /* Lista con errores sintacticos */ public LinkedList lista=new LinkedList(); /* Metodo que es llamado al encontrar un error lexico */ private void ErrorScan(int linea, int columna, String valor){ lista.add(new Errores(linea,columna, "Error lexico en el caracter "+valor) ); } %} %%
{tstring} {numero} {iden} [ \t\r\f\n]+ .
{return new Symbol(simbolo.tstring, yychar,yyline,new String(yytext()));} {return new Symbol(simbolo.numero, yychar,yyline,new String(yytext()));} {return new Symbol(simbolo.iden, yychar,yyline,new String(yytext()));} { /* Se ignoran */} { ErrorScan(yyline,yychar,yytext()); }
Paso 6:Creación Errores.java
Fichero: Errores.java package simplelex; public class Errores { protected Integer Linea; protected Integer Columna; protected String Descripcion; public Errores(Integer Linea, Integer Columna, String Descripcion) { this.Linea = Linea; this.Columna = Columna; this.Descripcion = Descripcion; } }
Paso 7: Creación Simbolo.java
Fichero: Simbolo.java Aquí declaras todos los tokensque definistes en el análisis lexico.
Manual Jflex Sin Cup Compiladores 1 Sección B public class simbolo { public static final int iden = 12; public static final int tstring = 11; public static final int EOF = 0; public static final int numero = 10; public static final int error = 1; } NO OLVIDES DECLARAR EOF=0 y error=1. ESTA CLASE REPRESENTA LOS TOKEN O COMPONENTES LEXICOS QUE FUERONDECLARADOS EN JFLEX ej: {tstring} {return new Symbol(simbolo.tstring, yychar,yyline,new String(yytext()));}
Paso 8: Creación Main.java
Fichero: Main.java package simplelex; import java_cup.runtime.Symbol; import java.io.BufferedReader; import java.io.StringReader; import java.util.Iterator; import java.util.LinkedList; public class Main { public static void main(String[] args) { //Archivo de...
Regístrate para leer el documento completo.