Hemos discutido los siguientes temas sobre el análisis de sintaxis.
Introducción al análisis de sintaxis
¿Por qué PRIMERO y SEGUIR?
FIRST Conjunto en análisis de sintaxis
En esta publicación, se analiza el conjunto FOLLOW.
Follow(X) para ser el conjunto de terminales que pueden aparecer inmediatamente a la derecha de Non-Terminal X en alguna forma de oración.
Ejemplo:
S ->Aa | Ac A ->b S S / \ / \ A a A C | | b b Here, FOLLOW (A) = {a, c}
Reglas para calcular SEGUIR conjunto:
1) FOLLOW(S) = { $ } // where S is the starting Non-Terminal 2) If A -> pBq is a production, where p, B and q are any grammar symbols, then everything in FIRST(q) except Є is in FOLLOW(B). 3) If A->pB is a production, then everything in FOLLOW(A) is in FOLLOW(B). 4) If A->pBq is a production and FIRST(q) contains Є, then FOLLOW(B) contains { FIRST(q) – Є } U FOLLOW(A)
Ejemplo 1:
Production Rules: E -> TE’ E’ -> +T E’|Є T -> F T’ T’ -> *F T’ | Є F -> (E) | id FIRST set FIRST(E) = FIRST(T) = { ( , id } FIRST(E’) = { +, Є } FIRST(T) = FIRST(F) = { ( , id } FIRST(T’) = { *, Є } FIRST(F) = { ( , id } FOLLOW Set FOLLOW(E) = { $ , ) } // Note ')' is there because of 5th rule FOLLOW(E’) = FOLLOW(E) = { $, ) } // See 1st production rule FOLLOW(T) = { FIRST(E’) – Є } U FOLLOW(E’) U FOLLOW(E) = { + , $ , ) } FOLLOW(T’) = FOLLOW(T) = { + , $ , ) } FOLLOW(F) = { FIRST(T’) – Є } U FOLLOW(T’) U FOLLOW(T) = { *, +, $, ) }
Ejemplo 2:
Production Rules: S -> aBDh B -> cC C -> bC | Є D -> EF E -> g | Є F -> f | Є FIRST set FIRST(S) = { a } FIRST(B) = { c } FIRST(C) = { b , Є } FIRST(D) = FIRST(E) U FIRST(F) = { g, f, Є } FIRST(E) = { g , Є } FIRST(F) = { f , Є } FOLLOW Set FOLLOW(S) = { $ } FOLLOW(B) = { FIRST(D) – Є } U FIRST(h) = { g , f , h } FOLLOW(C) = FOLLOW(B) = { g , f , h } FOLLOW(D) = FIRST(h) = { h } FOLLOW(E) = { FIRST(F) – Є } U FOLLOW(D) = { f , h } FOLLOW(F) = FOLLOW(D) = { h }
Ejemplo 3:
Production Rules: S -> ACB|Cbb|Ba A -> da|BC B-> g|Є C-> h| Є FIRST set FIRST(S) = FIRST(A) U FIRST(B) U FIRST(C) = { d, g, h, Є, b, a} FIRST(A) = { d } U {FIRST(B)-Є} U FIRST(C) = { d, g, h, Є } FIRST(B) = { g, Є } FIRST(C) = { h, Є } FOLLOW Set FOLLOW(S) = { $ } FOLLOW(A) = { h, g, $ } FOLLOW(B) = { a, $, h, g } FOLLOW(C) = { b, g, $, h }
Nota :
- Є como SEGUIR no significa nada (Є es una string vacía).
- $se llama marcador final, que representa el final de la string de entrada, por lo tanto, se usa durante el análisis para indicar que la string de entrada se ha procesado por completo.
- La gramática utilizada anteriormente es la gramática libre de contexto (CFG). La sintaxis de un lenguaje de programación se puede especificar usando CFG.
- CFG tiene la forma A -> B, donde A es un solo No-Terminal, y B puede ser un conjunto de símbolos gramaticales (es decir, Terminales y No-Terminales)
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA