[03 - JFlex Scanner] Get TestASScanner2 to work

This commit is contained in:
2020-04-29 11:17:42 +02:00
parent 4cd6257831
commit 7222ee5215
4 changed files with 235 additions and 86 deletions

View File

@@ -27,6 +27,14 @@ package de.dhbw.compiler.jflexasscanner;
%{ %{
String idValue = ""; String idValue = "";
int intValue = 0; int intValue = 0;
double fracValue = 0.0;
String numberString = "";
int decimalPlace = 0;
int exponent = 0;
private Token intToken(int value) {
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
}
%} %}
WhiteSpace = [ \t\b\r\n]+ WhiteSpace = [ \t\b\r\n]+
@@ -34,6 +42,8 @@ SmallChars = [a-z]
CapitalChars = [A-Z] CapitalChars = [A-Z]
Numbers = [0-9] Numbers = [0-9]
AllChars = [a-zA-Z0-9] AllChars = [a-zA-Z0-9]
Dot = [\.]
Power = \^{Numbers}
%eofval{ %eofval{
return new Token(Token.EOF, "", yyline+1, yycolumn+1); return new Token(Token.EOF, "", yyline+1, yycolumn+1);
@@ -45,7 +55,8 @@ AllChars = [a-zA-Z0-9]
<YYINITIAL> { <YYINITIAL> {
"null" { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); } "null" { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); }
{Numbers} { yybegin(NUM); {Numbers} { yybegin(NUM);
intValue = yycharat(0)-'0'; System.out.println("BEGIN INT <"+intValue+">"); } intValue = yycharat(0)-'0';
numberString = yytext(); }
{AllChars} { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">"); {AllChars} { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">");
idValue = yytext(); } idValue = yytext(); }
[\[] { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); } [\[] { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); }
@@ -54,10 +65,14 @@ AllChars = [a-zA-Z0-9]
} }
<NUM> { <NUM> {
{Numbers} { intValue = intValue * 10 + yycharat(0) - '0'; } {Numbers} { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext(); }
{SmallChars} | {CapitalChars} { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); } {SmallChars} | {CapitalChars} { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); }
<<EOF>> { yybegin(YYINITIAL); <<EOF>> { yybegin(YYINITIAL);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); } return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); }
{Dot} { yybegin(FRAC);
fracValue = intValue;
System.out.println("BEGIN FRAC <"+yytext()+">");
numberString += yytext(); }
[^] { yybegin(YYINITIAL); [^] { yybegin(YYINITIAL);
yypushback(1); yypushback(1);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); } return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); }
@@ -66,12 +81,31 @@ AllChars = [a-zA-Z0-9]
<ID> { <ID> {
{AllChars} { idValue += yytext(); } {AllChars} { idValue += yytext(); }
<<EOF>> { yybegin(YYINITIAL); <<EOF>> { yybegin(YYINITIAL);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); } return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); }
[^] { yybegin(YYINITIAL); [^] { yybegin(YYINITIAL);
yypushback(1); yypushback(1);
return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); } return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); }
} }
<FRAC> {
{Numbers} { fracValue += (yycharat(0) - '0') * Math.pow(10, -++decimalPlace); numberString += yytext(); }
<<EOF>> { yybegin(YYINITIAL);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue); }
\^{Numbers} { System.out.println("BEGIN EXP <"+yytext()+">"); yybegin(EXP); numberString += yytext(); exponent = yycharat(0) - '0'; }
[^] { yybegin(YYINITIAL);
yypushback(1);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue); }
}
<EXP> {
{Numbers} { numberString += yytext(); exponent = exponent * 10 + yycharat(0) - '0'; }
<<EOF>> { yybegin(YYINITIAL);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.exp(exponent)); }
[^] { yybegin(YYINITIAL);
yypushback(1);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.exp(exponent)); }
}
[^] { System.out.println("Illegal character <" + yytext() + ">"); [^] { System.out.println("Illegal character <" + yytext() + ">");
return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); } return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); }

View File

@@ -42,16 +42,16 @@ public final class JFlexASScanner {
* l is of the form l = 2*k, k a non negative integer * l is of the form l = 2*k, k a non negative integer
*/ */
private static final int ZZ_LEXSTATE[] = { private static final int ZZ_LEXSTATE[] = {
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5
}; };
/** /**
* Translates characters to character classes * Translates characters to character classes
*/ */
private static final String ZZ_CMAP_PACKED = private static final String ZZ_CMAP_PACKED =
"\10\0\3\1\2\0\1\1\22\0\1\1\13\0\1\11\3\0\12\3"+ "\10\0\3\1\2\0\1\1\22\0\1\1\13\0\1\13\1\0\1\4"+
"\7\0\32\2\1\7\1\0\1\10\3\0\13\2\1\6\1\2\1\4"+ "\1\0\12\3\7\0\32\2\1\11\1\0\1\12\1\5\2\0\13\2"+
"\6\2\1\5\5\2\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uff95\0"; "\1\10\1\2\1\6\6\2\1\7\5\2\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uff95\0";
/** /**
* Translates characters to character classes * Translates characters to character classes
@@ -64,11 +64,12 @@ public final class JFlexASScanner {
private static final int [] ZZ_ACTION = zzUnpackAction(); private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 = private static final String ZZ_ACTION_PACKED_0 =
"\4\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+ "\6\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+
"\1\7\1\10\1\11\1\12\1\13\1\14\2\0\1\15"; "\1\7\1\10\1\11\1\10\1\12\1\13\1\14\1\15"+
"\1\16\1\17\1\20\1\21\1\0\1\22\1\0\1\23";
private static int [] zzUnpackAction() { private static int [] zzUnpackAction() {
int [] result = new int[20]; int [] result = new int[29];
int offset = 0; int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result; return result;
@@ -93,12 +94,13 @@ public final class JFlexASScanner {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 = private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\12\0\24\0\36\0\12\0\50\0\12\0\12"+ "\0\0\0\14\0\30\0\44\0\60\0\74\0\44\0\110"+
"\0\62\0\12\0\12\0\12\0\12\0\12\0\12\0\12"+ "\0\44\0\44\0\124\0\44\0\44\0\44\0\44\0\44"+
"\0\12\0\74\0\106\0\12"; "\0\140\0\44\0\44\0\44\0\44\0\44\0\44\0\44"+
"\0\44\0\154\0\44\0\170\0\44";
private static int [] zzUnpackRowMap() { private static int [] zzUnpackRowMap() {
int [] result = new int[20]; int [] result = new int[29];
int offset = 0; int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result; return result;
@@ -121,13 +123,15 @@ public final class JFlexASScanner {
private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 = private static final String ZZ_TRANS_PACKED_0 =
"\1\5\1\6\1\7\1\10\1\11\2\7\1\12\1\13"+ "\1\7\1\10\1\11\1\12\2\7\1\13\2\11\1\14"+
"\1\14\12\0\2\15\5\16\3\15\2\17\1\20\1\21"+ "\1\15\1\16\3\17\1\20\1\17\1\21\6\17\3\22"+
"\3\20\3\17\1\0\1\6\15\0\1\22\12\0\1\23"+ "\1\23\10\22\14\0\2\24\2\25\2\24\3\25\3\24"+
"\11\0\1\24\3\0"; "\2\26\1\27\1\30\1\31\1\26\3\27\3\26\1\0"+
"\1\10\21\0\1\32\7\0\1\33\20\0\1\34\13\0"+
"\1\35\3\0";
private static int [] zzUnpackTrans() { private static int [] zzUnpackTrans() {
int [] result = new int[80]; int [] result = new int[132];
int offset = 0; int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result; return result;
@@ -165,11 +169,11 @@ public final class JFlexASScanner {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 = private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\1\0\1\10\2\0\1\11\1\1\2\11\1\1\10\11"+ "\3\0\1\10\2\0\1\11\1\1\2\11\1\1\5\11"+
"\2\0\1\11"; "\1\1\10\11\1\0\1\11\1\0\1\11";
private static int [] zzUnpackAttribute() { private static int [] zzUnpackAttribute() {
int [] result = new int[20]; int [] result = new int[29];
int offset = 0; int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result; return result;
@@ -247,6 +251,14 @@ public final class JFlexASScanner {
/* user code: */ /* user code: */
String idValue = ""; String idValue = "";
int intValue = 0; int intValue = 0;
double fracValue = 0.0;
String numberString = "";
int decimalPlace = 0;
int exponent = 0;
private Token intToken(int value) {
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
}
/** /**
@@ -269,7 +281,7 @@ public final class JFlexASScanner {
char [] map = new char[0x110000]; char [] map = new char[0x110000];
int i = 0; /* index in packed string */ int i = 0; /* index in packed string */
int j = 0; /* index in unpacked array */ int j = 0; /* index in unpacked array */
while (i < 80) { while (i < 86) {
int count = packed.charAt(i++); int count = packed.charAt(i++);
char value = packed.charAt(i++); char value = packed.charAt(i++);
do map[j++] = value; while (--count > 0); do map[j++] = value; while (--count > 0);
@@ -616,16 +628,26 @@ public final class JFlexASScanner {
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true; zzAtEOF = true;
switch (zzLexicalState) { switch (zzLexicalState) {
case FRAC: {
yybegin(YYINITIAL);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue);
}
case 30: break;
case EXP: {
yybegin(YYINITIAL);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.exp(exponent));
}
case 31: break;
case ID: { case ID: {
yybegin(YYINITIAL); yybegin(YYINITIAL);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length());
} }
case 21: break; case 32: break;
case NUM: { case NUM: {
yybegin(YYINITIAL); yybegin(YYINITIAL);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
} }
case 22: break; case 33: break;
default: default:
{ return new Token(Token.EOF, "", yyline+1, yycolumn+1); { return new Token(Token.EOF, "", yyline+1, yycolumn+1);
} }
@@ -637,61 +659,93 @@ public final class JFlexASScanner {
{ System.out.println("Illegal character <" + yytext() + ">"); { System.out.println("Illegal character <" + yytext() + ">");
return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
} }
case 14: break; case 20: break;
case 2: case 2:
{ /* Ignore */ { /* Ignore */
} }
case 15: break; case 21: break;
case 3: case 3:
{ yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">"); { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">");
idValue = yytext(); idValue = yytext();
} }
case 16: break; case 22: break;
case 4: case 4:
{ yybegin(NUM); { yybegin(NUM);
intValue = yycharat(0)-'0'; System.out.println("BEGIN INT <"+intValue+">"); intValue = yycharat(0)-'0';
numberString = yytext();
} }
case 17: break; case 23: break;
case 5: case 5:
{ return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1);
} }
case 18: break; case 24: break;
case 6: case 6:
{ return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1);
} }
case 19: break; case 25: break;
case 7: case 7:
{ return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1);
} }
case 20: break; case 26: break;
case 8: case 8:
{ yybegin(YYINITIAL);
yypushback(1);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue);
}
case 27: break;
case 9:
{ fracValue += (yycharat(0) - '0') * Math.pow(10, -++decimalPlace); numberString += yytext();
}
case 28: break;
case 10:
{ yybegin(YYINITIAL);
yypushback(1);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.exp(exponent));
}
case 29: break;
case 11:
{ numberString += yytext(); exponent = exponent * 10 + yycharat(0) - '0';
}
case 30: break;
case 12:
{ yybegin(YYINITIAL); { yybegin(YYINITIAL);
yypushback(1); yypushback(1);
return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length());
} }
case 21: break; case 31: break;
case 9: case 13:
{ idValue += yytext(); { idValue += yytext();
} }
case 22: break; case 32: break;
case 10: case 14:
{ yybegin(YYINITIAL); { yybegin(YYINITIAL);
yypushback(1); yypushback(1);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
} }
case 23: break; case 33: break;
case 11: case 15:
{ yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1);
} }
case 24: break; case 34: break;
case 12: case 16:
{ intValue = intValue * 10 + yycharat(0) - '0'; { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext();
} }
case 25: break; case 35: break;
case 13: case 17:
{ yybegin(FRAC);
fracValue = intValue;
System.out.println("BEGIN FRAC <"+yytext()+">");
numberString += yytext();
}
case 36: break;
case 18:
{ System.out.println("BEGIN EXP <"+yytext()+">"); yybegin(EXP); numberString += yytext(); exponent = yycharat(0) - '0';
}
case 37: break;
case 19:
{ return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1);
} }
case 26: break; case 38: break;
default: default:
zzScanError(ZZ_NO_MATCH); zzScanError(ZZ_NO_MATCH);
} }

View File

@@ -42,16 +42,16 @@ public final class JFlexASScanner {
* l is of the form l = 2*k, k a non negative integer * l is of the form l = 2*k, k a non negative integer
*/ */
private static final int ZZ_LEXSTATE[] = { private static final int ZZ_LEXSTATE[] = {
0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 4, 4, 5, 5
}; };
/** /**
* Translates characters to character classes * Translates characters to character classes
*/ */
private static final String ZZ_CMAP_PACKED = private static final String ZZ_CMAP_PACKED =
"\10\0\3\1\2\0\1\1\22\0\1\1\13\0\1\11\3\0\12\3"+ "\10\0\3\1\2\0\1\1\22\0\1\1\13\0\1\13\1\0\1\4"+
"\7\0\32\2\1\7\1\0\1\10\3\0\13\2\1\6\1\2\1\4"+ "\1\0\12\3\7\0\32\2\1\11\1\0\1\12\1\5\2\0\13\2"+
"\6\2\1\5\5\2\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uff95\0"; "\1\10\1\2\1\6\6\2\1\7\5\2\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uffff\0\uff95\0";
/** /**
* Translates characters to character classes * Translates characters to character classes
@@ -64,11 +64,12 @@ public final class JFlexASScanner {
private static final int [] ZZ_ACTION = zzUnpackAction(); private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 = private static final String ZZ_ACTION_PACKED_0 =
"\4\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+ "\6\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+
"\1\7\1\10\1\11\1\12\1\13\1\14\2\0\1\15"; "\1\7\1\10\1\11\1\10\1\12\1\13\1\14\1\15"+
"\1\16\1\17\1\20\1\0\1\21\1\0\1\22";
private static int [] zzUnpackAction() { private static int [] zzUnpackAction() {
int [] result = new int[20]; int [] result = new int[28];
int offset = 0; int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result; return result;
@@ -93,12 +94,13 @@ public final class JFlexASScanner {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 = private static final String ZZ_ROWMAP_PACKED_0 =
"\0\0\0\12\0\24\0\36\0\12\0\50\0\12\0\12"+ "\0\0\0\14\0\30\0\44\0\60\0\74\0\44\0\110"+
"\0\62\0\12\0\12\0\12\0\12\0\12\0\12\0\12"+ "\0\44\0\44\0\124\0\44\0\44\0\44\0\44\0\44"+
"\0\12\0\74\0\106\0\12"; "\0\140\0\44\0\44\0\44\0\44\0\44\0\44\0\44"+
"\0\154\0\44\0\170\0\44";
private static int [] zzUnpackRowMap() { private static int [] zzUnpackRowMap() {
int [] result = new int[20]; int [] result = new int[28];
int offset = 0; int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result; return result;
@@ -121,13 +123,15 @@ public final class JFlexASScanner {
private static final int [] ZZ_TRANS = zzUnpackTrans(); private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 = private static final String ZZ_TRANS_PACKED_0 =
"\1\5\1\6\1\7\1\10\1\11\2\7\1\12\1\13"+ "\1\7\1\10\1\11\1\12\2\7\1\13\2\11\1\14"+
"\1\14\12\0\2\15\5\16\3\15\2\17\1\20\1\21"+ "\1\15\1\16\3\17\1\20\1\17\1\21\6\17\3\0"+
"\3\20\3\17\1\0\1\6\15\0\1\22\12\0\1\23"+ "\1\22\24\0\2\23\2\24\2\23\3\24\3\23\2\25"+
"\11\0\1\24\3\0"; "\1\26\1\27\1\30\1\25\3\26\3\25\1\0\1\10"+
"\21\0\1\31\7\0\1\32\20\0\1\33\13\0\1\34"+
"\3\0";
private static int [] zzUnpackTrans() { private static int [] zzUnpackTrans() {
int [] result = new int[80]; int [] result = new int[132];
int offset = 0; int offset = 0;
offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
return result; return result;
@@ -165,11 +169,11 @@ public final class JFlexASScanner {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 = private static final String ZZ_ATTRIBUTE_PACKED_0 =
"\1\0\1\10\2\0\1\11\1\1\2\11\1\1\10\11"+ "\3\0\1\10\2\0\1\11\1\1\2\11\1\1\5\11"+
"\2\0\1\11"; "\1\1\7\11\1\0\1\11\1\0\1\11";
private static int [] zzUnpackAttribute() { private static int [] zzUnpackAttribute() {
int [] result = new int[20]; int [] result = new int[28];
int offset = 0; int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result; return result;
@@ -247,6 +251,14 @@ public final class JFlexASScanner {
/* user code: */ /* user code: */
String idValue = ""; String idValue = "";
int intValue = 0; int intValue = 0;
double fracValue = 0.0;
String numberString = "";
int decimalPlace = 0;
int exponent = 0;
private Token intToken(int value) {
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
}
/** /**
@@ -269,7 +281,7 @@ public final class JFlexASScanner {
char [] map = new char[0x110000]; char [] map = new char[0x110000];
int i = 0; /* index in packed string */ int i = 0; /* index in packed string */
int j = 0; /* index in unpacked array */ int j = 0; /* index in unpacked array */
while (i < 80) { while (i < 86) {
int count = packed.charAt(i++); int count = packed.charAt(i++);
char value = packed.charAt(i++); char value = packed.charAt(i++);
do map[j++] = value; while (--count > 0); do map[j++] = value; while (--count > 0);
@@ -615,8 +627,31 @@ public final class JFlexASScanner {
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true; zzAtEOF = true;
switch (zzLexicalState) {
case FRAC: {
yybegin(YYINITIAL);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue);
}
case 29: break;
case EXP: {
yybegin(YYINITIAL);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue);
}
case 30: break;
case ID: {
yybegin(YYINITIAL);
return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length());
}
case 31: break;
case NUM: {
yybegin(YYINITIAL);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
}
case 32: break;
default:
{ return new Token(Token.EOF, "", yyline+1, yycolumn+1); { return new Token(Token.EOF, "", yyline+1, yycolumn+1);
} }
}
} }
else { else {
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
@@ -624,61 +659,87 @@ public final class JFlexASScanner {
{ System.out.println("Illegal character <" + yytext() + ">"); { System.out.println("Illegal character <" + yytext() + ">");
return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
} }
case 14: break; case 19: break;
case 2: case 2:
{ /* Ignore */ { /* Ignore */
} }
case 15: break; case 20: break;
case 3: case 3:
{ yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">"); { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">");
idValue = yytext(); idValue = yytext();
} }
case 16: break; case 21: break;
case 4: case 4:
{ yybegin(NUM); { yybegin(NUM);
intValue = yycharat(0)-'0'; System.out.println("BEGIN INT <"+intValue+">"); intValue = yycharat(0)-'0';
numberString = yytext();
} }
case 17: break; case 22: break;
case 5: case 5:
{ return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1);
} }
case 18: break; case 23: break;
case 6: case 6:
{ return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1);
} }
case 19: break; case 24: break;
case 7: case 7:
{ return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1);
} }
case 20: break; case 25: break;
case 8: case 8:
{ yybegin(YYINITIAL);
yypushback(1);
return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue);
}
case 26: break;
case 9:
{ fracValue += (yycharat(0) - '0') * Math.pow(10, -++decimalPlace); numberString += yytext();
}
case 27: break;
case 10:
{ numberString += yytext(); exponent = exponent * 10 + yycharat(0) - '0';
}
case 28: break;
case 11:
{ yybegin(YYINITIAL); { yybegin(YYINITIAL);
yypushback(1); yypushback(1);
return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length());
} }
case 21: break; case 29: break;
case 9: case 12:
{ idValue += yytext(); { idValue += yytext();
} }
case 22: break; case 30: break;
case 10: case 13:
{ yybegin(YYINITIAL); { yybegin(YYINITIAL);
yypushback(1); yypushback(1);
return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
} }
case 23: break; case 31: break;
case 11: case 14:
{ yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1);
} }
case 24: break; case 32: break;
case 12: case 15:
{ intValue = intValue * 10 + yycharat(0) - '0'; { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext();
} }
case 25: break; case 33: break;
case 13: case 16:
{ yybegin(FRAC);
fracValue = intValue;
System.out.println("BEGIN FRAC <"+yytext()+">");
numberString += yytext();
}
case 34: break;
case 17:
{ System.out.println("BEGIN EXP <"+yytext()+">");yybegin(EXP); numberString += yytext(); exponent = yycharat(0) - '0';
}
case 35: break;
case 18:
{ return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1);
} }
case 26: break; case 36: break;
default: default:
zzScanError(ZZ_NO_MATCH); zzScanError(ZZ_NO_MATCH);
} }