我正在尝试为类似 JSON 的语言设计语法。主要区别在于属性名称不需要双引号(尽管可以),并且数字只是整数(没有浮点数)。
这是一个例子:
{
"property1": "string value",
property2: 321,
arr: [1,2,3]
}
这是我的(尝试)语法:
grammar Command;
command: object;
object: '{' pair (',' pair)* '}' ;
pair: name ':' value ;
name
: '"' ID '"'
| ID
;
value
: string
| integer
| object
| array
| bool
;
array: '[' value (',' value)* ']' ;
string: STRING ;
integer
: ZERO
| NONZERO
;
bool
: 'true'
| 'false'
;
ID : [a-zA-Z0-9_]+ ;
STRING: '"' (ESC | .)*? '"' ;
fragment ESC: '\\"' | '\\\\' ;
ZERO: '0' ;
NONZERO: '-'? [1-9] [0-9]* ;
WS : [ \t\n\r]+ -> skip ;
但是,尝试在我的示例输入上运行 TestRig,我得到
line 2:2 no viable alternative at input '"property"'
line 3:10 no viable alternative at input '321'
line 4:8 no viable alternative at input '1'
line 4:10 no viable alternative at input '2'
line 4:12 no viable alternative at input '3'
有什么想法我哪里出错了吗?
谢谢你的时间!
托马斯