我寫在野牛解析器對於具有以下構造,以及其他語言:這可以由LALR(1)解析器解析嗎?
- 自調度:
identifier
arguments
] - 調度:
expression
。identifier
arguments
] - 字符串切片:
expression
[expression
,expression
] - 與Python類似。
arguments
是逗號分隔的表達式列表,它也可以是空的。以上所有內容都是表達自己的。 我的問題是,我不知道如何解析[method [other_method]]
和[someString[idx1, idx2].toInt]
,或者是否可以使用LALR(1)解析器完成此操作。
更準確地說,讓我們看看下面的例子:[a[b]]
(調用方法a
,方法b
的結果)。當它達到狀態[a
。 [b]]
(向前是第二個[
),它不知道是否將a
(已經減少到identifier
)減少到expression
,因爲可能跟隨a[b,c]
之類的東西(其本身可以減少爲expression
並繼續第二個構造從上面)或保留identifier
(並將其移位),因爲會出現一個arguments
列表(例如[b]
)。
由於我表達這種語法的方式,或者不可能用LALR(1)解析器解析所有這些結構,這種轉換/減少衝突嗎?
而且,更常見的問題是,如何證明某種語言不能被特定類型的解析器解析?
「如何證明某個特定類型的解析器無法解析某個東西?」請明確「某事」。 [語言和語法有所不同](/ a/476009/824425)(該答案應該回答你關於LL(1)的最後一個問題,但概括幾乎任何解析器類型)。您在這裏指定的是該語言的一些功能,但沒有語法,真的沒什麼可談的。 – 2016-11-05 10:41:30
@Rhymoid我編輯它更清晰。我問的是語言,而不是語法。我不認爲有必要添加我作爲問題的一部分寫的語法,僅僅是因爲我問LALR(1)是否可以解析* language *(它的一些構造,更準確)不是語法。 –
@EJP我有。我寫了一個語法,它具有上述的轉換/減少衝突。我想了很多如何避免它,我失敗了。而現在我在想,也許由於這些構造,語言本身不能用LALR(1)解析器進行分析,而不考慮你編寫語法的方式。 –