Académique Documents
Professionnel Documents
Culture Documents
• Sintaxis
– Como se ve un programa
– Representación textual o estructura
– Es posible una definición matemática precisa
• Semántica
– Cuál es el significado de un programa
– Es más difícil dar una definición matemática
left_paren_op
-
num(123.3)
plus_op
( )
num(23.6)
right_paren_op
123.3 23.6
+
<expr>
<expr>
<expr>
num
<expr>
num *
<expr>
<expr>
num * ( )
<expr>
<expr>
num * ( )
<expr> <op> <expr>
<expr>
<expr>
num * ( )
<expr> <op> <expr>
num
Oscar Bonilla 23 Universidad Galileo
Ejemplo de Arbol de Parseo
<op> ⇒ ‘+’
<expr>
<expr>
num * ( )
<expr> <op> <expr>
num +
Oscar Bonilla 24 Universidad Galileo
Ejemplo de Arbol de Parseo
<expr> ⇒ num
<expr>
<expr>
num * ( )
<expr> <op> <expr>
num + num
Oscar Bonilla 25 Universidad Galileo
Ejemplo de Arbol de Parseo
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr>
<expr>
num * ( )
<expr> <op> <expr>
num + num
Oscar Bonilla 26 Universidad Galileo
Resumen
• Overview del análisis léxico
• Qué es análisis sintáctico?
• Gramáticas libres de contexto
• Derivaciones y Arboles de Parseo
• Top-down vs. Bottom-up Parsing
• Gramáticas Ambiguas
• Implementando un Parser
• Rightmost derivation
– Encontramos el no-terminal de más a la derecha y le
aplicamos una producción
<expr>
( )
<expr>
( )
<expr> <op> <expr>
<expr>
( )
<expr> <op> <expr>
num
Oscar Bonilla 33 Universidad Galileo
Ejemplo de Right-Derivation
Producción: <op> ⇒ ‘+’
String: <expr> <op> ‘(‘ <expr> ‘+’ num ‘)’
<expr>
<expr>
( )
<expr> <op> <expr>
+ num
Oscar Bonilla 34 Universidad Galileo
Ejemplo de Right-Derivation
Producción: <expr> ⇒ num
String: <expr> <op> ‘(‘ num ‘+’ num ‘)’
<expr>
<expr>
( )
<expr> <op> <expr>
num + num
Oscar Bonilla 35 Universidad Galileo
Ejemplo de Right-Derivation
Producción: <op> ⇒ ‘*’
String: <expr> ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr>
<expr>
* ( )
<expr> <op> <expr>
num + num
Oscar Bonilla 36 Universidad Galileo
Ejemplo de Right-Derivation
Producción: <expr> ⇒ num
String: num ‘*’ ‘(‘ num ‘+’ num ‘)’
<expr>
<expr>
num * ( )
<expr> <op> <expr>
num + num
Oscar Bonilla 37 Universidad Galileo
Ejemplo de Right-Derivation
<expr>
num * ( )
<expr> <op> <expr>
num + num
Oscar Bonilla 38 Universidad Galileo
Ejemplo de Right-Derivation
⇒ <expr>
⇒ <expr> <op> <expr>
⇒ <expr> <op> ‘(‘ <expr> ‘)’
⇒ <expr> <op> ‘(‘ <expr> <op> <expr> ‘)’
⇒ <expr> <op> ‘(‘ <expr> <op> num ‘)’
⇒ <expr> <op> ‘(‘ <expr> ‘+’ num ‘)’’
⇒ <expr> <op> ‘(‘ num ‘+’ num ‘)’
⇒ <expr> ‘*’ ‘(‘ num ‘+’ num ‘)’
⇒ num ‘*’ ‘(‘ num ‘+’ num ‘)’
• Token Stream:
num ‘+’ num ‘*’ num
num
num +
num
num *
num * num
num * num
String: <expr>
<expr>
num
num
num
num +
num + num
num + num
num + num
num + num
<expr> <term>
+
<term> <term> <unit>
*
<unit> <unit>
num
num num
Oscar Bonilla 74 Universidad Galileo
Primer ejemplo en la nueva gramática
<expr>
num ‘*’ ‘(‘ num ‘+’ num ‘)’
<term>
<term> <unit>
*
<unit> ( <expr> )
num <expr> <term>
+
<term> <unit>
<unit> num
num
Oscar Bonilla 75 Universidad Galileo
Pregunta: Es esta gramática
ambigua?