python - L = a^nb^n 的确定性下推自动机 | n >=0) Python 程序
问题描述
我为程序编写并运行的 python 代码。它完成了我希望它为项目做的事情,但我真的不喜欢我如何构建代码,而且我觉得我可以标记和缩短这么多代码。有什么建议吗?我想让它更短,也许更多地清理它。或者,如果您对如何在 python 中实现代码有其他想法,我将非常感谢您将如何做到这一点。我会将提示链接到下面的项目。
解决方案
以下是如何使用以下状态、堆栈符号和转换函数DPDA
为 CFL实现类:a^nb^n
class DPDA:
def __init__(self, trf, input, state):
self.head = 0
self.trf = {}
self.state = str(state)
self.input = input
self.trf = trf
self.stack = ['Z']
def step(self):
a = self.input[self.head]
s = self.stack.pop()
state, ss = self.trf.get((self.state, a, s))
if ss != 'ε':
for s in ss[::-1]:
self.stack.append(s)
self.state = state
print('{:20s} [{:10s}] {:5s}'.format(self.input[self.head:],
''.join(self.stack), self.state))
self.head += 1
def run(self):
print('{:20s} [{:10s}] {:5s}'.format(self.input[self.head:],
''.join(self.stack), self.state))
while self.head < len(self.input):
self.step()
s = self.stack.pop()
if self.trf.get((self.state, 'ε', s)):
state, ss = self.trf.get((self.state, 'ε', s))
self.state = state
print('{:20s} [{:10s}] {:5s}'.format('ε',
''.join(self.stack), self.state))
# run DPDA to accept the input string a^9b^9
DPDA({('q', 'a', 'Z'): ('q', 'XZ'),
('q', 'a', 'X'): ('q', 'XX'),
('q', 'b', 'X'): ('p', 'ε'),
('p', 'b', 'X'): ('p', 'ε'),
('p', 'ε', 'Z'): ('acc', 'Z'),
},
'aaaaaaaaabbbbbbbbb', 'q').run()
#input #stack #state
#aaaaaaaaabbbbbbbbb [Z ] q
#aaaaaaaaabbbbbbbbb [ZX ] q
#aaaaaaaabbbbbbbbb [ZXX ] q
#aaaaaaabbbbbbbbb [ZXXX ] q
#aaaaaabbbbbbbbb [ZXXXX ] q
#aaaaabbbbbbbbb [ZXXXXX ] q
#aaaabbbbbbbbb [ZXXXXXX ] q
#aaabbbbbbbbb [ZXXXXXXX ] q
#aabbbbbbbbb [ZXXXXXXXX ] q
#abbbbbbbbb [ZXXXXXXXXX] q
#bbbbbbbbb [ZXXXXXXXX ] p
#bbbbbbbb [ZXXXXXXX ] p
#bbbbbbb [ZXXXXXX ] p
#bbbbbb [ZXXXXX ] p
#bbbbb [ZXXXX ] p
#bbbb [ZXXX ] p
#bbb [ZXX ] p
#bb [ZX ] p
#b [Z ] p
#ε [Z ] acc
下一个动画显示了上述 DPDA 如何接受字符串:
推荐阅读
- ios - Swift Tabbar,中间有一个圆孔
- visual-studio - 从 Azure 和本地计算机存储库合并和删除功能分支
- java - 用户实体 - 找不到符号
- java - 从列表视图中单击歌曲后,新活动正在打开但歌曲未播放
- android - 单击通知时,应打开警报对话框
- azure-devops - 如何在 Azure DevOps (VSTS) 中发布测试/工件
- php - 如何在 yii 1.1.5 中添加新字段?我试图在我的数据库中添加一个新字段并更改我的模型和视图。但我得到了一个未定义的错误
- excel - Excel - 数据透视表显示一个字段,但源查询缺少列
- javascript - 将价值从父母传递给孩子不起作用
- html - 在 bootstrap 4 中替换 bootstrap 3 的一类