Compilador de una pasada Compiladores 2015
-
Upload
independent -
Category
Documents
-
view
3 -
download
0
Transcript of Compilador de una pasada Compiladores 2015
Gramática
• Definición de reglas para representar las
expresiones de los lenguajes.
• Especificación rigurosa y explicita de
estructura de un lenguaje.
• Modelo de estructuras recursivas.
Tipos de gramática
• Existen varios tipos de Gramáticas, las
que mas se usan en computación son las
gramáticas generativas, definidas por
Noam Chomsky.
• Las Gramáticas Generativas constan de la
siguientes tuplas de elementos:
• G = (V, T, P, S) • V: conjunto finito de variables (símbolos no terminales/categorías sintácticas)
• T: conjunto finito de símbolos terminales (alfabeto terminal o alfabeto de símbolos)
• P: conjunto finito de producciones o reglas (definición recursiva del lenguaje)
• S: símbolo inicial
Definición de la sintaxis
• Gramática Independiente del Contexto,
cuenta con cuatro componentes:
• Un conjunto de componentes léxicos,
denominados símbolos terminales.
• Un conjunto de símbolos no terminales.
• Un conjunto de producciones, en el que
cada producción consta de un no terminal,
llamado lado izquierdo de la producción..(va)
Definición de la sintaxis (cont…)
• (viene)..una flecha y una secuencia de
componentes léxicos y no terminales, o
ambos, llamado lado derecho de la
producción.
• La denominación de uno de los no
terminales como símbolo inicial.
Definición de la sintaxis (cont…)
• Por ejemplo, una instrucción if-else en
java.
• Se puede expresar como:
• Los elementos léxicos como if y los
paréntesis se llaman terminales. Las
variables como expr e instr se llaman no
terminales.
Producción
Definición de la sintaxis (cont…)
• Patrón. Es una expresión regular.
• Token. Consiste en dos componentes,
nombre del token y un valor de atributo.
• Lexema. Es cada secuencia de
caracteres concreta que encaja con un
patrón. Ejem: «5», «23», «19» encajan
con el patrón (‘0’|’1’|’2’|…|9)
Definición de la sintaxis (cont…)
TOKEN LEXEMA PATRÓN
else else Caracteres: e, l, s, e
if if Caracteres: i, f
Relación <= < , >, =, <=, >=, <>
Identificador Pi, contador, D2 [a-zA-Z] ([a-zA-Z] | [0-9])*
Numero 3.1567, 0 [0-9]+ |.[0-9]+
Literal ‘’valor:’’ Cualquier carácter entre ‘’’’
Definición de la sintaxis (cont…)
• ¿Quién es token y quién lexema?
• ¿Qué puede decir de los tokens y
atributos?
Definición de la sintaxis (cont…)
• Ejemplo: • lista lista + dígito
• lista lista - dígito
• lista dígito
• dígito 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
• ¿Cuál será la gramática para una función?
Definición de la sintaxis (cont…)
• Notación BNF. Forma de escribir las
producciones.
• Los símbolos terminales entre comillas, y
los no terminales entre <>.
• El nexo para la producción es ::=
• La agrupación de reglas mediante |
• Cero o una vez mediante [ ]
• Cero o más veces mediante { }
Ejemplo BNF
• Gramática para representar números con
decimales.
• <numero> ::= <entPos>|<entPos>‘.’< entPos>
• <entPos>::= <dígito>|<dígito><entPos>
• <digito> ::= ‘0’|‘1’|‘2’|‘3’|‘4’|’5’|‘6’|‘7’|‘8’|‘9’
Ejemplo E-BNF
• Tomando el ejemplo anterior:
• <numero>::= <dígito>+ | (‘.’ <dígito>+) ?
• <digito> ::= ‘0’|‘1’|‘2’|‘3’|‘4’|’5’|‘6’|‘7’|‘8’|‘9’
• <numero> ::= <entPos>|<entPos>‘.’< entPos>
• <entPos>::= <dígito>|<dígito><entPos>
• <digito> ::= ‘0’|‘1’|‘2’|‘3’|‘4’|’5’|‘6’|‘7’|‘8’|‘9’