0
我想出了以下語法強制執行優先級:如何修復我寫的語法?
A : L ('[' A ']' L*)*
L : M (('+'|'-')M)*
M : P (('*'|'/')P)*
P : ID | NUM
其中ID可以是字母,而num是一個整數。
問題
我可以分析以下字符串:
a[i + 1]
我無法解析以下字符串:
a[i] + 1 or a[a[i]*i]
我的問題是,引入了遞歸問題。因爲我不想回溯。我必須通過重寫語法來解決這個問題。我一直在看這個link。但是,我嘗試修復也不起作用。有人可以幫忙嗎?
嘗試的解決方案:
A : L ('[' A ']')* | L*` and let `Z = ('[' A ']')*
不過,我認爲這改變了我的語法定義,仍然是左遞歸併不允許我解決a[i] + 1 or a[a[i]*i]
附加信息:
我實際上是在antlr中實現它。我試圖用syntatic謂詞來解決這個問題,但這並沒有幫助。也許我沒有正確使用它們?
我會繼續在這個問題上有所斬獲,但我越想越多,我就會感到困惑。有人可以幫幫我嗎?這是一個概念性問題,我想如何正確設置沒有回溯的語法。但是如果我想要正確地製作我自己的定製工具,我將不得不這樣做。