Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as Plain Text by GRAM ( 14 years ago )
package Grammar.PrimeraPasada;
import java_cup.runtime.Symbol;
import Grammar.config.TokenValue;
//import Tabla_de_Simbolos.*;
import java.util.ArrayList;
action code{:
:}
parser code {:
public static void main(String args[]) throws Exception {
new parser(new Lexico(System.in)).parse();
}
public void syntax_error(Symbol s){
TokenValue tok = (TokenValue) s.value ;
System.out.println("\nError Sintactico en la Linea " + tok.getLinea() + ". Identificador '" + tok.getLexema() + "' no reconocido." );
//JOptionPane.showMessageDialog(null,"Error Sintactico en la Linea " + tok.getLinea() + ". Identificador '" + tok.getLexema() + "' no reconocido.","Info",JOptionPane.ERROR_MESSAGE);
}
public void unrecovered_syntax_error(Symbol s) throws java.lang.Exception{
System.out.println("\nNo se Logro Recuperar del ERROR por el Identificador " + s.value + " que no reconocido.");
}
:}
terminal TokenValue ID, REALNUMBER, TEXTO, CARACTER;
terminal TokenValue USE, ABAP, VAR, AS;
terminal TokenValue NUMBER;
terminal TokenValue PUNTO, PCOMA, COMA, CABRIR, CCERRAR, IGUAL, PCERRAR, PABRIR;
terminal TokenValue INT, STRING, CHAR, FLOAT, BOOLEAN;
terminal TokenValue PASAR_INT, PASAR_FLOAT, PASAR_STR;
terminal TokenValue MAS, MENOS, POR, DIV, MAYOR, MENOR, MAYORIGUAL, MENORIGUAL, IGUALIGUAL;
terminal TokenValue NOIGUAL, AND, OR, NOT, FOR;
terminal TokenValue LLABRIR, LLCERRAR, SWITCH, CASE, DEFAULT, DOSPUNTOS, BREAK;
non terminal String Programa, inicio, dec_encabezado, cuerpo_princ, importar_abap, cuerpo;
non terminal String list_id, tipo, dec_var, id_nom_var;
non terminal TokenValue asig_var, cast_var, char_id, numreal_id;
non terminal TokenValue num_numreal_id, num_o_id, num_o_id_pasar, asig_variables_op, exp;
non terminal TokenValue exp_mat2, mas_menos, por_div, sent_for, termino, fun1, termino2, num_numreal;
non terminal TokenValue inicializacion, incremento, dec_inc;
non terminal TokenValue sent_switch, cuerpo_switch, lista_case, pdefault, exp_logica, prod_case;
non terminal TokenValue num_caracter, expr_e, expr_t, expr_f, expr_g, expr_h ;
precedence right IGUAL;
precedence left OR;
precedence left AND;
precedence left IGUALIGUAL, NOIGUAL;
precedence left MENOR, MENORIGUAL, MAYOR, MAYORIGUAL;
precedence left MAS, MENOS;
precedence left POR, DIV;
start with Programa;
Programa ::= inicio;
inicio ::= dec_encabezado cuerpo_princ
|cuerpo_princ
;
// IMPORTAR ABAP
dec_encabezado ::= dec_encabezado importar_abap
|importar_abap
;
importar_abap ::= USE ID PUNTO ABAP PCOMA
;
//CUERPO PRINCIPAL
cuerpo_princ ::= cuerpo_princ cuerpo
|cuerpo
;
cuerpo ::= dec_var
|asig_var
|cast_var
|asig_variables_op
;
//DECLARACION VARIABLES GLOBALES
dec_var ::= VAR list_id AS tipo PCOMA
;
list_id ::= list_id COMA id_nom_var
|id_nom_var
;
id_nom_var ::= ID
|ID CABRIR num_o_id CCERRAR
|ID CABRIR num_o_id CCERRAR CABRIR num_o_id CCERRAR
;
num_o_id ::=ID
|NUMBER
;
tipo ::= INT|STRING|CHAR|FLOAT|BOOLEAN;
// ASIGNACION VARIABLE GLOBAL
asig_var ::= ID IGUAL num_numreal_id PCOMA;
num_numreal_id ::=ID
|REALNUMBER
|NUMBER
;
//CASTEO DE VARIABLES
cast_var ::=PASAR_INT PABRIR numreal_id
|PASAR_FLOAT PABRIR num_o_id_pasar
|PASAR_STR PABRIR char_id
;
numreal_id ::=ID PCERRAR PCOMA
|REALNUMBER PCERRAR PCOMA
;
num_o_id_pasar ::=ID PCERRAR PCOMA
|NUMBER PCERRAR PCOMA
;
char_id ::=ID PCERRAR PCOMA
|CARACTER PCERRAR PCOMA
;
//OPERAR Y ASIGNAR A UNA VARIABLE
asig_variables_op ::= id_nom_var IGUAL expr_e PCOMA ;
//OPERACIONES
expr_e ::= expr_e MAS expr_t
| expr_t
;
expr_t ::= expr_t MENOS expr_f
| expr_f
;
expr_f ::= expr_f POR expr_g
| expr_g
;
expr_g ::= expr_g DIV expr_h
| expr_h
;
expr_h ::= PABRIR expr_e PCERRAR
|num_numreal
|id_nom_var
;
num_numreal ::=NUMBER
|REALNUMBER;
Revise this Paste