给出1s的字母表我想解析表格的添加
1^k + 1^j = 1^k+j
这很容易通过下推自动机来表示,只需在前两个1的每一个上按1到堆栈,然后弹出最后一组1。但是,我似乎无法弄清楚如何将其表示为无上下文语法,这显然可能是因为PDA == CFG。
答案 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