Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Archivo: parser.cup
- parser code {:
- import java_cup.runtime.*;
- :}
- /* Terminales */
- terminal
- // Añadir operadores
- SUMA, RESTA, MULTIPLICACION, DIVISION, MODULO, INCREMENTO, DECREMENTO, OPERADOR_COMPARACION
- // Python
- IF, SWITCH, ELSE, FOR, WHILE, DO, FOREACH, DEF, LAMBDA, IN, DOS_PUNTOS, IDENTIFICADOR,
- PARENTESIS_IZQ, PARENTESIS_DER, COMA, ASIGNACION, VALOR, CLASS, EXTENDS, IMPLEMENTS,
- TRY, CATCH, NEW, THROW, LLAVE_IZQ, LLAVE_DER, PUNTO_COMA, CORCHETE_IZQ, CORCHETE_DER,
- // SQL
- SELECT, FROM, WHERE, INSERT, INTO, CREATE, DATABASE, TABLE, SET, ADD, VALORES, VALUES,
- INDEX, DELETE, UPDATE, DROP, ALTER, TRIGGER, PRIMARY_KEY, TIPO_DATO_SQL;
- /* No terminales */
- non terminal
- programa_python, instruccion, instruccion_for, instruccion_while, instruccion_do, instruccion_foreach, arreglo, lista_valores, // <-- Añadido
- clase, funcion, bloque, consulta_sql, condicion, identificadores, objeto, miembros, opt_herencia,
- columnas, tipos, accion, parametros, expresion, manejo_excepciones;
- /* Precedencias */
- precedence left PARENTESIS_IZQ, PARENTESIS_DER;
- precedence left MULTIPLICACION, DIVISION, MODULO;
- precedence left SUMA, RESTA;
- /* Reglas */
- start with programa_python;
- programa_python ::= instruccion+;
- instruccion ::=
- instruccion_for | instruccion_while | instruccion_do | instruccion_foreach
- | funcion | consulta_sql | clase | manejo_excepciones | arreglo | objeto;
- // === Bucles ===
- instruccion_do ::=
- DO LLAVE_IZQ bloque LLAVE_DER WHILE PARENTESIS_IZQ condicion PARENTESIS_DER PUNTO_COMA
- {: System.out.println("[Sintaxis] Bucle DO-WHILE válido"); :};
- instruccion_foreach ::=
- FOREACH PARENTESIS_IZQ IDENTIFICADOR IN IDENTIFICADOR PARENTESIS_DER LLAVE_IZQ bloque LLAVE_DER
- {: System.out.println("[Sintaxis] Bucle FOREACH válido"); :};
- // === Clases y Excepciones ===
- clase ::=
- CLASS IDENTIFICADOR (EXTENDS|IMPLEMENTS IDENTIFICADOR)? LLAVE_IZQ miembros LLAVE_DER
- {: System.out.println("[Sintaxis] Clase definida"); :};
- manejo_excepciones ::= TRY LLAVE_IZQ bloque LLAVE_DER CATCH PARENTESIS_IZQ IDENTIFICADOR PARENTESIS_DER LLAVE_IZQ bloque LLAVE_DER
- {: System.out.println("[Sintaxis] Manejo de excepciones válido"); :};
- opt_herencia ::= EXTENDS IDENTIFICADOR | IMPLEMENTS IDENTIFICADOR | /* vacío */;
- // === Estructuras Python ===
- arreglo ::=
- IDENTIFICADOR ASIGNACION CORCHETE_IZQ lista_valores CORCHETE_DER PUNTO_COMA
- {: System.out.println("[Sintaxis] Arreglo definido"); :};
- lista_valores ::=
- VALOR
- | lista_valores COMA VALOR;
- objeto ::=
- IDENTIFICADOR ASIGNACION IDENTIFICADOR PARENTESIS_IZQ lista_valores PARENTESIS_DER PUNTO_COMA
- {: System.out.println("[Sintaxis] Objeto instanciado"); :};
- // === SQL Ampliado ===
- consulta_sql ::=
- SELECT identificadores FROM IDENTIFICADOR opt_where PUNTO_COMA
- {: System.out.println("[Sintaxis] SELECT válido"); :}
- | INSERT INTO IDENTIFICADOR PARENTESIS_IZQ identificadores PARENTESIS_DER VALORES PARENTESIS_IZQ lista_valores PARENTESIS_DER PUNTO_COMA
- {: System.out.println("[Sintaxis] INSERT reconocido"); :}
- | UPDATE IDENTIFICADOR SET identificadores WHERE condicion PUNTO_COMA
- {: System.out.println("[Sintaxis] UPDATE válido"); :}
- | CREATE DATABASE IDENTIFICADOR PUNTO_COMA
- {: System.out.println("[Sintaxis] CREATE DATABASE válido"); :}
- | CREATE TABLE IDENTIFICADOR PARENTESIS_IZQ columnas PARENTESIS_DER PUNTO_COMA
- {: System.out.println("[Sintaxis] CREATE TABLE válido"); :}
- | ALTER TABLE IDENTIFICADOR accion IDENTIFICADOR TIPO_DATO_SQL PUNTO_COMA
- {: System.out.println("[Sintaxis] ALTER TABLE válido"); :}
- | DROP TABLE IDENTIFICADOR PUNTO_COMA
- {: System.out.println("[Sintaxis] DROP TABLE válido"); :}
- ;
- columnas ::=
- IDENTIFICADOR TIPO_DATO_SQL
- | columnas COMA IDENTIFICADOR TIPO_DATO_SQL;
- accion ::=
- ADD
- | DROP;
- // === Función con parámetros ===
- funcion ::= DEF IDENTIFICADOR PARENTESIS_IZQ (parametros)? PARENTESIS_DER DOS_PUNTOS bloque
- {: System.out.println("[Sintaxis] Función definida"); :};
- parametros ::=
- IDENTIFICADOR
- | parametros COMA IDENTIFICADOR;
- instruccion_for ::=
- FOR IDENTIFICADOR IN IDENTIFICADOR DOS_PUNTOS bloque
- {: System.out.println("[Sintaxis] Bucle FOR válido"); :};
- instruccion_while ::=
- WHILE IDENTIFICADOR DOS_PUNTOS bloque
- {: System.out.println("[Sintaxis] Bucle WHILE válido"); :};
- bloque ::=
- LLAVE_IZQ instruccion+ LLAVE_DER
- {: System.out.println(" Bloque de código"); :};
- /* ---------- SQL ---------- */
- opt_where ::=
- WHERE condicion
- | /* vacío */;
- condicion ::=
- expresion OPERADOR_COMPARACION expresion
- {: System.out.println(" Condición: comparación"); :};
- expresion ::=
- expresion SUMA expresion
- | expresion RESTA expresion
- | expresion MULTIPLICACION expresion
- | expresion DIVISION expresion
- | PARENTESIS_IZQ expresion PARENTESIS_DER
- | IDENTIFICADOR
- | VALOR; // <-- Punto y coma añadido
- identificadores ::=
- IDENTIFICADOR
- | identificadores COMA IDENTIFICADOR;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement