context-free-grammar - 来自上下文无关语言的正式上下文无关语法

标签 context-free-grammar automata

如何为以下语言生成正式的上下文无关文法:

{ai bjck | i != j or j != k}



我有以下作品但无法理解:
     S->AX | YC                     unequal b’s c’s or a’s b’s

     A-> aA | e                     0 or more A’s

     C -> cC |e                     0 or more c’s

     B -> bB | e                    0 or more B’s

     X -> bXc | bB | cC             equal b’s, c’s then 1+ b’s, 
                                    1+C’s (i.e. unequal b’s and c’s)

     Y -> aYb | bB | aA             unequal a’s b’s

谁能帮我理解和解决这个问题?

最佳答案

语言 L = {ai bj ck | i != j or j != k}可以简单地写成 L = L1 U L2 使得 L1 = {ai bj ck | i != j } L1 = {ai bj ck | j != k } .

在 L1 中没有对符号 c 的限制唯一的条件是 numberOf(a)不应等于 numberOf(b) .要么numberof(a) > numberOf(b) numberof(a) < . numberOf(b) .所以这种语言的语法应该是:

L1  =>  EX              // L1 is start variable 
E  =>  aEb | A | B
X  =>  C | ^ 
A  =>  aA | a
B  =>  bB | b
C  =>  cC | c

在上面使用 E 的语法中,我们可以生成相等数量的 abanEbn的图案中,然后将这种感性的 from 转换为句子形式 E必须替换为 BA这导致以这样的形式生成一个字符串 ai bji != j , 使用变量 X任意数量 c可以在模式后缀ai bj .

要理解此语法,请阅读:Tips for creating Context free grammarWhy the need for terminals? Is my solution sufficient enough?

类似地,对于 L2,符号 a 没有约束。唯一的条件是 numberOf(b)不应等于 numberOf(c) .要么numberof(b) > numberOf(c) numberof(b) < . numberOf(c) .所以这种语言的语法应该是:
L2  =>  YF              // L2 is start variable 
F  =>  bFc | B | C
Y  =>  A | ^ 
A  =>  aA | a
B  =>  bB | b
C  =>  cC | c

现在使用这两种语法并引入一个新的起始变量 S和两个新的产生式规则 S => L1 | L2我们得到语言的语法 L = {ai bj ck | i != j or j != k} .

关于context-free-grammar - 来自上下文无关语言的正式上下文无关语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19474266/

相关文章:

regular-language - 自动机到正则表达式

python - NLTK 正则表达式和 CFG

javascript - JavaScript 中的自引用正则表达式

prolog - 检查字符串是否包含在语言中(Prolog)

regex - 正则表达式 0*1*1+11*0*1 DFA

regex - 计算机是否可以通过用户提供的示例将 "learn"转换为正则表达式?

algorithm - 图灵机元素唯一性问题

computer-science - 我如何证明这个 dFa 是最小的?

antlr - 如何删除 ANTLR3 警告 'multiple alternatives'

regex - 描述正则表达式的上下文无关语法?