这个语法可以解析JSON对象吗?

时间:2017-07-08 19:44:22

标签: json yacc lex context-free-grammar

这个语法可以解析JSON对象吗?

d= { kvp }   
kvp= key : value  | key : value , kvp  
value= num | str | true | false  | array | d   | null
array= [] | [ element ]   
element= value | value , element
key= num | str

1 个答案:

答案 0 :(得分:0)

看起来不错,但是正如克里斯在评论中所说,所有JSON配置文件通常都包含null, trur, false ...,在此丢失。

查看此语法(摘自json.org):

  

json:值;

     

obj:'{'对(','对)*'}'| '{''}';

     

pair:STRING':'value;

     

array:'['value(','value)*']'| '['']';

     

值:STRING | NUMBER | obj |数组| '真实'|   '假'| 'null';

     

STRING:'“'(ESC | SAFECODEPOINT)*'”';

     

片段ESC:'\'([“ \ / bfnrt] | UNICODE);

     

片段UNICODE:'u'十六进制十六进制十六进制十六进制;

     

片段十六进制:[0-9a-fA-F];

     

片段SAFECODEPOINT:〜[“ \\ u0000- \ u001F];

     

NUMBER:“-”? INT('。'[0-9] +)? EXP? ;

     

片段INT:'0'| [1-9] [0-9] *;

     

//无前导零

     

片段EXP:[Ee] [+-]? INT;

     

//-因为-表示[...]内的“范围”

     

WS:[\ t \ n \ r] +->跳过;