Documentos de Académico
Documentos de Profesional
Documentos de Cultura
E. T. S. INGENIERA INFORMTICA
LENGUAJES Y SISTEMAS INFORMTICOS
PRCTICAS DE LABORATORIO
ANLISIS SINTCTICO (2)
(abc) Escriba una gramtica para reconocer 1 cadena de la forma a ibjck imprimiendo:
Regular (si ijk)
Independiente del contexto (si i=jk o i=kj o j=ki)
Dependiente del contexto (si i=j=k)
Mensajes de error ms elaborados
Con la atribucin podemos conseguir que en caso de que una cadena no encaje
en la gramtica se devuelva al usuario un mensaje de error ms explicativo.
En el Parser import java_cup.runtime.Symbol;
parser code {:
implementamos public void syntax_error(Symbol cur_token)
el mtodo {
syntax_error System.err.print("ERROR SINTCTICO(" + (cur_token.left+1) + "," +
(cur_token.right+1) + "): ");
en la gramtica
System.err.println("Con el token [" + cur_token.sym +
"=\"" + cur_token.value + "\"].");
En el Lexer System.exit(-1);
}
aadimos :};
informacin sobre // Resto de las zonas de la gramtica (terminales y no terminales, etc).
lneas y columnas
import java_cup.runtime.*;
%%
%class Lexer
%unicode
%cup
%line
%column
//Aqu faltara la definicin de las macros Blanco, Numero e Identificador.
%%
{Blanco}+ {;}
{Numero} {return new Symbol (sym.NUM, yyline, yycolumn, yytext());}
{Identificador} {return new Symbol (sym.IDENT, yyline, yycolumn, yytext());}
. {System.out.println ("Error lxico:"+yyline+","+yycolumn+" carcter "+yytext());}
Un ejemplo de atribucin
ENTRADA: ent 1 0 1 1 1 A1 = {
1 4 3-5 (q0,q1,q2),(a,b),q0,(q2),
(<q0,a>:<q0>,
ent 1 0 0 1 0 elem 0 0 1 1 1 <q0,b>:<q1>,
<q1,a>:<q2>,
<q2,b>:<q2>)
ent 1 0 0 0 0 elem 0 0 0 1 0 NUM 3 GUION NUM 5 }
y compruebe si se trata de un
elem 1 0 0 0 0 NUM 4 autmata finito determinista o
no determinista
NUM 1
Otro ejemplo de atribucin
(Anchura) Atribuya la gramtica para calcular la anchura mxima de un rbol (para una
entrada = (1 (2 (3 (4) 5) 6 7 8) 9) sera 5).