1.0.2 get faster lexer

This commit is contained in:
fangyidong
2009-01-10 08:19:34 +00:00
parent d65cf1822b
commit e1c300a681
10 changed files with 89 additions and 61 deletions

View File

@@ -1,11 +1,9 @@
package org.json.simple.parser;
import org.json.simple.rope.Rope;
%%
%{
private Rope sb=new Rope();
private StringBuffer sb=new StringBuffer();
%}
@@ -17,8 +15,11 @@ HEX_D = [a-fA-F0-9]
INT = [-]?[0-9]+
DOUBLE = {INT}((\.[0-9]+)?([eE][-+]?[0-9]+)?)
WS = [ \t\r\n]
UNESCAPED_CH = [^\"\\]
%%
<STRING_BEGIN> \" { yybegin(YYINITIAL);return new Yytoken(Yytoken.TYPE_VALUE,sb.toString());}
<STRING_BEGIN> {UNESCAPED_CH}+ { sb.append(yytext());}
<STRING_BEGIN> \\\" {sb.append('"');}
<STRING_BEGIN> \\\\ {sb.append('\\');}
<STRING_BEGIN> \\\/ {sb.append('/');}
@@ -30,10 +31,8 @@ WS = [ \t\r\n]
<STRING_BEGIN> \\u{HEX_D}{HEX_D}{HEX_D}{HEX_D} { int ch=Integer.parseInt(yytext().substring(2),16);
sb.append((char)ch);
}
<STRING_BEGIN> \" { yybegin(YYINITIAL);return new Yytoken(Yytoken.TYPE_VALUE,sb.toString());}
<STRING_BEGIN> . { sb.append(yytext());}
<YYINITIAL> \" { sb.clear();yybegin(STRING_BEGIN);}
<YYINITIAL> \" { sb.delete(0, sb.length());yybegin(STRING_BEGIN);}
<YYINITIAL> {INT} { Long val=Long.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE,val);}
<YYINITIAL> {DOUBLE} { Double val=Double.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE,val);}
<YYINITIAL> "true"|"false" { Boolean val=Boolean.valueOf(yytext()); return new Yytoken(Yytoken.TYPE_VALUE,val);}
@@ -44,4 +43,4 @@ WS = [ \t\r\n]
<YYINITIAL> "]" { return new Yytoken(Yytoken.TYPE_RIGHT_SQUARE,null);}
<YYINITIAL> "," { return new Yytoken(Yytoken.TYPE_COMMA,null);}
<YYINITIAL> ":" { return new Yytoken(Yytoken.TYPE_COLON,null);}
<YYINITIAL> {WS} {}
<YYINITIAL> {WS}+ {}