Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas...

29
Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma Normal de Backüs) (En construcción) Notas Materia LENGUAJES DE PROGRAMACION María de Guadalupe Cota Ortiz

Transcript of Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas...

Page 1: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Especificaciones de Gramáticas, Análisis Sintácticoy Notación BNF

(Forma Normal de Backüs)

(En construcción)Notas Materia LENGUAJES DE PROGRAMACION

María de Guadalupe Cota Ortiz

Page 2: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

<S> ::= ( <S> ) <S>

<S> ::= a

Page 3: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

<S> ::= ( <S> ) <S>

<S> ::= a Terminales

Page 4: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

<S> ::= ( <S> ) <S>

<S> ::= a

No-terminales

Page 5: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

<S> ::= ( <S> ) <S>

<S> ::= a

Símbolo inicial: <S>

Page 6: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

<S> ::= ( <S> ) <S>

<S> ::= a Regla o Producción

Page 7: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

<expr> ::= <expr> <op> <expr><expr> ::= ( <expr> ) | <expr><expr> ::= - <expr><expr> ::= <num><op> ::= +<op> ::= *<num> ::= <dig> | <num><dig> ::= 0 | 1| 2| 3| 4| 5| 6| 7| 8| 9

Terminales:(,),-,+,*,0,1,2,3,4,5,6,7,8,9

Page 8: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

No Terminales:expr, op, num, dig

<expr> ::= <expr> <op> <expr><expr> ::= ( <expr> ) | <expr><expr> ::= - <expr><expr> ::= <num><op> ::= +<op> ::= *<num> ::= <dig> | <num><dig> ::= 0 | 1| 2| 3| 4| 5| 6| 7| 8| 9

Page 9: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

Símbolo inicial:expr

<expr> ::= <expr> <op> <expr><expr> ::= ( <expr> ) | <expr><expr> ::= - <expr><expr> ::= <num><op> ::= +<op> ::= *<num> ::= <dig> | <num><dig> ::= 0 | 1| 2| 3| 4| 5| 6| 7| 8| 9

Page 10: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Gramática Libre de Contexto

<expr> ::= <expr> <op> <expr><expr> ::= ( <expr> ) | <expr><expr> ::= - <expr><expr> ::= <num><op> ::= +<op> ::= *<num> ::= <dig> | <num><dig> ::= 0 | 1| 2| 3| 4| 5| 6| 7| 8| 9

Producciones

Page 11: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Recordatorio

(Recorridos)

Recorrido Pre-Orden (Derivación izquierda)

1

2

3 4

5

6

7

8 9

INICIO FIN

Recorrido: 1,2,3,4,5,6,7,8,9

Page 12: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Recordatorio

(Recorridos)

Recorrido POS-Orden-Inverso (Derivaciónderecha)

1

2

3 4

5

6

7

8 9

INICIOFIN

Recorrido: 1,6,7,9,8,2,4,5,3

Page 13: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Arbol de ParseoDerivación por la izquierda

( )*

<expr>

<expr><expr>

<expr>

<op>

<num>

<num>

<dig>

<dig>1

3

+ <num>

<expr> <expr><op>

<dig>

5

<expr> ::= <num>Cadena: 1 ‘*’ ‘(‘ 3 ‘+’ 5 ‘)’

Page 14: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

( )

<expr>

<expr><expr>

<expr>

<op>

Producción: <expr> ⇒ numCadena: 1 ‘*’ ‘(‘ 3 ‘+’ 5 ‘)’

+

<expr> <expr><op>

<num>

<dig>

5

<num>

<dig>

3

*<num>

<dig>

1

Arbol de ParseoDerivación por la derecha

Page 15: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Parser ‘Top-down’ (LL)

⇒ <expr> ⇒ <expr> <op> <expr>⇒ <num> <op> <expr>⇒ <dig> <op> <expr>⇒ ‘1’ <op> <expr>⇒ ‘1’ ‘*’ <expr>⇒ ‘1’ ‘*’ ‘(‘ <expr> ‘)’⇒ ‘1’ ‘*’ ‘(‘ <expr> <op> <expr> ‘)’⇒ ‘1’ ‘*’ ‘(‘ <num> <op> <expr> ‘)’⇒ ‘1’ ‘*’ ‘(‘ <dig> <op> <expr> ‘)’⇒ ‘1’ ‘*’ ‘(‘ ‘3’ <op> <expr> ‘)’⇒ ‘1’ ‘*’ ‘(‘ ‘3’ ‘+’ <expr> ‘)’⇒ ‘1’ ‘*’ ‘(‘ ‘3’ ‘+’ <num> ‘)’⇒ ‘1’ ‘*’ ‘(‘ ‘3’ ‘+’ <dig> ‘)’⇒ ‘1’ ‘*’ ‘(‘ ‘3’ ‘+’ <5> ‘)’

Page 16: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Parser ‘Bottom-Up’ (LR)

⇒ <expr> ⇒ <expr> <op> <expr>⇒ <expr> <op> ‘(‘ <expr> ‘)’⇒ <expr> <op> ‘(‘ <expr> <op> <expr> ‘)’⇒ <expr> <op> ‘(‘ <expr> <op> <num> ‘)’⇒ <expr> <op> ‘(‘ <expr> <op> <dig> ‘)’⇒ <expr> <op> ‘(‘ <expr> ‘+’ <dig> ‘)’’⇒ <expr> <op> ‘(‘ <num> ‘+’ <dig> ‘)’⇒ <expr> <op> ‘(‘ <dig> ‘+’ <dig> ‘)’⇒ <expr> ‘*’ ‘(‘ <dig> ‘+’ <dig> ‘)’⇒ <num> ‘*’ ‘(‘ <dig> ‘+’ <dig> ‘)’⇒ <dig> ‘*’ ‘(‘ <dig> ‘+’ <dig> ‘)’

(Se invierte el orden de evaluación)

Page 17: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Parser ‘Bottom-Up’ (LR)

⇒ <dig> ‘*’ ‘(‘ <dig> ‘+’ <dig> ‘)’⇒ <num> ‘*’ ‘(‘ <dig> ‘+’ <dig> ‘)’⇒ <expr> ‘*’ ‘(‘ <dig> ‘+’ <dig> ‘)’⇒ <expr> <op> ‘(‘ <dig> ‘+’ <dig> ‘)’⇒ <expr> <op> ‘(‘ <num> ‘+’ <dig> ‘)’⇒ <expr> <op> ‘(‘ <expr> ‘+’ <dig> ‘)’’⇒ <expr> <op> ‘(‘ <expr> <op> <dig> ‘)’⇒ <expr> <op> ‘(‘ <expr> <op> <num> ‘)’⇒ <expr> <op> ‘(‘ <expr> <op> <expr> ‘)’⇒ <expr> <op> ‘(‘ <expr> ‘)’⇒ <expr> <op> <expr>⇒ <expr>

(Quedando de esta forma)

Page 18: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ambigüedad

num num

* num

<expr>

<expr> <expr>

<expr> <expr>

<op>

+

<op>

num num

+num

<expr>

<expr><expr>

<expr> <expr>

<op>

*

<op>

12 + (5 * 8) = 52 (12 + 5) * 8 = 136

Dos o más derivaciones distintas para una misma expresión

Page 19: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo de Arbol de Derivación<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’

for

); <expr_inddec>; <condicion>( =<tipo> <variable> <valor>

for(int ind = 0; ind < 10; ind++)

Page 20: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’

); <expr_inddec>( <tipo> = <condicion><variable> <valor> ;

for

int

for(int ind = 0; ind < 10; ind++)

Page 21: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’

); <expr_inddec>( <tipo> = <condicion><variable> <valor> ;

for

int

<carácter>

for(int ind = 0; ind < 10; ind++)

Page 22: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’

); <expr_inddec>( <tipo> = <condicion><variable> <valor> ;

for

int

<carácter>

ind

for(int ind = 0; ind < 10; ind++)

Page 23: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’<valor>::= {<digito>} +<digito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

); <expr_inddec>( <tipo> = <condicion><variable> <valor> ;

for

int

<carácter> <digito>

ind 0

for(int ind = 0; ind < 10; ind++)

Page 24: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’<valor>::= {<digito>} +<digito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<condicion>::= <variable><operador><valor>

); <expr_inddec>( <tipo> = <condicion><variable> <valor>

int

;

for

<carácter> <digito><variable> <valor><operador>

ind 0

for(int ind = 0; ind < 10; ind++)

Page 25: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’<valor>::= {<digito>} +<digito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<condicion>::= <variable><operador><valor>

for

); <expr_inddec>( <tipo> = <condicion><variable> <valor>

int

;

<valor><operador><variable><carácter> <digito>

ind 0 ind

for(int ind = 0; ind < 10; ind++)

Page 26: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’<valor>::= {<digito>} +

for

<digito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<condicion>::= <variable><operador><valor><operador>::= ‘+’ | ‘-’ | ‘/’ | ‘*’ | ‘>’ | ‘>=‘ | ‘<‘ | ‘<=‘ | ‘=‘ | ‘==‘ | ‘!‘

); <expr_inddec>( <tipo> = <condicion><variable> <valor>

int

;

<carácter> <digito><variable> <valor><operador>

ind 0 ind <

for(int ind = 0; ind < 10; ind++)

Page 27: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’<valor>::= {<digito>} +

for

<digito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<condicion>::= <variable><operador><valor><operador>::= ‘+’ | ‘-’ | ‘/’ | ‘*’ | ‘>’ | ‘>=‘ | ‘<‘ | ‘<=‘ | ‘=‘ | ‘==‘ | ‘!‘

); <expr_inddec>( <tipo> = <condicion><variable> <valor>

int

;

<carácter> <digito><variable> <valor><operador>

ind 0 ind < 10

for(int ind = 0; ind < 10; ind++)

Page 28: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’<valor>::= {<digito>} +

for

<digito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<condicion>::= <variable><operador><valor><operador>::= ‘+’ | ‘-’ | ‘/’ | ‘*’ | ‘>’ | ‘>=‘ | ‘<‘ | ‘<=‘ | ‘=‘ | ‘==‘ | ‘!‘<expr_inddec>::= <variable> ‘++’ | ‘- -’

); <expr_inddec>( <tipo> = <condicion><variable> <valor>

int

;

<carácter> <digito><variable> <variable><valor><operador>

Indind 0 ind < 10

for(int ind = 0; ind < 10; ind++)

Page 29: Especificaciones de Gramáticas, Análisis Sintáctico y ...mat.uson.mx/lcota/PPT/Gramaticas (2).pdf · Especificaciones de Gramáticas, Análisis Sintáctico y Notación BNF (Forma

Ejemplo<for>::= ‘(‘[‘,’ {<tipo> <variable> ‘=‘ <valor>}]’;’[‘,’{ <condicion>}]’;’ [‘,’{<expr_incdec>}‘)’<tipo>::= ‘int’ | ‘char’ | ‘float’ | ‘double’ | ‘long’ | ‘short’ | ‘void’<variable>::= {<carácter>}+

<caracter>::= ‘a’ | ‘b’ |.... | ‘z’ | ‘A’ |.... | ‘Z’<valor>::= {<digito>} +

for

<digito>::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9<condicion>::= <variable><operador><valor><operador>::= ‘+’ | ‘-’ | ‘/’ | ‘*’ | ‘>’ | ‘>=‘ | ‘<‘ | ‘<=‘ | ‘=‘ | ‘==‘ | ‘!‘<expr_inddec>::= <variable> ‘++’ | ‘- -’

); <expr_inddec>( <tipo> = <condicion><variable> <valor>

int

;

<variable> ++<carácter> <digito><variable> <valor><operador>

Indind 0 ind < 10

for(int ind = 0; ind < 10; ind++) !!! Cadena aceptada !!!