我是python的新手,試圖在語法中生成所有可能的語句。 下面是語法:試圖生成一個簡單的形式語法的所有語句
#set of non terminals
N = ('<subject>', '<predicate>', '<noun phrase>', '<noun>', '<article>', '<verb>', '<direct object>')
#set of teminals
T = ('the', 'boy', 'dog', 'bit')
#productions
P = [ ('Sigma', ['<subject>', '<predicate>']), \
('<subject>', ['<noun phrase>']), \
('<predicate>', ['<verb>']), \
('<predicate>', ['<verb>','<direct object>']), \
('<noun phrase>', ['<article>','<noun>']), \
('<direct object>', ['<noun phrase>']), \
('<noun>', ['boy']), \
('<noun>', ['dog']), \
('<article>', ['the']), \
('<verb>', ['bit']) ]
這裏是我的嘗試,我使用的是隊列類有條不紊地實現它,
# language defined by the previous grammar.
Q = Queue()
Q.enqueue(['Sigma'])
found = 0
while 0 < len(Q):
print "One while loop done"
# Get the next sentential form
sf = Q.dequeue()
sf1 = [y for y in sf]
for production in P:
for i in range(len(sf1)):
if production[0] == sf1[i]:
sf[i:i+1] = [x for x in production[1]]
Q.enqueue(sf)
Q.printQ()
我得到的無限循環的,也是我現在面臨的一些問題如果我更改了sf的一個副本,那麼隊列中的所有內容都會發生變化。任何幫助表示讚賞,任何指示,提示將是巨大的
這裏是預期輸出:
The dog bit the boy
The boy bit the dog
The boy bit the boy
The dog bit the dog
The dog bit
The boy bit
您的縮進被打破。從源文件中複製它,然後選擇代碼並按下Ctrl-K進行格式化。如果你沒有得到正確的縮進,我們不能說出Python如何認爲你的代碼是結構化的。 – user2357112
我修復了縮進。這就是我所做的一切,因爲我陷入了無限循環。謝謝參觀。欣賞它 – user1772218
您要求我們爲您編寫算法。 –