package org.json.simple.parser; %% %{ private StringBuffer sb=new StringBuffer(); int getPosition(){ return yychar; } %} %table %unicode %state STRING_BEGIN %yylexthrow ParseException %char HEX_D = [a-fA-F0-9] INT = [-]?[0-9]+ DOUBLE = {INT}((\.[0-9]+)?([eE][-+]?[0-9]+)?) WS = [ \t\r\n] UNESCAPED_CH = [^\"\\] FALLBACK_CH = . %% \" { yybegin(YYINITIAL);return new Yytoken(Yytoken.TYPE_VALUE, sb.toString());} {UNESCAPED_CH}+ { sb.append(yytext());} \\\" {sb.append('"');} \\\\ {sb.append('\\');} \\\/ {sb.append('/');} \\b {sb.append('\b');} \\f {sb.append('\f');} \\n {sb.append('\n');} \\r {sb.append('\r');} \\t {sb.append('\t');} \\u{HEX_D}{HEX_D}{HEX_D}{HEX_D} { try{ int ch=Integer.parseInt(yytext().substring(2),16); sb.append((char)ch); } catch(Exception e){ throw new ParseException(yychar, ParseException.ERROR_UNEXPECTED_EXCEPTION, e); } } \\ {sb.append('\\');} \" { sb = null; sb = new StringBuffer(); yybegin(STRING_BEGIN);} {INT} { Long val=Long.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);} {DOUBLE} { Double val=Double.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);} "true"|"false" { Boolean val=Boolean.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);} "null" { return new Yytoken(Yytoken.TYPE_VALUE, null);} "{" { return new Yytoken(Yytoken.TYPE_LEFT_BRACE,null);} "}" { return new Yytoken(Yytoken.TYPE_RIGHT_BRACE,null);} "[" { return new Yytoken(Yytoken.TYPE_LEFT_SQUARE,null);} "]" { return new Yytoken(Yytoken.TYPE_RIGHT_SQUARE,null);} "," { return new Yytoken(Yytoken.TYPE_COMMA,null);} ":" { return new Yytoken(Yytoken.TYPE_COLON,null);} {WS}+ {} {FALLBACK_CH} { throw new ParseException(yychar, ParseException.ERROR_UNEXPECTED_CHAR, new Character(yycharat(0)));}