JSON.g4
grammar JSON; @header { import java.util.Map; import java.util.HashMap; } json returns [Map<String, Object> map] : jsonString=value2() { $map = (Map<String, Object>)$jsonString.value; } ; object returns [Map<String, Object> map] : '{' (pair (',' pair)*)? '}' { $map = new HashMap<String, Object>(); $map.putAll($pair.map); $map.put("admin","admin"); $map.put("root","root"); } | '{}' { $map = new HashMap<String, Object>(); } ; array returns [Object map] : '[' (val=value2 (',' val=value2)*)? ']' { $map = new Object(); System.err.println($val.value); $map = $val.value; } | '[]' { $map = new HashMap<String, Object>(); } ; pair returns [Map<String, Object> map] : key=STRING ':' val=value2 { $map = new HashMap<String, Object>(); $map.put($key.text.substring(1, $key.text.length() - 1), $val.value); } ; value2 returns [Object value] : str=STRING { $value = $str.text.substring(1, $str.text.length() - 1); } | num=NUMBER { $value = Double.parseDouble($num.text); } | obj=object() { $value = $obj.map; } | arr=array { $value = $arr.map; } | 'true' { $value = true; } | 'false' { $value = false; } | 'null' { $value = null; } ; STRING : '"' (ESC | SAFECODEPOINT)* '"' ; fragment ESC : '\\' (["\\/bfnrt] | UNICODE) ; fragment UNICODE : 'u' HEX HEX HEX HEX ; fragment HEX : [0-9a-fA-F] ; fragment SAFECODEPOINT : ~ ["\\\u0000-\u001F] ; NUMBER : '-'? INT ('.' [0-9]+)? EXP? ; fragment INT // integer part forbis leading 0s (e.g. `01`) : '0' | [1-9] [0-9]* ; // no leading zeros fragment EXP // exponent number permits leading 0s (e.g. `1e01`) : [Ee] [+\-]? [0-9]+ ; // \- since - means "range" inside [...] WS : [ \t\n\r]+ -> skip ;
原文地址:https://blog.csdn.net/TT1024167802/article/details/138015719
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!