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'
私が間違っているアイデアはありますか?
御時間ありがとうございます!
トゥオマス