Compiladores e Intérpretes

Documentos relacionados
Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2015

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

Los tipos de datos primitivos

Sintaxis de C Ing. Jose Maria Sola Dr. Oscar Ricardo Bruno

Elementos léxicos del lenguaje de programación Java

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Comprender las diferencias entre tipos de datos primitivos similares, y aprender a elegir el tipo más conveniente en cada caso.

abril de 2017 Desarrollo de aplicaciones en Java Tipos de datos primitivos Tipos de datos Elementos de aplicaciones simples

Introducción a los compiladores

Estructura de un programa en Java. Tipos de datos básicos. class miprimerprograma{ // comentario, no es parte del programa

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Lección 2 Introducción al lenguaje C

Tema 2: Análisis léxico

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Tema: Análisis Sintáctico

PROGRAMACIÓN ORIENTADA A OBJETOS (L40629) Sabino Miranda-Jiménez

Sebastián García Galán

Estructura de datos y Programación

Compiladores e Intérpretes Análisis Semántico IV

El lenguaje de programación JKL

Tema 4. Control de flujo. Programación Programación - Tema 4: Control de Flujo

Procesamiento de Lenguajes (PL) Curso 2015/2016. Práctica 5: traductor a código m2r

Características de JavaScript

Estructura de Datos Unidad 1: Repaso del Lenguaje Java

Instituto Tecnológico de Celaya

Construcciones del Lenguaje Java

Elementos de un programa en C

Tema 2.- Objetos y mensajes

Principios de Computadoras II

Elementos léxicos del lenguaje de programación C

Introducción a Java (II) Dr. (c) Noé Alejandro Castro Sánchez

Programación 1 Tema 2. Lenguaje de programación y ejecución de un programa

Tema 2: Análisis léxico

Lección 2: Creando una Aplicación en Java. 1. Estructura del archivo de una clase. 3. Definiendo clases fundamentos

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Sintaxis básica, variables y 7pos

Qué es Java? Un lenguaje de programación Un entorno de desarrollo Un entorno de aplicación Un entorno de despliegue Es similar en sintaxis de C + +.

Desarrollo de lenguajes y Compiladores [MII-771] Capítulo 1: Lenguajes y Gramáticas Formales

ANÁLISIS LÉXICO Ing. Ronald Rentería Ayquipa

Componentes Básicos. InCo. InCo Componentes Básicos 1 / 28

Programación en C. Algoritmo y Estructura de Datos. Ing. M. Laura López. Programación en C

PRINCIPIOS DE PROGRAMACIÓN. Mtro. en Ingeniería de Software. Especialidad en e-commerce Ismael Jiménez Hernández

Examen Teórico Convocatoria de Junio de 2012

Tema: Análisis Sintáctico

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

Compiladores: Análisis Léxico. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Fundamentos PHP. El término puntuación nos referimos a la sintaxis usada en PHP para la terminación de una línea de código (;)

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 2.

Procesamiento de Lenguajes (PL) Curso 2014/2015. Práctica 1: analizador descendente recursivo

Tema 2. El lenguaje de programación Java (Parte 1)

UNIDAD 2 Descripción de un programa

UNIVERSIDAD DE CÓRDOBA ESCUELA POLITÉCNICA SUPERIOR DEPARTAMENTO DE INFORMÁTICA Y ANÁLISIS NUMÉRICO

Sintaxis básica, variables y 7pos

Datos Elementales y formato de un programa en Java

Java. Introducción a la Programación Orientada a Objetos

Analizador De léxico. V A R i : I N T E G E R ; \n...

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Curso de Java Introducción a la Programación I

3.3 Conceptos Básicos del Lenguaje Java

PROGRAMACIÓN ORIENTADA A OBJETOS 10/02/2009. Examen de Java. Nombre: DNI: Titulación:

Tema 1 INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

Introducción a Java. Fernando Cerezal López. 24 Noviembre 2005

PHP: Lenguaje de programación

Programación orientada a objetos. Resumen de Temas Unidad 4: Sobrecarga

1. (1 punto) Dado el siguiente fragmento en Java:

Características de Lenguajes de Scripts

FUNDAMENTOS DE INFORMÁTICA

Centro Asociado Palma de Mallorca. Antonio Rivero Cuesta

Procesadores del Lenguaje Práctica 1: Ejemplo sencillo

Compiladores e Intérpretes Semántica de MiniJava Segundo Cuatrimestre de 2016

Curso de Java Introducción a la Programación II

Diseño de compiladores Recordando la clase anterior

Java para programadores

Estructuras de Datos Declaraciones Tipos de Datos

Programación Orientada a Objetos

FORMATO DEL FICHERO CON LA TABLA DE SÍMBOLOS

Compiladores e Intérpretes Análisis Léxico

Manual de referencia del lenguaje Micro-C

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4

Programación 1. Tema I. Conceptos y elementos básicos de Programación. Lección 2. Lenguaje de programación y ejecución de un programa

05 Análisis léxico I Compiladores - Profr. Edgardo Adrián Franco Martínez

Introducción a Java LSUB. 30 de enero de 2013 GSYC

JavaScript Básico. Elementos Básicos: Comentarios: Literales: Valores que puede tomar una variable o una constante.

VARIABLES, CONSTANTES Y EXPRESIONES ASIGNACIÓN. TIPOS ELEMENTALES. PRECEDENCIA DE LOS ESTRUCTURAS DE CONTROL. CONDICIONAL E

Tema: Análisis Semántico

Analizador Sintáctico RECURSIVO

Curso Informática Lección 3. Tipos de datos, constantes y variables

Sintaxis y Semántica. Un repaso

Tema: Autómatas de Estado Finitos

Tema 2: Programación basada en Objetos

CAPÍTULO IV: 4.1 Introducción a la. Programación Funcional

1. (0.5 puntos) Indicar y justificar claramente cuál es el valor final de los datos miembro x, y, z.

Procesadores de lenguajes Ingeniería Informática Especialidad de Computación Tercer curso, segundo cuatrimestre

JavaScript: Lenguaje de programación

3 Elementos básicos del lenguaje INTRODUCCIÓN.

Diseño de Compiladores I. Estructura General de un Compilador

Introducción a Java. Introducción a Java. Programación I

Transcripción:

Departamento de Cs. e Ingeniería de la Computación Universidad Nacional del Sur Compiladores e Intérpretes Proyecto N 1 Sintaxis de MiniJava Segundo Cuatrimestre de 2018 1. Introducción Este documento describe la sintaxis de MiniJava. Como se menciona en el documento de especicación del proyecto, MiniJava es un lenguaje que puede verse como una simplicación de Java, donde por una parte no se consideran elementos avanzados como Genericidad, Excepciones o Hilos, y por otra parte la estructura de su sintaxis es más estricta. En este documento, en primer lugar, se presentan los elementos léxicos correspondientes a la sintixis del lenguaje, donde en particular se identicarán las palabras reservadas, forma de los identicadores y literales del lenguaje. Luego se presentará la estructura sintáctica del lenguaje mediante su gramática; en esta última se podrán identicar especialmente aquellos elementos que alejan a MiniJava de Java. 2. Componentes Léxicos El primer paso para compilar un programa de MiniJava radica en convertir una entrada de caracteres en una entrada de tokens, donde cada token se corresponderá con un lexema de MiniJava. Los lexemas de MiniJava son palabras clave, nombres de tipos primitivos, literales, símbolos de puntuación, operadores e identicadores. Cada uno de estos elementos se describe en las siguientes secciones. 2.1. Espacios en Blanco Los espacios en blanco en MiniJava, al igual que en Java, simplemente hacen más fácil la lectura del programa por un humano y no son tokens. Un espacio en blanco es un espacio, tab o un salto de línea. 2.2. Palabras Clave MiniJava tiene las siguientes palabras clave: class extends static dynamic String boolean char int public private void null if else while return this new true false Note que varias de las palabras clave originales de Java no están presentes en MiniJava. Un compilador de MiniJava podría considerar esas palabras clave no presentes como prohibidas en MiniJava. Por otra parte, observe que MiniJava tiene palabras clave que no están presentes en Java, como por ejemplo dynamic. Estas palabras, como se podrá ver en la Sección 3, ayudarán a dar una estructura más estricta a los programas MiniJava.

2.3. Identicadores En MiniJava hay dos tipos de identicadores: los identicadores de clases y los identicadores de métodos y variables. Un identicador de clase es una letra mayúscula seguida de cero o más letras (mayúsculas o minúsculas), dígitos y underscores. Un identicador de método y variable es una letra minúscula seguida de cero o más letras (mayúsculas o minúsculas), dígitos y underscores. En la Sección 3 los indenticadores de clase son denotados como idclase, mientras que los identicadores de metodos y variables son denotados como IdMetVar. Ningún identicador puede ser una palabra clave. 2.4. Comentarios Los comentarios son ignorados por el analizador léxico. MiniJava, al igual que Java, tiene dos estilos de comentarios: /* comentario */ Comentarios multi-línea: Todos los caracteres desde /* hasta */ son ignorados. // comentario Comentario simple: Todos los caracteres de desde // hasta el nal de la línea son ignorados. 2.5. Literales En MiniJava hay cinco tipos de literales, los cuales se corresponden a los tipos primitivos del lenguaje. 2.5.1. Literales Enteros Un literal entero es una secuencia de uno o más dígitos. El valor de un literal entero corresponde a su interpretación estándar en base 10. 2.5.2. Literales Caracteres Un literal caracter puede ser: `x' donde x es cualquier caracter excepto la barra invertida (\), el salto de línea, o la comilla simple ('). El valor del literal es el valor del caracter x. `\x' donde x es cualquier caracter excepto n o t. El valor del literal es el valor del caracter x. Por ejemplo el literal `\v' tiene valor v. `\t'. Es valor del literal es el valor del caracter Tab. `\n'. Es valor del literal es el valor del caracter salto de línea. 2.5.3. Literales String Un literal string se representa mediante una comilla doble (") seguida de una secuencia de caracteres y naliza con otra comilla doble ("). El valor del literal corresponde a la cadena de caracteres entre las comillas. Se restringe el uso del caracter de salto de línea y las comillas dobles como parte de la cadena de un literal string. 2.5.4. Literales Booleanos Los literales booleanos se representan mediante las palabras reservadas true y false. 2.5.5. Literal Nulo El literal nulo se representa mediante la plabra reservada null.

2.6. Puntuación MiniJava cuenta con los siguientes símbolos de puntuación, utilizados para estructurar los programas: ( ) { } ;,. [ ] 2.7. Operadores El lenguaje MiniJava cuenta con los siguientes operadores: > <! == >= <=!= + - * / && 2.8. Asignación Al igual que en Java, en MiniJava el simbolo de asignación es el =. 2.9. Otros caracteres error. Cualquier otra entrada que no comforme con las reglas anteriormente presentadas debe generar un 3. Gramática de MiniJava Cualquier programa MiniJava sintácticamente válido debe ser producto de la gramática que se presenta en esta sección. La gramática sigue la notación BNF-extendida, donde: terminal es un símbolo terminal <Class> ɛ X X + X? X Y X Y Z es un símbolo no terminal (además la primer letra es una mayúscula) representa la cadena vacía representa cero o más ocurrencias de X representa una o más ocurrencias de X representa cero o una ocurrencia de X representa una producción es una abreviación de X Y o X Z Producciones BNF-Extendida <Inicial> ::= <Clase> + <Clase> ::= class idclase <Herencia>? { <Miembro> } <Herencia> ::= extends idclase <Miembro> ::= <Atributo> <Ctor> <Metodo> <Atributo> ::= <Visibilidad> <Tipo> <ListaDecVars> ; <Metodo> ::= <FormaMetodo> <TipoMetodo> idmetvar <ArgsFormales> <Bloque> <Ctor> ::= idclase <ArgsFormales> <Bloque> <ArgsFormales> ::= ( <ListaArgsFormales>? ) <ListaArgsFormales> ::= <ArgFormal>

<ListaArgsFormales> ::= <ArgFormal>, <ListaArgsFormales> <ArgFormal> ::= <Tipo> idmetvar <FormaMetodo> ::= static dynamic <Visibilidad> ::= public private <TipoMetodo> ::= <Tipo> void <Tipo> ::= <TipoPrimitivo> <TipoReferencia> <TipoPrimitivo> ::= boolean char int <TipoReferencia> ::= idclase String <TipoPrimitivo> [] <ListaDecVars> ::= idmetvar <ListaDecVars> ::= idmetvar, <ListaDecVars> <Bloque> ::= { <Sentencia> } <Sentencia> ::= ; <Sentencia> ::= <Asignacion> ; <Sentencia> ::= <SentenciaLlamada> ; <Sentencia> ::= <Tipo> <ListaDecVars> ; <Sentencia> ::= if ( <Expresion> ) <Sentencia> <Sentencia> ::= if ( <Expresion> ) <Sentencia> else <Sentencia> <Sentencia> ::= while ( <Expresion> ) <Sentencia> <Sentencia> ::= <Bloque> <Sentencia> ::= return <Expresion>? ; <Asignacion> ::= <AccesoVar> = <Expresion> <Asignacion> ::= <AccesoThis> = <Expresion> <SentenciaLlamada> ::= ( <Primario> ) <Expresion> ::= <ExpOr> <ExpOr> ::= <ExpOr> <ExpAnd> <ExpAnd> <ExpAnd> ::= <ExpAnd> && <ExpIg> <ExpIg> <ExpIg> ::= <ExpIg> <OpIg> <ExpComp> <ExpComp> <ExpComp> ::= <ExpAd> <OpComp> <ExpAd> <ExpAd> <ExpAd> ::= <ExpAd> <OpAd> <ExpMul> <ExpMul> <ExpMul> ::= <ExpMul> <OpMul> <ExpUn> <ExpUn> <ExpUn> ::= <OpUn> <ExpUn> <Operando> <OpIg> ::= ==!= <OpComp> ::= < > <= >= <OpAd> ::= + - <OpUn> ::= + -! <OpMul> ::= * / <Operando> ::= <Literal> <Operando> ::= <Primario> <Literal> ::= null true false intliteral charliteral stringliteral <Primario> ::= <ExpresionParentizada> <Primario> ::= <AccesoThis>

<Primario> ::= <AccesoVar> <Primario> ::= <LlamadaMetodo> <Primario> ::= <LlamadaMetodoEstatico> <Primario> ::= <LlamadaCtor> <ExpresionParentizada> ::= ( <Expresion> ) <Encadenado>? <AccesoThis> ::= this <Encadenado>? <AccesoVar> ::= idmetvar <Encadenado>? <LlamadaMetodo> ::= idmetvar <ArgsActuales> <Encadenado>? <LlamadaMetodoEstatico> ::= idclase. <LlamadaMetodo> <Encadenado>? <LlamdaCtor> ::= new idclase <ArgsActuales> <Encadenado>? <LlamdaCtor> ::= new <TipoPrimitivo> [ <Expresion> ] <Encadenado>? <ArgsActuales> ::= ( <ListaExps>? ) <ListaExps> ::= <Expresion> <ListaExps> ::= <Expresion>, <ListaExps> <Encadenado> ::=. <LlamadaMetodoEncadenado> <Encadenado> ::=. <AccesoVarEncadenado> <Encadenado> ::= <AccesoArregloEncadenado> <LlamadaMetodoEncadenado> ::= idmetvar <ArgsActuales> <Encadenado>? <AccesoVarEncadenado> ::= idmetvar <Encadenado>? <AccesoArregloEncadenado> ::= [ <Expresion> ] <Encadenado>?