FIRST Conjunto en análisis de sintaxis – Part 1

FIRST(X) para un símbolo gramatical X es el conjunto de terminales que comienzan las strings derivables de X. 

Reglas para calcular el PRIMER conjunto: 

  1. Si x es un terminal, entonces PRIMERO(x) = { ‘x’ }
  2. Si x-> Є, es una regla de producción, agregue Є a FIRST(x).
  3. Si X->Y1 Y2 Y3….Yn es una producción, 
    1. PRIMERO(X) = PRIMERO(Y1)
    2. Si PRIMERO(Y1) contiene Є entonces PRIMERO(X) = { PRIMERO(Y1) – Є } U { PRIMERO(Y2) }
    3. Si PRIMERO (Yi) contiene Є para todo i = 1 a n, entonces agregue Є a PRIMERO (X).

Ejemplo 1: 

Production Rules of Grammar
E  -> TE’
E’ -> +T E’|Є
T  -> F T’
T’ -> *F T’ | Є
F  -> (E) | id

FIRST sets
FIRST(E) = FIRST(T) = { ( , id }
FIRST(E’) = { +, Є }
FIRST(T) = FIRST(F) = { ( , id }
FIRST(T’) = { *, Є }
FIRST(F) = { ( , id }

Ejemplo 2: 

Production Rules of Grammar
S -> ACB | Cbb | Ba
A -> da | BC
B -> g | Є
C -> h | Є

FIRST sets
FIRST(S) = FIRST(ACB) U FIRST(Cbb) U FIRST(Ba)
         = { d, g, h, b, a, Є}
FIRST(A) = { d } U FIRST(BC) 
         = { d, g, h, Є }
FIRST(B) = { g , Є }
FIRST(C) = { h , Є }

Notas: 

  1. La gramática utilizada anteriormente es la gramática libre de contexto (CFG). La sintaxis de la mayor parte del lenguaje de programación se puede especificar usando CFG.
  2. 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)

En el siguiente artículo, «Conjuntos de SEGUIMIENTO en el diseño del compilador», veremos cómo calcular los conjuntos de seguimiento. 

Este artículo ha sido compilado por Vaibhav Bajpai . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *