一元加法的上下文免费语法

时间:2009-10-15 02:07:46

标签: computer-science context-free-grammar

给出1s的字母表我想解析表格的添加

1^k + 1^j = 1^k+j

这很容易通过下推自动机来表示,只需在前两个1的每一个上按1到堆栈,然后弹出最后一组1。但是,我似乎无法弄清楚如何将其表示为无上下文语法,这显然可能是因为PDA == CFG。

8 个答案:

答案 0 :(得分:3)

S => 1A1
A => 1A1 | +1B1
B => 1B1 | =

前两行构造第一项和具有相同数量的和。构建第一个术语后,使用" A =>移动到第二个术语。 + 1B1&#34。第三行构造第二项,同时向总和添加相等数量的1。完成后,等于过渡完成它。

请注意,这并不允许表达式中的任何术语等于零。此外,你可以构造一个略有变化的一元减去表达式,记住a - b = c等于a = b + c

答案 1 :(得分:2)

如果您将RHS重写为1^j1^k,那么您应该会看到它只是两组嵌套1的嵌套。结合1 + 1 = 11的“基本情况”,你应该能够在内部增长“j”,在外部增长“k”。

答案 2 :(得分:2)

使用无上下文语法或使用下推自动机无法实现通用一元加法。对于这种类型的计算,您必须使用图灵机。编写将1推入堆栈的下推自动机无效,因为堆栈实际上不是PDA的输出。 PDA的唯一输出是二进制“接受”或“拒绝”,表示输入字符串是否是PDA识别的语言的一部分。

答案 3 :(得分:1)

我的建议是提出一个简单的起点: 1 + 1 = 11 现在试着弄清楚如何通过合法的CFG表达来“增长”。

或者,我刚刚通过尝试使用“匹配括号”扩展它来解决这个问题,这是CFG常见的引入问题。它显然更难,但你可能会找到一条富有成效的道路。

希望这有帮助!快乐的狩猎。

AGOR

答案 4 :(得分:0)

是的,这一个人在过去一小时一直困扰着我。

另外,cdiggins,1 + 1 = 111会通过

答案 5 :(得分:0)

我一直在努力工作,也无法让它发挥作用。这对我来说最有意义:

A - > B + B = BB B - > BB B - > 1

但是,这接受的字符串如1 + 111 = 11和11 + 1 = 111111和其他废话。看起来这里的人知道但不想分享。这不是我们可以谷歌并获得有意义的帮助。认为你可能会更有帮助吗?

答案 6 :(得分:0)

S   ->  1 + 1 = 11
S   ->  1S1
S   ->  1 + 1A11
A   ->  1 = 1
A   ->  1A1

答案 7 :(得分:0)

我知道这是一个老问题,我正在阅读Godel,Escher,Bach并且遇到类似的问题(为其pq系统生成语法)

因此对于OP的问题,我想以下生产规则应该这样做:

首先 - > 1 + second1 | 1first1 第二 - > 1 = 1 | 1second1