json-simple/tags/1.1.1-1/doc/json.lex

Code
Comments
Other
Rev Date Author Line
50 26 Feb 19 nicklas 1 package org.json.simple.parser;
50 26 Feb 19 nicklas 2
50 26 Feb 19 nicklas 3 %%
50 26 Feb 19 nicklas 4
50 26 Feb 19 nicklas 5 %{
50 26 Feb 19 nicklas 6 private StringBuffer sb=new StringBuffer();
50 26 Feb 19 nicklas 7
50 26 Feb 19 nicklas 8 int getPosition(){
50 26 Feb 19 nicklas 9   return yychar;
50 26 Feb 19 nicklas 10 }
50 26 Feb 19 nicklas 11
50 26 Feb 19 nicklas 12 %}
50 26 Feb 19 nicklas 13
50 26 Feb 19 nicklas 14 %table
50 26 Feb 19 nicklas 15 %unicode
50 26 Feb 19 nicklas 16 %state STRING_BEGIN
50 26 Feb 19 nicklas 17
50 26 Feb 19 nicklas 18 %yylexthrow ParseException
50 26 Feb 19 nicklas 19 %char
50 26 Feb 19 nicklas 20
50 26 Feb 19 nicklas 21 HEX_D = [a-fA-F0-9]
50 26 Feb 19 nicklas 22 INT = [-]?[0-9]+
50 26 Feb 19 nicklas 23 DOUBLE = {INT}((\.[0-9]+)?([eE][-+]?[0-9]+)?)
50 26 Feb 19 nicklas 24 WS = [ \t\r\n]
50 26 Feb 19 nicklas 25 UNESCAPED_CH = [^\"\\]
50 26 Feb 19 nicklas 26 FALLBACK_CH = .
50 26 Feb 19 nicklas 27 %%
50 26 Feb 19 nicklas 28
50 26 Feb 19 nicklas 29 <STRING_BEGIN> \"         { yybegin(YYINITIAL);return new Yytoken(Yytoken.TYPE_VALUE, sb.toString());}
50 26 Feb 19 nicklas 30 <STRING_BEGIN> {UNESCAPED_CH}+  { sb.append(yytext());}
50 26 Feb 19 nicklas 31 <STRING_BEGIN> \\\"       {sb.append('"');}
50 26 Feb 19 nicklas 32 <STRING_BEGIN> \\\\        {sb.append('\\');}
50 26 Feb 19 nicklas 33 <STRING_BEGIN> \\\/        {sb.append('/');}
50 26 Feb 19 nicklas 34 <STRING_BEGIN> \\b        {sb.append('\b');}
50 26 Feb 19 nicklas 35 <STRING_BEGIN> \\f        {sb.append('\f');}
50 26 Feb 19 nicklas 36 <STRING_BEGIN> \\n        {sb.append('\n');}
50 26 Feb 19 nicklas 37 <STRING_BEGIN> \\r        {sb.append('\r');}
50 26 Feb 19 nicklas 38 <STRING_BEGIN> \\t        {sb.append('\t');}
50 26 Feb 19 nicklas 39 <STRING_BEGIN> \\u{HEX_D}{HEX_D}{HEX_D}{HEX_D}  {  try{
50 26 Feb 19 nicklas 40                             int ch=Integer.parseInt(yytext().substring(2),16);
50 26 Feb 19 nicklas 41                             sb.append((char)ch);
50 26 Feb 19 nicklas 42                           }
50 26 Feb 19 nicklas 43                           catch(Exception e){
50 26 Feb 19 nicklas 44                             throw new ParseException(yychar, ParseException.ERROR_UNEXPECTED_EXCEPTION, e);
50 26 Feb 19 nicklas 45                           }
50 26 Feb 19 nicklas 46                         }
50 26 Feb 19 nicklas 47 <STRING_BEGIN> \\        {sb.append('\\');}
50 26 Feb 19 nicklas 48                         
50 26 Feb 19 nicklas 49 <YYINITIAL> \"           { sb.delete(0, sb.length());yybegin(STRING_BEGIN);}
50 26 Feb 19 nicklas 50 <YYINITIAL> {INT}        { Long val=Long.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);}
50 26 Feb 19 nicklas 51 <YYINITIAL> {DOUBLE}      { Double val=Double.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);}
50 26 Feb 19 nicklas 52 <YYINITIAL> "true"|"false"    { Boolean val=Boolean.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE, val);}
50 26 Feb 19 nicklas 53 <YYINITIAL> "null"        { return new Yytoken(Yytoken.TYPE_VALUE, null);}
50 26 Feb 19 nicklas 54 <YYINITIAL> "{"          { return new Yytoken(Yytoken.TYPE_LEFT_BRACE,null);}
50 26 Feb 19 nicklas 55 <YYINITIAL> "}"          { return new Yytoken(Yytoken.TYPE_RIGHT_BRACE,null);}
50 26 Feb 19 nicklas 56 <YYINITIAL> "["          { return new Yytoken(Yytoken.TYPE_LEFT_SQUARE,null);}
50 26 Feb 19 nicklas 57 <YYINITIAL> "]"          { return new Yytoken(Yytoken.TYPE_RIGHT_SQUARE,null);}
50 26 Feb 19 nicklas 58 <YYINITIAL> ","          { return new Yytoken(Yytoken.TYPE_COMMA,null);}
50 26 Feb 19 nicklas 59 <YYINITIAL> ":"          { return new Yytoken(Yytoken.TYPE_COLON,null);}
50 26 Feb 19 nicklas 60 <YYINITIAL> {WS}+          {}
50 26 Feb 19 nicklas 61 <YYINITIAL> {FALLBACK_CH}    { throw new ParseException(yychar, ParseException.ERROR_UNEXPECTED_CHAR, new Character(yycharat(0)));}