Form(GNF)如果产生式规则满足以下标准之一,则称上下文无关文法 (CFG) 属于 Greibach Normal :
只有开始符号可以生成ε。例如,如果 S 是起始符号,则 S → ε 在 GNF 中。
非终端可以生成终端。例如,如果 A 是非终结符而 a 是终结符,则 A → a 在 GNF 中。
一个非终结符可以生成一个终结符,后面跟着任意数量的非终结符。例如,S → aAS 在 GNF 中。
G1 = {S → aAB | aB, A → aA| a, B → bB | 乙}
G1 的产生式规则满足为 GNF 指定的规则,则文法 G1 在 GNF 中。
G2 = {S → aAB | aB, A → aA | ε, B → bB | ε}
G2 的产生式规则不满足为 GNF 指定的规则为
A → ε 和 B → ε 包含 ε(只有起始符号可以生成 ε)。
因此,语法 G2 不在 GNF 中。
步骤 1 - 将语法转换为 CNF。如果给定的语法不在 CNF 中,则将其转换为 CNF。
Step 2 - 如果语法由左递归组成,则消除它。如果上下文无关文法包含任何左递归,则将其消除。
Step 3 - 在语法中,将给定的产生式规则转换为 GNF 形式。如果语法中的任何产生式规则不是 GNF 形式,则对其进行转换。
例子
考虑上下文无关文法
S→SS|(S)|a
将此文法转换为 Greibach 范式。
解决方案
下面给出了将 CFG 转换为 GNF 的解释 -
Step 1: Converting to CNF: S->SS|XSY|a X->( Y->) Step 2: Remove left recursion from S->SS S->XSYP/aP P->SP/ε X->( Y->) Step 3: Remove null production P->ε S->XSYP/aP P->SP/S X->( Y->) Step 4: Convert to GNF as S->XSYP is not in GNF, Replace X with ( S->(SYP/aP P->SP/S X->( Y->) Step 5: Convert to GNF as P->SP is not in GNF, Replace S with (SYP/aP S->(SYP/aP P->(SYPP/aPP/(SYP/aP X->( Y->)