Compilador de una pasada Compiladores 2015

16
Compilador de una pasada By Adolfo Jiménez Ch. Compiladores 2015

Transcript of Compilador de una pasada Compiladores 2015

Compilador de una pasada

By Adolfo Jiménez Ch.

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’

E-BNF (extendida)

• Se agrega lo siguiente:

• ? Opcional

• * cero o n veces

• + una o n veces

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’

• …