Resumen Sintaxis y semantica de lenguajes
• Para pasarlas a derecha se usa: X -> Xa | b
=>
X -> bZ
Z -> aZ | epsilon
• Conjunto Primero: Todos los caracteres que puedan llegara ser el primero de un noterminal.
Ej:
S -> ABc
A -> a | epsilon
B -> b | epsilon
>> porque A produce epsilon (entonces A puede no estar)Primero (S) = Primero (ABc) = {a} U Primero (Bc) = {a} U {b} U Primero (c) = {a,b,c}
(cuando hay un epsilon, se sigue uniendo el conjunto con el del próximo noterminal)
...salvo el caso:Primero(A) = {a,epsilon} porque no hay que "bajar de nivel"
(Si tenés epsilonj, el primero es j. Pero si tenes epsilon, el primero es epsilon)
• Conjunto Siguiente: Todos los caracteres que estáninmediatamente después del noterminal.
Ej:
S -> aSe | B
B -> aSe
C -> cCB | d
Siguiente (S) = Siguiente (B) = {e}
Siguiente (C) = Primero (B) = {a}
...caso raro:
T -> BsdFTg | jTojoSaA
A ->sarasAsasa >> porque está a lo último de las producciones de T
Siguiente(A) = {s, Siguiente (T)} = {s,g,o}
(es todo lo que dice el libro :|)
• Conjunto Predice: Si epsilon está en Primero =>(Primero - {epsilon}) U Siguiente
Si no está => Primero
• BNF ALGOL:
::= | |
::= a | b | c | d …
::= 0 | 1 | 2 | 3 …
• BNF Pascal y MICRO:
::= {}
::= |
…
(o sea, agrega eloperador { } que es la clausura de Kleene)
• BNF ANSI C:
- noterminales en cursiva en vez de entre
- : en vez de ::=
- no existe el | o sea la disyunción, cada producción se escribe en unalínea distinta
- uno de: prod1 prod2 prod3 prod4 … permite escribir varias lineas en una, separadas por espacios
- los terminales van en negrita
- existe el subíndice op que indica que un símbolo esopcional
- se “desagrega” el operador { } => las reglas recursivas se escriben como en el de ALGOL
• ER’s: Potencia: a2 aa
Unión: +
Clausura de Kleen: *
Clausura positiva: +
• Meta-ER’s:...
Regístrate para leer el documento completo.