SlideShare uma empresa Scribd logo
1 de 1
Baixar para ler offline
Universidad Tecnológica Centroamericana
Ingeniería de Sistemas
Compiladores I
Ing. Egdares Futch H.

                             Ejemplo básico de uso de CUP
import java_cup.runtime.*;

parser code {:
/* Manejo de errores, antes de entrar al modo de
   recuperacion de errores, por medio del token de error */

public void syntax_error(Symbol s) {
  report_error("Error de sintaxis", null);
}

public void unrecovered_syntax_error(Symbol s) throws
  java.lang.Exception {
  report_fatal_error("No pude reparar el input, lo siento", null);
}
:};

init with {: scanner.init();              :};
scan with {: return scanner.next_token(); :};

terminal           SEMI, PLUS, MINUS, TIMES, DIVIDE, MOD;
terminal           UMINUS, LPAREN, RPAREN;
terminal Integer   NUMBER;

non terminal            expr_list, expr_part;
non terminal Integer    expr;

precedence left PLUS, MINUS;
precedence left TIMES, DIVIDE, MOD;
precedence left UMINUS;

/* Start symbol */
start with expr_list;

expr_list ::= expr_list expr_part
              |
              expr_part;

expr_part ::= expr:e
              {: System.out.println("= " + e); :}
              SEMI
              ;

expr      ::= expr:e1 PLUS expr:e2
              {: RESULT = new Integer(e1.intValue() + e2.intValue());   :}
              |
              expr:e1 MINUS expr:e2
              {: RESULT = new Integer(e1.intValue() - e2.intValue());   :}
              |
              expr:e1 TIMES expr:e2
              {: RESULT = new Integer(e1.intValue() * e2.intValue());   :}
              |
              expr:e1 DIVIDE expr:e2
              {: RESULT = new Integer(e1.intValue() / e2.intValue());   :}
              |
              expr:e1 MOD expr:e2
              {: RESULT = new Integer(e1.intValue() % e2.intValue());   :}
              |
              NUMBER:n
              {: RESULT = n; :}
              |
              MINUS expr:e
              {: RESULT = new Integer(0 - e.intValue()); :}
              %prec UMINUS
              |
              LPAREN expr:e RPAREN
              {: RESULT = e; :}
              |
              error SEMI
              ;

Mais conteúdo relacionado

Mais procurados

Ejercicio máquina de turing
Ejercicio máquina de turingEjercicio máquina de turing
Ejercicio máquina de turing
vmtorrealba
 
Intermediate code- generation
Intermediate code- generationIntermediate code- generation
Intermediate code- generation
rawan_z
 
Registers and counters
Registers and counters Registers and counters
Registers and counters
Deepak John
 
8085 microprocessor(1)
8085 microprocessor(1)8085 microprocessor(1)
8085 microprocessor(1)
Reevu Pal
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punteros
pedreror1
 

Mais procurados (20)

LL(1) parsing
LL(1) parsingLL(1) parsing
LL(1) parsing
 
TCP (Transmission Control Protocol) Y UDP (User Datagram Protocol)
TCP (Transmission Control Protocol) Y UDP (User Datagram Protocol)TCP (Transmission Control Protocol) Y UDP (User Datagram Protocol)
TCP (Transmission Control Protocol) Y UDP (User Datagram Protocol)
 
Introduction state machine
Introduction state machineIntroduction state machine
Introduction state machine
 
Ejercicio máquina de turing
Ejercicio máquina de turingEjercicio máquina de turing
Ejercicio máquina de turing
 
Theory of computation and automata
Theory of computation and automataTheory of computation and automata
Theory of computation and automata
 
3 jump, loop and call instructions
3 jump, loop and call instructions3 jump, loop and call instructions
3 jump, loop and call instructions
 
Verilog Pli
Verilog PliVerilog Pli
Verilog Pli
 
An 8 bit_multiplier
An 8 bit_multiplierAn 8 bit_multiplier
An 8 bit_multiplier
 
Intermediate code- generation
Intermediate code- generationIntermediate code- generation
Intermediate code- generation
 
Salto condicional
Salto condicionalSalto condicional
Salto condicional
 
Sequential circuits in Digital Electronics
Sequential circuits in Digital ElectronicsSequential circuits in Digital Electronics
Sequential circuits in Digital Electronics
 
Registers and counters
Registers and counters Registers and counters
Registers and counters
 
vhdl
vhdlvhdl
vhdl
 
ICMP
ICMPICMP
ICMP
 
8085 microprocessor(1)
8085 microprocessor(1)8085 microprocessor(1)
8085 microprocessor(1)
 
Compiler: Syntax Analysis
Compiler: Syntax AnalysisCompiler: Syntax Analysis
Compiler: Syntax Analysis
 
Arreglo de punteros
Arreglo de punterosArreglo de punteros
Arreglo de punteros
 
Program control instructions
Program control instructionsProgram control instructions
Program control instructions
 
Chapter 6 intermediate code generation
Chapter 6   intermediate code generationChapter 6   intermediate code generation
Chapter 6 intermediate code generation
 
Introduction to Problem Solving Techniques- Python
Introduction to Problem Solving Techniques- PythonIntroduction to Problem Solving Techniques- Python
Introduction to Problem Solving Techniques- Python
 

Mais de Egdares Futch H.

Mais de Egdares Futch H. (20)

FIT 2018 - Malware Avanzado y Respuesta a Incidentes
FIT 2018 - Malware Avanzado y Respuesta a IncidentesFIT 2018 - Malware Avanzado y Respuesta a Incidentes
FIT 2018 - Malware Avanzado y Respuesta a Incidentes
 
FIT 2020 - Artificial Life
FIT 2020 - Artificial LifeFIT 2020 - Artificial Life
FIT 2020 - Artificial Life
 
Blockchain - Una mirada técnica y aplicaciones
Blockchain - Una mirada técnica y aplicacionesBlockchain - Una mirada técnica y aplicaciones
Blockchain - Una mirada técnica y aplicaciones
 
Digital forensics SIFT como herramienta
Digital forensics  SIFT como herramientaDigital forensics  SIFT como herramienta
Digital forensics SIFT como herramienta
 
Machine Learning: ¿Caminos? A donde vamos, no necesitamos caminos
Machine Learning: ¿Caminos? A donde vamos, no necesitamos caminosMachine Learning: ¿Caminos? A donde vamos, no necesitamos caminos
Machine Learning: ¿Caminos? A donde vamos, no necesitamos caminos
 
Herramientas de Pen Testing de redes y aplicaciones web
Herramientas de Pen Testing de redes y aplicaciones webHerramientas de Pen Testing de redes y aplicaciones web
Herramientas de Pen Testing de redes y aplicaciones web
 
El "Internet de Todo" (IoT)
El "Internet de Todo" (IoT)El "Internet de Todo" (IoT)
El "Internet de Todo" (IoT)
 
BPMS vs. workflow
BPMS vs. workflowBPMS vs. workflow
BPMS vs. workflow
 
El “Internet de Todo” (IoT) y lo que lo hace posible
El “Internet de Todo” (IoT) y lo que lo hace posible El “Internet de Todo” (IoT) y lo que lo hace posible
El “Internet de Todo” (IoT) y lo que lo hace posible
 
MGTI: Tendencias de Tecnología 2015 - Campus Tegucigalpa
MGTI: Tendencias de Tecnología 2015 - Campus TegucigalpaMGTI: Tendencias de Tecnología 2015 - Campus Tegucigalpa
MGTI: Tendencias de Tecnología 2015 - Campus Tegucigalpa
 
MGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La Ceiba
MGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La CeibaMGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La Ceiba
MGTI: Tendencias de Tecnología 2015 y su aplicación en el país Campus La Ceiba
 
Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...
Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...
Introducción a la Teoría de Juegos con aplicación a las Ciencias de la Comput...
 
The Hour of Code - Presentación Diciembre 2014
The Hour of Code - Presentación Diciembre 2014The Hour of Code - Presentación Diciembre 2014
The Hour of Code - Presentación Diciembre 2014
 
Unitec virtualización
Unitec   virtualizaciónUnitec   virtualización
Unitec virtualización
 
Criptografía para las masas
Criptografía para las masasCriptografía para las masas
Criptografía para las masas
 
Más sobre el Algoritmo de Peterson
Más sobre el Algoritmo de PetersonMás sobre el Algoritmo de Peterson
Más sobre el Algoritmo de Peterson
 
Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...
Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...
Análisis de ataques a un sistema de correo electrónico por medio de mensajes ...
 
Apuntes de clase Sistemas Operativos: Administración de Memoria
Apuntes de clase Sistemas Operativos: Administración de MemoriaApuntes de clase Sistemas Operativos: Administración de Memoria
Apuntes de clase Sistemas Operativos: Administración de Memoria
 
Memoria virtual
Memoria virtualMemoria virtual
Memoria virtual
 
Deadlocks
DeadlocksDeadlocks
Deadlocks
 

Ejemplo básico de CUP

  • 1. Universidad Tecnológica Centroamericana Ingeniería de Sistemas Compiladores I Ing. Egdares Futch H. Ejemplo básico de uso de CUP import java_cup.runtime.*; parser code {: /* Manejo de errores, antes de entrar al modo de recuperacion de errores, por medio del token de error */ public void syntax_error(Symbol s) { report_error("Error de sintaxis", null); } public void unrecovered_syntax_error(Symbol s) throws java.lang.Exception { report_fatal_error("No pude reparar el input, lo siento", null); } :}; init with {: scanner.init(); :}; scan with {: return scanner.next_token(); :}; terminal SEMI, PLUS, MINUS, TIMES, DIVIDE, MOD; terminal UMINUS, LPAREN, RPAREN; terminal Integer NUMBER; non terminal expr_list, expr_part; non terminal Integer expr; precedence left PLUS, MINUS; precedence left TIMES, DIVIDE, MOD; precedence left UMINUS; /* Start symbol */ start with expr_list; expr_list ::= expr_list expr_part | expr_part; expr_part ::= expr:e {: System.out.println("= " + e); :} SEMI ; expr ::= expr:e1 PLUS expr:e2 {: RESULT = new Integer(e1.intValue() + e2.intValue()); :} | expr:e1 MINUS expr:e2 {: RESULT = new Integer(e1.intValue() - e2.intValue()); :} | expr:e1 TIMES expr:e2 {: RESULT = new Integer(e1.intValue() * e2.intValue()); :} | expr:e1 DIVIDE expr:e2 {: RESULT = new Integer(e1.intValue() / e2.intValue()); :} | expr:e1 MOD expr:e2 {: RESULT = new Integer(e1.intValue() % e2.intValue()); :} | NUMBER:n {: RESULT = n; :} | MINUS expr:e {: RESULT = new Integer(0 - e.intValue()); :} %prec UMINUS | LPAREN expr:e RPAREN {: RESULT = e; :} | error SEMI ;