對於不LL(1)
或LR(1)
一個人如何可以嘗試找出是否某些數量n
存在使得語法可LL(n)
或LR(n)
語言?如何識別文法是否是LR(N),LL(N)
通過查看LR(0)
項目的規範集合來檢查語法是否爲LR(0)
。然後,假設它不是LR(0)
,可以通過引入lookahead符號來檢查它是否爲LR(1)
。我的簡單推理告訴我,爲了檢查它是否爲LR(2)
,您可能必須使前瞻包含接下來的兩個符號而不是一個。對於LR(3)
,您必須考慮三個符號等。
即使這種情況,即使我懷疑它,但我很難想出如何才能識別(或甚至獲得提示) n
,或其不存在,對此,特定語法可以是LR(n)
和/或LL(n)
,而不從任意向上檢查LR(m)
。
你能否詳細說明一點NO3一點?人們應該尋找繼任者的特徵是什麼?另外,關於LL語法可以做些什麼? –
如果我測試語法並發現它不是LR(1),LR(2),LR(3)(...),那麼在某些時候我應該開始尋找可以幫助構建一個案例的特定特徵這個語法可能根本不是LR。這樣的特徵是否會存在?如果是,他們會是什麼樣子?如果可能的話,類似的情況對於LL案件是可行的嗎? –
@Eternal_Light:我試圖解決你的問題,但我擔心它仍然是非特定的。 SO中有非LR(1)語法的例子,其中大多數都帶有「我如何解決這個衝突」這個問題,並且其中很多已經在答案中進行了分析。我通常不會打擾LL的衝突,所以我在那裏幫不了你; LL解析器更常見的是要求無界的前瞻,通常的解決方案是切換到LR解析器。 – rici