From 7222ee5215907d1404c2825edfbceb2693be44bb Mon Sep 17 00:00:00 2001 From: Humenius Date: Wed, 29 Apr 2020 11:17:42 +0200 Subject: [PATCH] [03 - JFlex Scanner] Get TestASScanner2 to work --- .../jflexasscanner/JFlexASScanner.class | Bin 9855 -> 11107 bytes .../compiler/jflexasscanner/JFlexASScanner.flex | 40 ++++- .../compiler/jflexasscanner/JFlexASScanner.java | 140 +++++++++++------ .../jflexasscanner/JFlexASScanner.java~ | 141 +++++++++++++----- 4 files changed, 235 insertions(+), 86 deletions(-) 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 8534ee693e69c405271ab5e83f41b64a5b03ba86..65a66441f702f8ef5d06efb506aa2296c4eb8ef1 100644 GIT binary patch literal 11107 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�BS~9Scv***Pj8uKR!M(HoAWg6axDLAkapQ*x^KP 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 { "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); }