自学内容网 自学内容网

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)!