我试图定义使用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