Академический Документы
Профессиональный Документы
Культура Документы
Notacin para especificar lenguajes (BNF y EBNF) Herramienta para generar analizadores sintcticos Presentacin del segundo obligatorio
BNF
(BackusNaur Form)
Notacin formal para definir la sintaxis de un lenguaje Usada por la mayora de los lenguajes de programacin Metasmbolos: ::= | {} [] se define como or repeticione opcionales
Ejemplo BNF
Gramtica para representar nmeros numero decimal entPos digito ::= '-' decimal | decimal | '-' entPos | entPos ::= entPos '.' entPos ::= digito | digito entPos ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
E-BNF
Extended-BNF Se agregan las definiciones: ? Opcional * 0 a n veces + 1 a n veces
digito ::= '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
JCUP
Generador de analizadores sintcticos (parsers) en Java A partir de una gramtica especificada para JCUP (en nuestro caso el archivo Sintactico.sin), se genera automticamente el cdigo fuente java del parser (sym.java y parser.java). Luego se compila y generar el ejecutable .class (en nuestro caso: Principal.class)
E-BNF anterior
numero := '-' ? digito+ ('.' digito+)? digito := '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
/* No terminales */ non terminal numero, enteroPositivo; /* Gramtica */ numero ::= MENOS enteroPositivo PUNTO enteroPositivo | enteroPositivo PUNTO enteroPositivo | MENOS enteroPositivo | enteroPositivo ; enteroPositivo ::= DIGITO enteroPositivo | DIGITO ;
JLEX
Reconoce los smbolos del lenguaje (palabras claves, identificadores, nmeros, strings, etc) Se aplican expresiones regulares Para el obligatorio se entrega hecho (Principal.java)
comparar.bat
Obligatorio
El trabajo consiste en generar parser usando JCUP que reconozca cdigo fuentes del lenguaje especificado en la E-BNF presentada en la letra del obligatorio. Y adems imprima ciertos textos a medida que se van reconociendo ciertas estructuras.
Obligatorio
Se presente en formato E-BNF la especificacin de un lenguaje similar a PL-SQL, pero modificado y ms sencillo. Un progrma PL-SQL tiene 3 secciones con: Declaraciones (opcional) Sentencias Excepciones (opcional)
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
DECLARE suma NUMBER := 0; BEGIN FOR i IN (SELECT e FROM t) LOOP suma := suma + i; END LOOP; EXCEPTION WHEN no_data_found THEN suma := 0; END;
Es decir reconoce de izquierda a derecha, y primero las hojas y luego el nodo padre. Tener presente lo anterior para generar la misma salida, que la oficial.