生成语言L的BNF语法

时间:2018-01-16 18:43:35

标签: grammar context-free-grammar bnf formal-languages

我花了很多时间但仍然无法理解如何解决这个问题。我有答案。你能告诉我他是怎么想出来的吗?

我可以遵循特定的规则或标准构造吗?我知道联合和连接的规则,但不是在它被颠倒的时候。

BNF grammar with no ambiguity

This is the solution, but I don't understand how he comes up with it. Is there a specific rules I can follow when writing such grammar?

1 个答案:

答案 0 :(得分:0)

如果x是({1}}的(可能是不正确的)子字符串,则y可以写为x^r c y x^R c wxzwz之上的任意字符串。

现在我们可以尝试"切片"用这种语言的字符串来看看它们如何由CFG生成。这方面的非常规部分是确保(a+b)*x^R出来正确;其余的都是微不足道的。所以我们需要一些规则,如:

x

这给了我们S -> aXa | bYb | c 。我们错过了x^R c xw。我们可以通过在z之后放置任意字符串来添加w

c

我们可以通过将S -> aSa | bSb | cA A -> aA | bA | e 更改为z并添加生成S的新T后跟任何内容来获得S

T

我们忽略了确保S -> TA T -> aTa | bTb | cA A -> aA | bA | e 。我们通过将|x| > 1更改为两个作品T -> cA来实现这一目标。这产生了建议的语法(不是唯一正确的语法,只有一个语法有效)并解释了我们如何到达那里。