我正在使用Jison編寫解析器。這是我的語法:在Jison中調試
{
"program": [
["statements EOF", "return $1;"]
],
"statements": [
["statement", "$$ = $1;"],
["statements statement", "$$ = $1 + '\\n' + $2;"]
],
"statement": [
["expression NEWLINE", "$$ = $1 + ';';"]
],
"expression": [
["NUMBER", "$$ = yytext;"],
["expression expression", "$$ = $1 + ', ' + $2;"]
]
}
然而,當我運行它,我得到以下錯誤信息:
Conflict in grammar: multiple actions possible when lookahead token is NUMBER in
state 9
- reduce by rule: expression -> expression expression
- shift token (then go to state 5)
States with conflicts:
State 9
expression -> expression expression . #lookaheads= NEWLINE NUMBER
expression -> expression .expression
expression -> .NUMBER
expression -> .expression expression
我應該怎麼做這個調試消息的?你如何用簡單的英語來解釋這個信息? expression -> expression expression .
這段時間是什麼意思?什麼是.expression
和.NUMBER
?它們分別與expression
和NUMBER
分別有什麼不同?
謝謝Zach。有什麼方法可以明確指定生產的關聯性嗎?我創建了一個優先級'[「left」,「COMMA」],然後試圖將生成'expression expression'設置爲'{「prec」:「COMMA」}'。然而,這並沒有奏效。你會如何建議我重寫這部作品?我希望能夠輸入一個字符串,例如'2 3 5 7',並將其解析爲一個表達式'((((2 3)5)7)'。我一直在這裏呆了一段時間,我似乎無法繞過這個問題。 – 2013-04-05 13:48:08