📜  语法分析中的第一组

📅  最后修改于: 2021-06-28 07:24:16             🧑  作者: Mango

语法符号X的FIRST(X)是从X派生的字符串开始的终端集合。

计算FIRST集的规则:

  1. 如果x是终端,则FIRST(x)= {‘x’}
  2. 如果x->Є是生产规则,则将add添加到FIRST(x)。
  3. 如果X-> Y1 Y2 Y3….Yn是一个产品,
    1. FIRST(X)= FIRST(Y1)
    2. 如果FIRST(Y1)包含Є,则FIRST(X)= {FIRST(Y1)–Є} U {FIRST(Y2)}
    3. 如果FIRST(Yi)对所有i = 1到n都包含,,则将add添加到FIRST(X)。

范例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 }

范例2:

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

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

笔记:

  1. 上面使用的语法是上下文无关语法(CFG)。可以使用CFG指定大多数编程语言的语法。
  2. CFG的形式为A-> B,其中A是单个非终端,而B可以是一组语法符号(即终端和非终端)

在下一篇文章“编译器设计中的关注集合”中,我们将看到如何计算关注集合。