0

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'

私が間違っているアイデアはありますか?

御時間ありがとうございます!

トゥオマス

4

1 に答える 1