Académique Documents
Professionnel Documents
Culture Documents
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 tokens permitidos por nuestro lenguaje con la ayuda
JAVACUP es un analizador sintáctico o sea un parser
parser-generador
generador vamos a gestionar jflex.
Sistemas -> Administración -> Gestor de Actualizaciones
Clic en Configuración.
Instalar netbeans:
Lo descargamos de la pagina:
http://netbeans.org/downloads/index.html
package miscaner;
import java_cup.runtime.Symbol;
%%
%state A
%cupsym simbolo
%class gramatilex
%cup
%public
%unicode
%line
%char
%ignorecase
%%
/* OPERADOR */
"=" {return new Symbol(simbolo.igual, yychar,yyline); }
"+" {return new Symbol(simbolo.mas, yychar,yyline); }
"-" {return new Symbol(simbolo.menos, yychar,yyline); }
";" {return new Symbol(simbolo.coma, yychar,yyline); }
/* String */
{tstring} {return new Symbol(simbolo.tstring, yychar,yyline,new String(yytext()));}
{numero} {return new Symbol(simbolo.numero, yychar,yyline,new String(yytext()));}
{iden} {return new Symbol(simbolo.iden, yychar,yyline,new String(yytext()));}
/* COMENTARIOS */
{Comentario} { /* Se ignoran */}
{Comentario2} { /* Se ignoran */}
/* BLANCOS */
[ \t\r\f\n]+ { /* Se ignoran */}
<A>{
{numero} {return new Symbol(simbolo.numero, yychar,yyline,new String(yytext()));}
";" {return new Symbol(simbolo.coma, yychar,yyline); }
[!][>] {yybegin(YYINITIAL); return new Symbol(simbolo.tend, yychar,yyline);}
[ \t\r\f\n]+ { /* Se ignoran */}
. { System.out.println("Error lexico dentro de <!inicio: "+yytext()); }
}
/* Cualquier Otro */
. { System.out.println("Error lexico: "+yytext()); }
Creación Parser.cup
Fichero: Parser.cup
package miscaner;
import java_cup.runtime.*;
parser code
{:
/**Metodo al que se llama automáticamente ante algún error sintactico.*/
public void syntax_error(Symbol s){
System.out.println("Error en la Línea " + (s.right+1) +" Columna "+s.left+ ". Identificador "
+s.value + " no reconocido." );
}
/**Metodo al que se llama en el momento en que ya no es posible una recuperación de
errores.*/
public void unrecovered_syntax_error(Symbol s) throws java.lang.Exception{
System.out.println("Error en la Línea " + (s.right+1)+ "Columna "+s.left+". Identificador " +
s.value + " no reconocido.");
}
:}
action code
{:
:}
terminal tif , twhile, tfor, igual, mas, menos;
terminal tstart, coma, tend;
terminal String tstring, numero, iden;
non terminal INICIA,L, TIPOS;
INICIA::= L;
L::=L TIPOS
|TIPOS;
Creación Main.java
Fichero: Main.java
package miscaner;
import java.io.FileInputStream;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println("-------------------------------");
new sintactico(new gramatilex(new FileInputStream("prueba.txt"))).parse();
}
}
Dentro de la carpeta donde tenemos el proyecto.
Compilar
Ejecutamos el proyecto de netbeans.
Archivo de Entrada:
/* Este es un comentario */
Variable = 2.33333 ;
for <!inicio 3; 2; 1; 4; !>
var = " Cadena ";
numero = 2222;
// Comentario 2
/* Comentario 4 */
while <!Inicio
6; 7; 8; 9;
!>
4+3=7
//end
/* Fin */