2
使用語法爲什麼這個掛鉤語法不能識別42?
start
= b
/a
a
= "4" "2"
b
= "4"
與peg.js
識別4但不42在這種情況下,誤差
「1行,第2列:輸入預期目的,而是 」2「 找到」。
被報告。很明顯,解析器完成了消耗「4」的start -> b
規則,然後不知道如何處理「2」。但是爲什麼不碰a
的其他規則,當它遇到錯誤?
使用語法爲什麼這個掛鉤語法不能識別42?
start
= b
/a
a
= "4" "2"
b
= "4"
與peg.js
識別4但不42在這種情況下,誤差
「1行,第2列:輸入預期目的,而是 」2「 找到」。
被報告。很明顯,解析器完成了消耗「4」的start -> b
規則,然後不知道如何處理「2」。但是爲什麼不碰a
的其他規則,當它遇到錯誤?
在一個PEG語法中,選擇操作符被稱爲「優先選擇」,並且替代方式意味着按照語法中的外觀順序進行處理。在運行時,PEG解析器將開始處理第一個選擇。當失敗時,解析器會回溯到解析該替代解析器之前的狀態,然後繼續執行下一個解析器。然而,一旦成功,則假設替代方案是正確解析的一部分,並且對於當前的選擇,不考慮任何剩餘的替代方案。
對於您的語法,這意味着第二個選擇從未嘗試過,因爲第一個選項形成了它的前綴。如果您重新排列替代品,它應該按照您的預期工作。