package org.json.simple.parser; import org.json.simple.rope.Rope; %% %{ private Rope sb=new Rope(); %} %switch %unicode %state STRING_BEGIN HEX_D = [a-fA-F0-9] INT = [-]?[0-9]+ DOUBLE = {INT}((\.[0-9]+)?([eE][-+]?[0-9]+)?) WS = [ \t\r\n] %% \\\" {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} { int ch=Integer.parseInt(yytext().substring(2),16); sb.append((char)ch); } \" { yybegin(YYINITIAL);return new Yytoken(Yytoken.TYPE_VALUE,sb.toString());} . { sb.append(yytext());} \" { sb.clear();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} {}