我試圖定義使用Jison很少標點劃界語言 - 像CoffeeScript但沒有縮進。這是我想要實現的:這個語法不明確嗎?
# Definition
object1, object2
property1 = value1,
property2 = value2
# Definition
object3 property = value
# Statement
object1 + object2 + object3
這定義了三個具有某些屬性的對象並添加它們。請注意,第一個定義使用名稱列表指定兩個對象,第二個定義顯示空白不應該是重要的。
我覺得語法是不是儘管名稱列表和屬性列表之間缺乏開始和結束標誌的曖昧。該語法指定每個名稱列表後面跟着一個屬性列表。這一切似乎如果我寫一個語法只是指定的定義,包括像生產工作的罰款:
definition
: name_list property_list
;
name_list
: name
| name_list ',' name
;
property_list
: property
| property_list ',' property
;
property
: name '=' name
;
現在,我想補充規則的語法表達部分,在一個相當正常的方式盡我所能告訴:
expr
: expr '+' expr
| expr '/' expr
| name
;
Jison抱怨說,在一些編號狀態下,一堆不同的先行標記「可能會有多種動作」。減少選項通常看起來像:
- reduce by rule: name_list -> name
- reduce by rule: expr -> name
我相信語法是明確的,但我怎麼能說服Jison這個?現在看來,這可能需要向前看兩個標記,而不是一個,但是這是一個盲目的猜測,以及Jison文檔指出,它沒有(沒有?)支持LL(ķ)語法。
是的,這是模糊的語法。從這[問題和答案]獲取幫助(http://stackoverflow.com/questions/14554752/how-can-i-add-parentheses-as-the-highest-level-of-precedence-in-a-simple -grammar/14569166#14569166) – 2013-02-26 08:43:36
如果沒有看到你的'property_list'的規則很難說。 – 2013-02-26 14:56:24
@DavidGorsline我添加了'property_list'和'property'製作。只是不想讓這個問題太長。 – 2013-02-26 17:25:53