diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.class index 8534ee6..65a6644 100644 Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.class differ diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex index 3dcb201..9e03609 100644 --- a/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex +++ b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex @@ -27,6 +27,14 @@ package de.dhbw.compiler.jflexasscanner; %{ String idValue = ""; 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]+ @@ -34,6 +42,8 @@ SmallChars = [a-z] CapitalChars = [A-Z] Numbers = [0-9] AllChars = [a-zA-Z0-9] +Dot = [\.] +Power = \^{Numbers} %eofval{ return new Token(Token.EOF, "", yyline+1, yycolumn+1); @@ -45,7 +55,8 @@ AllChars = [a-zA-Z0-9] { "null" { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); } {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()+">"); idValue = yytext(); } [\[] { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); } @@ -54,10 +65,14 @@ AllChars = [a-zA-Z0-9] } { - {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); } <> { yybegin(YYINITIAL); 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); yypushback(1); 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] { {AllChars} { idValue += yytext(); } <> { 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); yypushback(1); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); } } + { + {Numbers} { fracValue += (yycharat(0) - '0') * Math.pow(10, -++decimalPlace); numberString += yytext(); } + <> { 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); } +} + + { + {Numbers} { numberString += yytext(); exponent = exponent * 10 + yycharat(0) - '0'; } + <> { 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() + ">"); return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); } diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java index dd04437..96a4c93 100644 --- a/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java +++ b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java @@ -42,16 +42,16 @@ public final class JFlexASScanner { * l is of the form l = 2*k, k a non negative integer */ 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 */ 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"+ - "\7\0\32\2\1\7\1\0\1\10\3\0\13\2\1\6\1\2\1\4"+ - "\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"; + "\10\0\3\1\2\0\1\1\22\0\1\1\13\0\1\13\1\0\1\4"+ + "\1\0\12\3\7\0\32\2\1\11\1\0\1\12\1\5\2\0\13\2"+ + "\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 @@ -64,11 +64,12 @@ public final class JFlexASScanner { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\4\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"; + "\6\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+ + "\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() { - int [] result = new int[20]; + int [] result = new int[29]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -93,12 +94,13 @@ public final class JFlexASScanner { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); 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\62\0\12\0\12\0\12\0\12\0\12\0\12\0\12"+ - "\0\12\0\74\0\106\0\12"; + "\0\0\0\14\0\30\0\44\0\60\0\74\0\44\0\110"+ + "\0\44\0\44\0\124\0\44\0\44\0\44\0\44\0\44"+ + "\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() { - int [] result = new int[20]; + int [] result = new int[29]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -121,13 +123,15 @@ public final class JFlexASScanner { private static final int [] ZZ_TRANS = zzUnpackTrans(); 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\14\12\0\2\15\5\16\3\15\2\17\1\20\1\21"+ - "\3\20\3\17\1\0\1\6\15\0\1\22\12\0\1\23"+ - "\11\0\1\24\3\0"; + "\1\7\1\10\1\11\1\12\2\7\1\13\2\11\1\14"+ + "\1\15\1\16\3\17\1\20\1\17\1\21\6\17\3\22"+ + "\1\23\10\22\14\0\2\24\2\25\2\24\3\25\3\24"+ + "\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() { - int [] result = new int[80]; + int [] result = new int[132]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -165,11 +169,11 @@ public final class JFlexASScanner { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\10\2\0\1\11\1\1\2\11\1\1\10\11"+ - "\2\0\1\11"; + "\3\0\1\10\2\0\1\11\1\1\2\11\1\1\5\11"+ + "\1\1\10\11\1\0\1\11\1\0\1\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[20]; + int [] result = new int[29]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -247,6 +251,14 @@ public final class JFlexASScanner { /* user code: */ String idValue = ""; 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]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 80) { + while (i < 86) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -616,16 +628,26 @@ public final class JFlexASScanner { if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { zzAtEOF = true; 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: { 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: { yybegin(YYINITIAL); return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); } - case 22: break; + case 33: break; default: { return new Token(Token.EOF, "", yyline+1, yycolumn+1); } @@ -637,61 +659,93 @@ public final class JFlexASScanner { { System.out.println("Illegal character <" + yytext() + ">"); return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); } - case 14: break; + case 20: break; case 2: { /* Ignore */ } - case 15: break; + case 21: break; case 3: { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">"); idValue = yytext(); } - case 16: break; + case 22: break; case 4: { 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: { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); } - case 18: break; + case 24: break; case 6: { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); } - case 19: break; + case 25: break; case 7: { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); } - case 20: break; + case 26: break; 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); yypushback(1); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); } - case 21: break; - case 9: + case 31: break; + case 13: { idValue += yytext(); } - case 22: break; - case 10: + case 32: break; + case 14: { yybegin(YYINITIAL); yypushback(1); return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); } - case 23: break; - case 11: + case 33: break; + case 15: { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); } - case 24: break; - case 12: - { intValue = intValue * 10 + yycharat(0) - '0'; + case 34: break; + case 16: + { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext(); } - case 25: break; - case 13: + case 35: break; + 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); } - case 26: break; + case 38: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java~ b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java~ index 0d8ae72..c7bbd44 100644 --- a/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java~ +++ b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java~ @@ -42,16 +42,16 @@ public final class JFlexASScanner { * l is of the form l = 2*k, k a non negative integer */ 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 */ 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"+ - "\7\0\32\2\1\7\1\0\1\10\3\0\13\2\1\6\1\2\1\4"+ - "\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"; + "\10\0\3\1\2\0\1\1\22\0\1\1\13\0\1\13\1\0\1\4"+ + "\1\0\12\3\7\0\32\2\1\11\1\0\1\12\1\5\2\0\13\2"+ + "\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 @@ -64,11 +64,12 @@ public final class JFlexASScanner { private static final int [] ZZ_ACTION = zzUnpackAction(); private static final String ZZ_ACTION_PACKED_0 = - "\4\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"; + "\6\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+ + "\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() { - int [] result = new int[20]; + int [] result = new int[28]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -93,12 +94,13 @@ public final class JFlexASScanner { private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); 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\62\0\12\0\12\0\12\0\12\0\12\0\12\0\12"+ - "\0\12\0\74\0\106\0\12"; + "\0\0\0\14\0\30\0\44\0\60\0\74\0\44\0\110"+ + "\0\44\0\44\0\124\0\44\0\44\0\44\0\44\0\44"+ + "\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() { - int [] result = new int[20]; + int [] result = new int[28]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -121,13 +123,15 @@ public final class JFlexASScanner { private static final int [] ZZ_TRANS = zzUnpackTrans(); 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\14\12\0\2\15\5\16\3\15\2\17\1\20\1\21"+ - "\3\20\3\17\1\0\1\6\15\0\1\22\12\0\1\23"+ - "\11\0\1\24\3\0"; + "\1\7\1\10\1\11\1\12\2\7\1\13\2\11\1\14"+ + "\1\15\1\16\3\17\1\20\1\17\1\21\6\17\3\0"+ + "\1\22\24\0\2\23\2\24\2\23\3\24\3\23\2\25"+ + "\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() { - int [] result = new int[80]; + int [] result = new int[132]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -165,11 +169,11 @@ public final class JFlexASScanner { private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\1\0\1\10\2\0\1\11\1\1\2\11\1\1\10\11"+ - "\2\0\1\11"; + "\3\0\1\10\2\0\1\11\1\1\2\11\1\1\5\11"+ + "\1\1\7\11\1\0\1\11\1\0\1\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[20]; + int [] result = new int[28]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -247,6 +251,14 @@ public final class JFlexASScanner { /* user code: */ String idValue = ""; 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]; int i = 0; /* index in packed string */ int j = 0; /* index in unpacked array */ - while (i < 80) { + while (i < 86) { int count = packed.charAt(i++); char value = packed.charAt(i++); do map[j++] = value; while (--count > 0); @@ -615,8 +627,31 @@ public final class JFlexASScanner { if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { 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); } + } } else { switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { @@ -624,61 +659,87 @@ public final class JFlexASScanner { { System.out.println("Illegal character <" + yytext() + ">"); return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); } - case 14: break; + case 19: break; case 2: { /* Ignore */ } - case 15: break; + case 20: break; case 3: { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">"); idValue = yytext(); } - case 16: break; + case 21: break; case 4: { 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: { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); } - case 18: break; + case 23: break; case 6: { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); } - case 19: break; + case 24: break; case 7: { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); } - case 20: break; + case 25: break; 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); yypushback(1); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); } - case 21: break; - case 9: + case 29: break; + case 12: { idValue += yytext(); } - case 22: break; - case 10: + case 30: break; + case 13: { yybegin(YYINITIAL); yypushback(1); return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); } - case 23: break; - case 11: + case 31: break; + case 14: { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); } - case 24: break; - case 12: - { intValue = intValue * 10 + yycharat(0) - '0'; + case 32: break; + case 15: + { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext(); } - case 25: break; - case 13: + case 33: break; + 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); } - case 26: break; + case 36: break; default: zzScanError(ZZ_NO_MATCH); }