Compiler construction 给定一种语言,定义它的CFG

Compiler construction 给定一种语言,定义它的CFG,compiler-construction,grammar,Compiler Construction,Grammar,给定 定义一个CFG,使LG=L1 在我看来,这些作品应该是正确的答案 L1 = {w belongs to {a,b}* | has as many a as b} 我的理由是: L1包含像{ab,aabb,aaabbb 现在我有一个疑问:如果我应用上述成果,简而言之: → aSa 我应用1得到S→ aSa→ aaSaa我选择了2个,我得到了S→ aSa→ aaSaa→ aabSbaa,然后使用空字符串得到最后的字符串S→ aSa→ aaSaa→ aabSbaa→ AAAAA 现在,也许我错

给定

定义一个CFG,使LG=L1

在我看来,这些作品应该是正确的答案

L1 = {w belongs to {a,b}* | has as many a as b}
我的理由是:

L1包含像{ab,aabb,aaabbb

现在我有一个疑问:如果我应用上述成果,简而言之:

→ aSa 我应用1得到S→ aSa→ aaSaa我选择了2个,我得到了S→ aSa→ aaSaa→ aabSbaa,然后使用空字符串得到最后的字符串S→ aSa→ aaSaa→ aabSbaa→ AAAAA

现在,也许我错了,但是在字符串aabbaa中,a的数量不等于b的数量

任何帮助都将不胜感激


约阿希姆

假设L1实际上是{a^nb^n | n≥ 0},您提供的语法无法完全生成L1。为了满足这样一个要求,即一个单词左侧的a的数量必须等于其右侧的b的数量,您的目标是找到一种语法,在其每一个结果之后强制执行该要求

考虑这一点的另一种方式是:不允许在语法中使用不能生成相等数量的a和b的结果

V = {A}, Σ = {a, b}, S = A, and R the set of rules:

(1) A -> aAbA | bAaA
(2) A -> ε
编辑:既然这不是家庭作业,我就继续回答:

1) S → aSa

2) S → bSb

3) S → ε

对不起,也许我错了,但迈克尔·福卡拉基斯的解决方案不起作用

基本上,这两个规则不提供具有相同数量的a和b的字符串

V = {A}, Σ = {a, b}, S = A, and R the set of rules:

(1) A -> aAbA | bAaA
(2) A -> ε
取A->aAb,然后应用1规则,你有A->aAb->aaAb,然后??? 如果你应用2,你最终会得到A->aAb->aaAb->aAb

我认为正确的答案是:

(1) A -> aAb

(2) A -> ε
即使我得到的字符串是:abab或aababb 实际上,它们都满足了初始要求,即:

1)S->aSbS

2)S->bSaS

3) S->ε
元素的排列方式无关紧要


当然,欢迎并鼓励发表评论

这是一个标准的课堂练习,还没有正确答案

the string must contain the same number of a and b.
任意顺序的任意数量的a和b,包括空字符串

有相当多的在线课堂笔记和答案和证明。示例:
无论如何,考虑这个不匹配的输入:ABAB。因此,发布的产品不可能是正确的答案。如果你认为我的文章应该被贴上家庭作业的标签,我真的希望有人能向我解释我犯错误的地方和原因,在每次制作之后,as和bs的数量应该相等。您当前的解决方案取决于选择正确的产品,但正如您已经注意到的,这无法保证。你必须确保每一个生产都产生一个有效的词。考虑这个不匹配的输入:abb.…我应该如何解决这个问题?但是如果我开始应用2规则,我得到ABSBA,然后通过3我得到ABBA,A和B在数量上是相等的。我说的对吗?ABAB呢?你的语法生成了一些a和b数量相同的字符串,但不是全部。我仍然认为你的解决方案没有得到所有可能的单词。例如,据我所知,一个词可以以a开头,也可以以a结尾,例如abba,这在你的规则中是不可能的。@Howard aAbA=>aAbbAaA=>*abbaYou说a->aAb->aaAb-怎么说?有没有一条规则可以用a代替a?