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 65a6644..8aa07fc 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/bin/de/dhbw/compiler/jflexasscanner/NumToken.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/NumToken.class index bff1aa5..c38de9c 100644 Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/NumToken.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/NumToken.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 9e03609..b711ddd 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 @@ -32,8 +32,9 @@ package de.dhbw.compiler.jflexasscanner; 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()); + private Token numToken(String numberString, int value) { + //return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); + return new NumToken(numberString, yyline + 1, yycolumn + 1 - numberString.length(), intValue); } %} @@ -66,16 +67,16 @@ Power = \^{Numbers} { {Numbers} { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext(); } - {SmallChars} | {CapitalChars} { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); } + {SmallChars} | {CapitalChars} { yybegin(ID); idValue = numberString; yypushback(1); } <> { yybegin(YYINITIAL); - return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); } + return numToken(numberString, intValue); } {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()); } + return numToken(numberString, intValue); } } { @@ -91,7 +92,7 @@ Power = \^{Numbers} {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'; } + \^{Numbers} { yybegin(EXP); numberString += yytext(); exponent = yycharat(1) - '0'; System.out.println("BEGIN EXP <"+yytext()+"> / exponent: " + exponent); } [^] { yybegin(YYINITIAL); yypushback(1); return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue); } @@ -100,10 +101,12 @@ Power = \^{Numbers} { {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)); } + return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.pow(10, exponent)); } [^] { yybegin(YYINITIAL); yypushback(1); - return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.exp(exponent)); } + System.out.println("numberString: " + numberString); + System.out.println("fracValue: " + fracValue + " / exponent: " + exponent); + return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.pow(10, exponent)); } } [^] { System.out.println("Illegal character <" + yytext() + ">"); 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 96a4c93..74dba4c 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 @@ -256,8 +256,9 @@ public final class JFlexASScanner { 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()); + private Token numToken(String numberString, int value) { + //return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); + return new NumToken(numberString, yyline + 1, yycolumn + 1 - numberString.length(), intValue); } @@ -635,7 +636,7 @@ public final class JFlexASScanner { case 30: break; case EXP: { yybegin(YYINITIAL); - return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.exp(exponent)); + return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.pow(10, exponent)); } case 31: break; case ID: { @@ -645,7 +646,7 @@ public final class JFlexASScanner { case 32: break; case NUM: { yybegin(YYINITIAL); - return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); + return numToken(numberString, intValue); } case 33: break; default: @@ -700,7 +701,9 @@ public final class JFlexASScanner { case 10: { yybegin(YYINITIAL); yypushback(1); - return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.exp(exponent)); + System.out.println("numberString: " + numberString); + System.out.println("fracValue: " + fracValue + " / exponent: " + exponent); + return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.pow(10, exponent)); } case 29: break; case 11: @@ -720,11 +723,11 @@ public final class JFlexASScanner { case 14: { yybegin(YYINITIAL); yypushback(1); - return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); + return numToken(numberString, intValue); } case 33: break; case 15: - { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); + { yybegin(ID); idValue = numberString; yypushback(1); } case 34: break; case 16: @@ -739,7 +742,7 @@ public final class JFlexASScanner { } case 36: break; case 18: - { System.out.println("BEGIN EXP <"+yytext()+">"); yybegin(EXP); numberString += yytext(); exponent = yycharat(0) - '0'; + { yybegin(EXP); numberString += yytext(); exponent = yycharat(1) - '0'; System.out.println("BEGIN EXP <"+yytext()+"> / exponent: " + exponent); } case 37: break; case 19: 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 c7bbd44..9913fd9 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~ @@ -66,10 +66,10 @@ public final class JFlexASScanner { private static final String ZZ_ACTION_PACKED_0 = "\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"; + "\1\16\1\17\1\20\1\21\1\0\1\22\1\0\1\23"; private static int [] zzUnpackAction() { - int [] result = new int[28]; + int [] result = new int[29]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -97,10 +97,10 @@ public final class JFlexASScanner { "\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"; + "\0\44\0\154\0\44\0\170\0\44"; private static int [] zzUnpackRowMap() { - int [] result = new int[28]; + int [] result = new int[29]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -124,11 +124,11 @@ public final class JFlexASScanner { private static final String ZZ_TRANS_PACKED_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"; + "\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[132]; @@ -170,10 +170,10 @@ public final class JFlexASScanner { private static final String ZZ_ATTRIBUTE_PACKED_0 = "\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"; + "\1\1\10\11\1\0\1\11\1\0\1\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[28]; + int [] result = new int[29]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -256,8 +256,9 @@ public final class JFlexASScanner { 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()); + private Token numToken(String numberString, int value) { + //return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); + return new NumToken(numberString, yyline + 1, yycolumn + 1 - numberString.length(), intValue); } @@ -632,22 +633,22 @@ public final class JFlexASScanner { yybegin(YYINITIAL); return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue); } - case 29: break; + case 30: break; case EXP: { yybegin(YYINITIAL); - return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue); + return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.pow(10, exponent)); } - case 30: break; + case 31: break; case ID: { yybegin(YYINITIAL); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); } - case 31: break; + case 32: break; case NUM: { yybegin(YYINITIAL); - return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); + return numToken(numberString, intValue); } - case 32: break; + case 33: break; default: { return new Token(Token.EOF, "", yyline+1, yycolumn+1); } @@ -659,87 +660,95 @@ public final class JFlexASScanner { { System.out.println("Illegal character <" + yytext() + ">"); return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); } - case 19: break; + case 20: break; case 2: { /* Ignore */ } - case 20: break; + case 21: break; case 3: { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">"); idValue = yytext(); } - case 21: break; + case 22: break; case 4: { yybegin(NUM); intValue = yycharat(0)-'0'; numberString = yytext(); } - case 22: break; + case 23: break; case 5: { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); } - case 23: break; + case 24: break; case 6: { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); } - case 24: break; + case 25: break; case 7: { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); } - case 25: break; + case 26: break; case 8: { yybegin(YYINITIAL); yypushback(1); return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue); } - case 26: break; + case 27: break; case 9: { fracValue += (yycharat(0) - '0') * Math.pow(10, -++decimalPlace); numberString += yytext(); } - case 27: break; + case 28: break; case 10: + { yybegin(YYINITIAL); + yypushback(1); + System.out.println("numberString: " + numberString); + System.out.println("fracValue: " + fracValue + " / exponent: " + exponent); + return new FracToken(Token.FRAC, numberString, yyline+1, yycolumn+1-numberString.length(), fracValue * Math.pow(10, exponent)); + } + case 29: break; + case 11: { numberString += yytext(); exponent = exponent * 10 + yycharat(0) - '0'; } - case 28: break; - case 11: + case 30: break; + case 12: { yybegin(YYINITIAL); yypushback(1); return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); } - case 29: break; - case 12: + case 31: break; + case 13: { idValue += yytext(); } - case 30: break; - case 13: + 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 31: break; - case 14: - { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); - } - case 32: break; - case 15: - { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext(); + return numToken(numberString, intValue); } case 33: break; + case 15: + { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); + } + case 34: break; case 16: + { intValue = intValue * 10 + yycharat(0) - '0'; numberString += yytext(); + } + case 35: break; + case 17: { 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 36: break; case 18: + { yybegin(EXP); numberString += yytext(); exponent = yycharat(1) - '0'; System.out.println("BEGIN EXP <"+yytext()+"> / exponent: " + exponent); + } + case 37: break; + case 19: { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); } - case 36: 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/NumToken.java b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/NumToken.java index 957e74c..f6268b2 100644 --- a/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/NumToken.java +++ b/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/NumToken.java @@ -13,12 +13,15 @@ package de.dhbw.compiler.jflexasscanner; public class NumToken extends Token { - public NumToken(String text, int line, int column) { + private int value; + + public NumToken(String text, int line, int column, int value) { super(Token.NUM,text,line,column); + this.value = value; } int getValue() { - return Integer.parseInt(getText()); + return value; }