Welcome, guest! Login / Register - Why register?
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

Your Name: Code Language: