diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/.idea/vcs.xml b/ÜB-Praxis-JFlex Scanner für AS-Leer/.idea/vcs.xml
index 94a25f7..6c0b863 100644
--- a/ÜB-Praxis-JFlex Scanner für AS-Leer/.idea/vcs.xml
+++ b/ÜB-Praxis-JFlex Scanner für AS-Leer/.idea/vcs.xml
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/FracToken.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/FracToken.class
index dee394c..e7c32f3 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/FracToken.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/FracToken.class differ
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 86ce69b..8534ee6 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/JFlexASScanner.flex b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex
new file mode 100644
index 0000000..10a9644
--- /dev/null
+++ b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex
@@ -0,0 +1,75 @@
+/* **********************************************
+ * Duale Hochschule Baden-Württemberg Karlsruhe
+ * Prof. Dr. Jörn Eisenbiegler
+ *
+ * Vorlesung Übersetzerbau
+ * Praxis AS-Scanner mit JFlex 4
+ *
+ * **********************************************
+ */
+
+package de.dhbw.compiler.jflexasscanner;
+
+%%
+
+%class JFlexASScanner
+%function nextToken
+%type Token
+
+%unicode
+%line
+%column
+%public
+%final
+
+%xstate FRAC, EXP, STR, NULL, ID, NUM
+
+%{
+ String idValue = "";
+ int intValue = 0;
+%}
+
+WhiteSpace = [ \t\b\r\n]+
+SmallChars = [a-z]
+CapitalChars = [A-Z]
+Numbers = [0-9]
+AllChars = [a-zA-Z0-9]
+
+%eofval{
+ return new Token(Token.EOF, "", yyline+1, yycolumn+1);
+%eofval}
+
+%%
+//[^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); }
+{WhiteSpace} { /* Ignore */ }
+ {
+ "null" { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); }
+ {AllChars} { yybegin(ID);
+ idValue = yytext(); System.out.println("BEGIN ID <"+idValue+">"); }
+ {Numbers} { yybegin(NUM);
+ intValue = yycharat(0)-'0'; }
+ [\[] { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); }
+ [\]] { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); }
+ [,] { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); }
+}
+
+ {
+ {Numbers} { intValue = intValue * 10 + yycharat(0) - '0'; }
+ {SmallChars} | {CapitalChars} { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1); }
+ [^] { yybegin(YYINITIAL);
+ yypushback(1);
+ return new NumToken(String.valueOf(intValue), yyline+1, yycolumn+1); }
+
+ {
+ {AllChars} { idValue += yytext(); }
+}
+ [^] { yybegin(YYINITIAL);System.out.println("PUSHBACK BEFORE <"+yytext()+">");
+ yypushback(1); System.out.println("PUSHBACK AFTER <"+yytext()+">"); System.out.println("LINE <"+yyline+"> / COLUMN <"+yycolumn+">");
+ return new Token(Token.ID, idValue, yyline+1, yycolumn); }
+
+
+[^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
+ /*throw new Error("Illegal character <" + yytext() + ">"); */}
+
+
+
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java~ b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java~
new file mode 100644
index 0000000..ea54ce9
--- /dev/null
+++ b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScanner.java~
@@ -0,0 +1,695 @@
+/* The following code was generated by JFlex 1.6.1 */
+
+/* **********************************************
+ * Duale Hochschule Baden-Württemberg Karlsruhe
+ * Prof. Dr. Jörn Eisenbiegler
+ *
+ * Vorlesung Übersetzerbau
+ * Praxis AS-Scanner mit JFlex 4
+ *
+ * **********************************************
+ */
+
+package de.dhbw.compiler.jflexasscanner;
+
+
+/**
+ * This class is a scanner generated by
+ * JFlex 1.6.1
+ * from the specification file C:/Development/Schule/Java/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex
+ */
+public final class JFlexASScanner {
+
+ /** This character denotes the end of file */
+ public static final int YYEOF = -1;
+
+ /** initial size of the lookahead buffer */
+ private static final int ZZ_BUFFERSIZE = 16384;
+
+ /** lexical states */
+ public static final int YYINITIAL = 0;
+ public static final int FRAC = 2;
+ public static final int EXP = 4;
+ public static final int STR = 6;
+ public static final int NULL = 8;
+ public static final int NUM = 10;
+ public static final int ID = 12;
+
+ /**
+ * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
+ * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l
+ * at the beginning of a line
+ * 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
+ };
+
+ /**
+ * 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";
+
+ /**
+ * Translates characters to character classes
+ */
+ private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED);
+
+ /**
+ * Translates DFA states to action switch labels.
+ */
+ 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\1\15\2\0"+
+ "\1\16";
+
+ private static int [] zzUnpackAction() {
+ int [] result = new int[21];
+ int offset = 0;
+ offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackAction(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+
+ /**
+ * Translates a state to a row index in the transition table
+ */
+ 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\74\0\12\0\106\0\120\0\12";
+
+ private static int [] zzUnpackRowMap() {
+ int [] result = new int[21];
+ int offset = 0;
+ offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackRowMap(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int high = packed.charAt(i++) << 16;
+ result[j++] = high | packed.charAt(i++);
+ }
+ return j;
+ }
+
+ /**
+ * The transition table of the DFA
+ */
+ 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\1\16\1\17\3\16\3\15\1\20"+
+ "\1\21\5\22\3\20\1\0\1\6\15\0\1\23\5\0"+
+ "\1\21\16\0\1\24\11\0\1\25\3\0";
+
+ private static int [] zzUnpackTrans() {
+ int [] result = new int[90];
+ int offset = 0;
+ offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackTrans(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ value--;
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+
+ /* error codes */
+ private static final int ZZ_UNKNOWN_ERROR = 0;
+ private static final int ZZ_NO_MATCH = 1;
+ private static final int ZZ_PUSHBACK_2BIG = 2;
+
+ /* error messages for the codes above */
+ private static final String ZZ_ERROR_MSG[] = {
+ "Unknown internal scanner error",
+ "Error: could not match input",
+ "Error: pushback value was too large"
+ };
+
+ /**
+ * ZZ_ATTRIBUTE[aState] contains the attributes of state aState
+ */
+ 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\7\11"+
+ "\1\1\1\11\2\0\1\11";
+
+ private static int [] zzUnpackAttribute() {
+ int [] result = new int[21];
+ int offset = 0;
+ offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
+ return result;
+ }
+
+ private static int zzUnpackAttribute(String packed, int offset, int [] result) {
+ int i = 0; /* index in packed string */
+ int j = offset; /* index in unpacked array */
+ int l = packed.length();
+ while (i < l) {
+ int count = packed.charAt(i++);
+ int value = packed.charAt(i++);
+ do result[j++] = value; while (--count > 0);
+ }
+ return j;
+ }
+
+ /** the input device */
+ private java.io.Reader zzReader;
+
+ /** the current state of the DFA */
+ private int zzState;
+
+ /** the current lexical state */
+ private int zzLexicalState = YYINITIAL;
+
+ /** this buffer contains the current text to be matched and is
+ the source of the yytext() string */
+ private char zzBuffer[] = new char[ZZ_BUFFERSIZE];
+
+ /** the textposition at the last accepting state */
+ private int zzMarkedPos;
+
+ /** the current text position in the buffer */
+ private int zzCurrentPos;
+
+ /** startRead marks the beginning of the yytext() string in the buffer */
+ private int zzStartRead;
+
+ /** endRead marks the last character in the buffer, that has been read
+ from input */
+ private int zzEndRead;
+
+ /** number of newlines encountered up to the start of the matched text */
+ private int yyline;
+
+ /** the number of characters up to the start of the matched text */
+ private int yychar;
+
+ /**
+ * the number of characters from the last newline up to the start of the
+ * matched text
+ */
+ private int yycolumn;
+
+ /**
+ * zzAtBOL == true <=> the scanner is currently at the beginning of a line
+ */
+ private boolean zzAtBOL = true;
+
+ /** zzAtEOF == true <=> the scanner is at the EOF */
+ private boolean zzAtEOF;
+
+ /** denotes if the user-EOF-code has already been executed */
+ private boolean zzEOFDone;
+
+ /**
+ * The number of occupied positions in zzBuffer beyond zzEndRead.
+ * When a lead/high surrogate has been read from the input stream
+ * into the final zzBuffer position, this will have a value of 1;
+ * otherwise, it will have a value of 0.
+ */
+ private int zzFinalHighSurrogate = 0;
+
+ /* user code: */
+ int intValue = 0;
+ String idValue = "";
+
+
+ /**
+ * Creates a new scanner
+ *
+ * @param in the java.io.Reader to read input from.
+ */
+ public JFlexASScanner(java.io.Reader in) {
+ this.zzReader = in;
+ }
+
+
+ /**
+ * Unpacks the compressed character translation table.
+ *
+ * @param packed the packed character translation table
+ * @return the unpacked character translation table
+ */
+ private static char [] zzUnpackCMap(String packed) {
+ char [] map = new char[0x110000];
+ int i = 0; /* index in packed string */
+ int j = 0; /* index in unpacked array */
+ while (i < 80) {
+ int count = packed.charAt(i++);
+ char value = packed.charAt(i++);
+ do map[j++] = value; while (--count > 0);
+ }
+ return map;
+ }
+
+
+ /**
+ * Refills the input buffer.
+ *
+ * @return false, iff there was new input.
+ *
+ * @exception java.io.IOException if any I/O-Error occurs
+ */
+ private boolean zzRefill() throws java.io.IOException {
+
+ /* first: make room (if you can) */
+ if (zzStartRead > 0) {
+ zzEndRead += zzFinalHighSurrogate;
+ zzFinalHighSurrogate = 0;
+ System.arraycopy(zzBuffer, zzStartRead,
+ zzBuffer, 0,
+ zzEndRead-zzStartRead);
+
+ /* translate stored positions */
+ zzEndRead-= zzStartRead;
+ zzCurrentPos-= zzStartRead;
+ zzMarkedPos-= zzStartRead;
+ zzStartRead = 0;
+ }
+
+ /* is the buffer big enough? */
+ if (zzCurrentPos >= zzBuffer.length - zzFinalHighSurrogate) {
+ /* if not: blow it up */
+ char newBuffer[] = new char[zzBuffer.length*2];
+ System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length);
+ zzBuffer = newBuffer;
+ zzEndRead += zzFinalHighSurrogate;
+ zzFinalHighSurrogate = 0;
+ }
+
+ /* fill the buffer with new input */
+ int requested = zzBuffer.length - zzEndRead;
+ int numRead = zzReader.read(zzBuffer, zzEndRead, requested);
+
+ /* not supposed to occur according to specification of java.io.Reader */
+ if (numRead == 0) {
+ throw new java.io.IOException("Reader returned 0 characters. See JFlex examples for workaround.");
+ }
+ if (numRead > 0) {
+ zzEndRead += numRead;
+ /* If numRead == requested, we might have requested to few chars to
+ encode a full Unicode character. We assume that a Reader would
+ otherwise never return half characters. */
+ if (numRead == requested) {
+ if (Character.isHighSurrogate(zzBuffer[zzEndRead - 1])) {
+ --zzEndRead;
+ zzFinalHighSurrogate = 1;
+ }
+ }
+ /* potentially more input available */
+ return false;
+ }
+
+ /* numRead < 0 ==> end of stream */
+ return true;
+ }
+
+
+ /**
+ * Closes the input stream.
+ */
+ public final void yyclose() throws java.io.IOException {
+ zzAtEOF = true; /* indicate end of file */
+ zzEndRead = zzStartRead; /* invalidate buffer */
+
+ if (zzReader != null)
+ zzReader.close();
+ }
+
+
+ /**
+ * Resets the scanner to read from a new input stream.
+ * Does not close the old reader.
+ *
+ * All internal variables are reset, the old input stream
+ * cannot be reused (internal buffer is discarded and lost).
+ * Lexical state is set to ZZ_INITIAL.
+ *
+ * Internal scan buffer is resized down to its initial length, if it has grown.
+ *
+ * @param reader the new input stream
+ */
+ public final void yyreset(java.io.Reader reader) {
+ zzReader = reader;
+ zzAtBOL = true;
+ zzAtEOF = false;
+ zzEOFDone = false;
+ zzEndRead = zzStartRead = 0;
+ zzCurrentPos = zzMarkedPos = 0;
+ zzFinalHighSurrogate = 0;
+ yyline = yychar = yycolumn = 0;
+ zzLexicalState = YYINITIAL;
+ if (zzBuffer.length > ZZ_BUFFERSIZE)
+ zzBuffer = new char[ZZ_BUFFERSIZE];
+ }
+
+
+ /**
+ * Returns the current lexical state.
+ */
+ public final int yystate() {
+ return zzLexicalState;
+ }
+
+
+ /**
+ * Enters a new lexical state
+ *
+ * @param newState the new lexical state
+ */
+ public final void yybegin(int newState) {
+ zzLexicalState = newState;
+ }
+
+
+ /**
+ * Returns the text matched by the current regular expression.
+ */
+ public final String yytext() {
+ return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead );
+ }
+
+
+ /**
+ * Returns the character at position pos from the
+ * matched text.
+ *
+ * It is equivalent to yytext().charAt(pos), but faster
+ *
+ * @param pos the position of the character to fetch.
+ * A value from 0 to yylength()-1.
+ *
+ * @return the character at position pos
+ */
+ public final char yycharat(int pos) {
+ return zzBuffer[zzStartRead+pos];
+ }
+
+
+ /**
+ * Returns the length of the matched text region.
+ */
+ public final int yylength() {
+ return zzMarkedPos-zzStartRead;
+ }
+
+
+ /**
+ * Reports an error that occured while scanning.
+ *
+ * In a wellformed scanner (no or only correct usage of
+ * yypushback(int) and a match-all fallback rule) this method
+ * will only be called with things that "Can't Possibly Happen".
+ * If this method is called, something is seriously wrong
+ * (e.g. a JFlex bug producing a faulty scanner etc.).
+ *
+ * Usual syntax/scanner level error handling should be done
+ * in error fallback rules.
+ *
+ * @param errorCode the code of the errormessage to display
+ */
+ private void zzScanError(int errorCode) {
+ String message;
+ try {
+ message = ZZ_ERROR_MSG[errorCode];
+ }
+ catch (ArrayIndexOutOfBoundsException e) {
+ message = ZZ_ERROR_MSG[ZZ_UNKNOWN_ERROR];
+ }
+
+ throw new Error(message);
+ }
+
+
+ /**
+ * Pushes the specified amount of characters back into the input stream.
+ *
+ * They will be read again by then next call of the scanning method
+ *
+ * @param number the number of characters to be read again.
+ * This number must not be greater than yylength()!
+ */
+ public void yypushback(int number) {
+ if ( number > yylength() )
+ zzScanError(ZZ_PUSHBACK_2BIG);
+
+ zzMarkedPos -= number;
+ }
+
+
+ /**
+ * Resumes scanning until the next regular expression is matched,
+ * the end of input is encountered or an I/O-Error occurs.
+ *
+ * @return the next token
+ * @exception java.io.IOException if any I/O-Error occurs
+ */
+ public Token nextToken() throws java.io.IOException {
+ int zzInput;
+ int zzAction;
+
+ // cached fields:
+ int zzCurrentPosL;
+ int zzMarkedPosL;
+ int zzEndReadL = zzEndRead;
+ char [] zzBufferL = zzBuffer;
+ char [] zzCMapL = ZZ_CMAP;
+
+ int [] zzTransL = ZZ_TRANS;
+ int [] zzRowMapL = ZZ_ROWMAP;
+ int [] zzAttrL = ZZ_ATTRIBUTE;
+
+ while (true) {
+ zzMarkedPosL = zzMarkedPos;
+
+ boolean zzR = false;
+ int zzCh;
+ int zzCharCount;
+ for (zzCurrentPosL = zzStartRead ;
+ zzCurrentPosL < zzMarkedPosL ;
+ zzCurrentPosL += zzCharCount ) {
+ zzCh = Character.codePointAt(zzBufferL, zzCurrentPosL, zzMarkedPosL);
+ zzCharCount = Character.charCount(zzCh);
+ switch (zzCh) {
+ case '\u000B':
+ case '\u000C':
+ case '\u0085':
+ case '\u2028':
+ case '\u2029':
+ yyline++;
+ yycolumn = 0;
+ zzR = false;
+ break;
+ case '\r':
+ yyline++;
+ yycolumn = 0;
+ zzR = true;
+ break;
+ case '\n':
+ if (zzR)
+ zzR = false;
+ else {
+ yyline++;
+ yycolumn = 0;
+ }
+ break;
+ default:
+ zzR = false;
+ yycolumn += zzCharCount;
+ }
+ }
+
+ if (zzR) {
+ // peek one character ahead if it is \n (if we have counted one line too much)
+ boolean zzPeek;
+ if (zzMarkedPosL < zzEndReadL)
+ zzPeek = zzBufferL[zzMarkedPosL] == '\n';
+ else if (zzAtEOF)
+ zzPeek = false;
+ else {
+ boolean eof = zzRefill();
+ zzEndReadL = zzEndRead;
+ zzMarkedPosL = zzMarkedPos;
+ zzBufferL = zzBuffer;
+ if (eof)
+ zzPeek = false;
+ else
+ zzPeek = zzBufferL[zzMarkedPosL] == '\n';
+ }
+ if (zzPeek) yyline--;
+ }
+ zzAction = -1;
+
+ zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL;
+
+ zzState = ZZ_LEXSTATE[zzLexicalState];
+
+ // set up zzAction for empty match case:
+ int zzAttributes = zzAttrL[zzState];
+ if ( (zzAttributes & 1) == 1 ) {
+ zzAction = zzState;
+ }
+
+
+ zzForAction: {
+ while (true) {
+
+ if (zzCurrentPosL < zzEndReadL) {
+ zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
+ zzCurrentPosL += Character.charCount(zzInput);
+ }
+ else if (zzAtEOF) {
+ zzInput = YYEOF;
+ break zzForAction;
+ }
+ else {
+ // store back cached positions
+ zzCurrentPos = zzCurrentPosL;
+ zzMarkedPos = zzMarkedPosL;
+ boolean eof = zzRefill();
+ // get translated positions and possibly new buffer
+ zzCurrentPosL = zzCurrentPos;
+ zzMarkedPosL = zzMarkedPos;
+ zzBufferL = zzBuffer;
+ zzEndReadL = zzEndRead;
+ if (eof) {
+ zzInput = YYEOF;
+ break zzForAction;
+ }
+ else {
+ zzInput = Character.codePointAt(zzBufferL, zzCurrentPosL, zzEndReadL);
+ zzCurrentPosL += Character.charCount(zzInput);
+ }
+ }
+ int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
+ if (zzNext == -1) break zzForAction;
+ zzState = zzNext;
+
+ zzAttributes = zzAttrL[zzState];
+ if ( (zzAttributes & 1) == 1 ) {
+ zzAction = zzState;
+ zzMarkedPosL = zzCurrentPosL;
+ if ( (zzAttributes & 8) == 8 ) break zzForAction;
+ }
+
+ }
+ }
+
+ // store back cached position
+ zzMarkedPos = zzMarkedPosL;
+
+ if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
+ zzAtEOF = true;
+ { return new Token(Token.EOF, "", yyline+1, yycolumn+1);
+ }
+ }
+ else {
+ switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
+ case 1:
+ { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
+ /*throw new Error("Illegal character <" + yytext() + ">"); */
+ }
+ case 15: break;
+ case 2:
+ { /* Ignore */
+ }
+ case 16: break;
+ case 3:
+ { yybegin(ID);
+ idValue = yytext(); System.out.println("BEGIN ID <"+idValue+">");
+ }
+ case 17: break;
+ case 4:
+ { yybegin(NUM);
+ intValue = yycharat(0)-'0';
+ }
+ case 18: break;
+ case 5:
+ { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1);
+ }
+ case 19: break;
+ case 6:
+ { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1);
+ }
+ case 20: break;
+ case 7:
+ { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1);
+ }
+ case 21: break;
+ case 8:
+ { yybegin(YYINITIAL);
+ yypushback(1);
+ return new NumToken(String.valueOf(intValue), yyline+1, yycolumn+1);
+ }
+ case 22: break;
+ case 9:
+ { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1);
+ }
+ case 23: break;
+ case 10:
+ { intValue = intValue * 10 + yycharat(0) - '0';
+ }
+ case 24: break;
+ case 11:
+ { yybegin(YYINITIAL);System.out.println("PUSHBACK BEFORE <"+yytext()+">");
+ yypushback(1); System.out.println("PUSHBACK AFTER <"+yytext()+">"); System.out.println("LINE <"+yyline+"> / COLUMN <"+yycolumn+">");
+ return new Token(Token.ID, idValue, yyline+1, yycolumn);
+ }
+ case 25: break;
+ case 12:
+ {
+ }
+ case 26: break;
+ case 13:
+ { idValue += yytext(); System.out.println("IN ID <"+idValue+">");
+ }
+ case 27: break;
+ case 14:
+ { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1);
+ }
+ case 28: break;
+ default:
+ zzScanError(ZZ_NO_MATCH);
+ }
+ }
+ }
+ }
+
+
+}
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScannerMain.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScannerMain.class
index 908dab8..dc91e64 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScannerMain.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/JFlexASScannerMain.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 0d18168..bff1aa5 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/bin/de/dhbw/compiler/jflexasscanner/StringToken.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/StringToken.class
index b07c168..59e3968 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/StringToken.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/StringToken.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner1.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner1.class
index f954a21..7196c78 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner1.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner1.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner2.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner2.class
index c43a693..237cd91 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner2.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner2.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner3.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner3.class
index cf020e1..d5f9e1a 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner3.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner3.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner4.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner4.class
index 8f6bb12..f235c26 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner4.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner4.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner5.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner5.class
index 324295d..59f3889 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner5.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestASScanner5.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestsAll.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestsAll.class
index 5b44bed..f0ed92d 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestsAll.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TestsAll.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/Token.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/Token.class
index 70f35c5..bd5db19 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/Token.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/Token.class differ
diff --git a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TokenStreamTest.class b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TokenStreamTest.class
index 2120f9d..b8eef27 100644
Binary files a/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TokenStreamTest.class and b/ÜB-Praxis-JFlex Scanner für AS-Leer/bin/de/dhbw/compiler/jflexasscanner/TokenStreamTest.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 8d3f1c1..3dcb201 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
@@ -22,33 +22,58 @@ package de.dhbw.compiler.jflexasscanner;
%public
%final
-%xstate NUM, FRAC, EXP, STR, NULL
-
-WhiteSpace = [ \t\b\r\n]+
-SmallChars = [a-z]+
-CapitalChars = [A-Z]+
-Numbers = [0-9]+
-AllChars = [a-zA-Z0-9]+
-
+%xstate FRAC, EXP, STR, NULL, ID, NUM
%{
+ String idValue = "";
+ int intValue = 0;
%}
+WhiteSpace = [ \t\b\r\n]+
+SmallChars = [a-z]
+CapitalChars = [A-Z]
+Numbers = [0-9]
+AllChars = [a-zA-Z0-9]
+
%eofval{
return new Token(Token.EOF, "", yyline+1, yycolumn+1);
%eofval}
%%
//[^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); }
-"null" { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); }
-{Numbers} { return new Token(Token.NUM, yytext(), yyline+1, yycolumn+1); }
-{AllChars} { return new Token(Token.ID, yytext(), yyline+1, yycolumn+1); }
-[\[] { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); }
-[\]] { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); }
-[,] { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); }
{WhiteSpace} { /* Ignore */ }
-[^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
- /*throw new Error("Illegal character <" + yytext() + ">"); */}
+ {
+ "null" { return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1); }
+ {Numbers} { yybegin(NUM);
+ intValue = yycharat(0)-'0'; System.out.println("BEGIN INT <"+intValue+">"); }
+ {AllChars} { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">");
+ idValue = yytext(); }
+ [\[] { return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1); }
+ [\]] { return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1); }
+ [,] { return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1); }
+}
+
+ {
+ {Numbers} { intValue = intValue * 10 + yycharat(0) - '0'; }
+ {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()); }
+ [^] { yybegin(YYINITIAL);
+ yypushback(1);
+ return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); }
+}
+
+ {
+ {AllChars} { idValue += yytext(); }
+ <> { yybegin(YYINITIAL);
+ return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length()); }
+ [^] { yybegin(YYINITIAL);
+ yypushback(1);
+ return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length()); }
+}
+
+[^] { 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 cdfcec6..dd04437 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
@@ -28,11 +28,12 @@ public final class JFlexASScanner {
/** lexical states */
public static final int YYINITIAL = 0;
- public static final int NUM = 2;
- public static final int FRAC = 4;
- public static final int EXP = 6;
- public static final int STR = 8;
- public static final int NULL = 10;
+ public static final int FRAC = 2;
+ public static final int EXP = 4;
+ public static final int STR = 6;
+ public static final int NULL = 8;
+ public static final int ID = 10;
+ public static final int NUM = 12;
/**
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
@@ -41,7 +42,7 @@ 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, 1, 1
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3
};
/**
@@ -63,11 +64,11 @@ public final class JFlexASScanner {
private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 =
- "\2\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+
- "\1\7\2\3\1\10";
+ "\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";
private static int [] zzUnpackAction() {
- int [] result = new int[13];
+ int [] result = new int[20];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -92,11 +93,12 @@ public final class JFlexASScanner {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
- "\0\0\0\12\0\12\0\24\0\36\0\50\0\62\0\12"+
- "\0\12\0\12\0\74\0\106\0\36";
+ "\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";
private static int [] zzUnpackRowMap() {
- int [] result = new int[13];
+ int [] result = new int[20];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -119,10 +121,10 @@ public final class JFlexASScanner {
private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 =
- "\1\3\1\4\1\5\1\6\1\7\2\5\1\10\1\11"+
- "\1\12\13\0\1\4\12\0\5\5\5\0\1\5\1\6"+
- "\3\5\5\0\3\5\1\13\1\5\5\0\4\5\1\14"+
- "\5\0\4\5\1\15\3\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";
private static int [] zzUnpackTrans() {
int [] result = new int[80];
@@ -163,10 +165,11 @@ public final class JFlexASScanner {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
- "\1\0\1\10\1\11\4\1\3\11\3\1";
+ "\1\0\1\10\2\0\1\11\1\1\2\11\1\1\10\11"+
+ "\2\0\1\11";
private static int [] zzUnpackAttribute() {
- int [] result = new int[13];
+ int [] result = new int[20];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -242,6 +245,8 @@ public final class JFlexASScanner {
private int zzFinalHighSurrogate = 0;
/* user code: */
+ String idValue = "";
+ int intValue = 0;
/**
@@ -610,44 +615,83 @@ public final class JFlexASScanner {
if (zzInput == YYEOF && zzStartRead == zzCurrentPos) {
zzAtEOF = true;
+ switch (zzLexicalState) {
+ case ID: {
+ yybegin(YYINITIAL);
+ return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
+ }
+ case 21: break;
+ case NUM: {
+ yybegin(YYINITIAL);
+ return new Token(Token.NUM, String.valueOf(intValue), yyline+1, yycolumn+1-String.valueOf(intValue).length());
+ }
+ case 22: break;
+ default:
{ return new Token(Token.EOF, "", yyline+1, yycolumn+1);
}
+ }
}
else {
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
case 1:
- { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
- /*throw new Error("Illegal character <" + yytext() + ">"); */
+ { System.out.println("Illegal character <" + yytext() + ">");
+ return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
}
- case 9: break;
+ case 14: break;
case 2:
{ /* Ignore */
}
- case 10: break;
+ case 15: break;
case 3:
- { return new Token(Token.ID, yytext(), yyline+1, yycolumn+1);
+ { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">");
+ idValue = yytext();
}
- case 11: break;
+ case 16: break;
case 4:
- { return new Token(Token.NUM, yytext(), yyline+1, yycolumn+1);
+ { yybegin(NUM);
+ intValue = yycharat(0)-'0'; System.out.println("BEGIN INT <"+intValue+">");
}
- case 12: break;
+ case 17: break;
case 5:
{ return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1);
}
- case 13: break;
+ case 18: break;
case 6:
{ return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1);
}
- case 14: break;
+ case 19: break;
case 7:
{ return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1);
}
- case 15: break;
+ case 20: break;
case 8:
+ { yybegin(YYINITIAL);
+ yypushback(1);
+ return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length());
+ }
+ case 21: break;
+ case 9:
+ { idValue += yytext();
+ }
+ case 22: break;
+ case 10:
+ { 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:
+ { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1);
+ }
+ case 24: break;
+ case 12:
+ { intValue = intValue * 10 + yycharat(0) - '0';
+ }
+ case 25: break;
+ case 13:
{ return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1);
}
- case 16: break;
+ case 26: 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 1e1efe7..0d8ae72 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~
@@ -28,11 +28,12 @@ public final class JFlexASScanner {
/** lexical states */
public static final int YYINITIAL = 0;
- public static final int NUM = 2;
- public static final int FRAC = 4;
- public static final int EXP = 6;
- public static final int STR = 8;
- public static final int NULL = 10;
+ public static final int FRAC = 2;
+ public static final int EXP = 4;
+ public static final int STR = 6;
+ public static final int NULL = 8;
+ public static final int ID = 10;
+ public static final int NUM = 12;
/**
* ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l
@@ -41,7 +42,7 @@ 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, 1, 1
+ 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3
};
/**
@@ -63,11 +64,11 @@ public final class JFlexASScanner {
private static final int [] ZZ_ACTION = zzUnpackAction();
private static final String ZZ_ACTION_PACKED_0 =
- "\2\0\1\1\1\2\1\3\1\4\1\3\1\5\1\6"+
- "\1\7\2\3\1\10";
+ "\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";
private static int [] zzUnpackAction() {
- int [] result = new int[13];
+ int [] result = new int[20];
int offset = 0;
offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result);
return result;
@@ -92,11 +93,12 @@ public final class JFlexASScanner {
private static final int [] ZZ_ROWMAP = zzUnpackRowMap();
private static final String ZZ_ROWMAP_PACKED_0 =
- "\0\0\0\12\0\12\0\24\0\36\0\50\0\62\0\12"+
- "\0\12\0\12\0\74\0\106\0\36";
+ "\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";
private static int [] zzUnpackRowMap() {
- int [] result = new int[13];
+ int [] result = new int[20];
int offset = 0;
offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result);
return result;
@@ -119,10 +121,10 @@ public final class JFlexASScanner {
private static final int [] ZZ_TRANS = zzUnpackTrans();
private static final String ZZ_TRANS_PACKED_0 =
- "\1\3\1\4\1\5\1\6\1\7\2\5\1\10\1\11"+
- "\1\12\13\0\1\4\12\0\5\5\5\0\1\5\1\6"+
- "\3\5\5\0\3\5\1\13\1\5\5\0\4\5\1\14"+
- "\5\0\4\5\1\15\3\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";
private static int [] zzUnpackTrans() {
int [] result = new int[80];
@@ -163,10 +165,11 @@ public final class JFlexASScanner {
private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute();
private static final String ZZ_ATTRIBUTE_PACKED_0 =
- "\1\0\1\10\1\11\4\1\3\11\3\1";
+ "\1\0\1\10\2\0\1\11\1\1\2\11\1\1\10\11"+
+ "\2\0\1\11";
private static int [] zzUnpackAttribute() {
- int [] result = new int[13];
+ int [] result = new int[20];
int offset = 0;
offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result);
return result;
@@ -242,6 +245,8 @@ public final class JFlexASScanner {
private int zzFinalHighSurrogate = 0;
/* user code: */
+ String idValue = "";
+ int intValue = 0;
/**
@@ -616,37 +621,64 @@ public final class JFlexASScanner {
else {
switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) {
case 1:
- { throw new Error("Illegal character <" + yytext() + ">");
+ { System.out.println("Illegal character <" + yytext() + ">");
+ return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1);
}
- case 9: break;
+ case 14: break;
case 2:
{ /* Ignore */
}
- case 10: break;
+ case 15: break;
case 3:
- { return new Token(Token.ID, yytext(), yyline+1, yycolumn+1);
+ { yybegin(ID); System.out.println("BEGIN ID <"+yytext()+">");
+ idValue = yytext();
}
- case 11: break;
+ case 16: break;
case 4:
- { return new Token(Token.NUM, yytext(), yyline+1, yycolumn+1);
+ { yybegin(NUM);
+ intValue = yycharat(0)-'0'; System.out.println("BEGIN INT <"+intValue+">");
}
- case 12: break;
+ case 17: break;
case 5:
{ return new Token(Token.LSBR, yytext(), yyline+1, yycolumn+1);
}
- case 13: break;
+ case 18: break;
case 6:
{ return new Token(Token.RSBR, yytext(), yyline+1, yycolumn+1);
}
- case 14: break;
+ case 19: break;
case 7:
{ return new Token(Token.COMMA, yytext(), yyline+1, yycolumn+1);
}
- case 15: break;
+ case 20: break;
case 8:
+ { yybegin(YYINITIAL);
+ yypushback(1);
+ return new Token(Token.ID, idValue, yyline+1, yycolumn+1-idValue.length());
+ }
+ case 21: break;
+ case 9:
+ { idValue += yytext();
+ }
+ case 22: break;
+ case 10:
+ { 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:
+ { yybegin(ID); idValue = String.valueOf(intValue); yypushback(1);
+ }
+ case 24: break;
+ case 12:
+ { intValue = intValue * 10 + yycharat(0) - '0';
+ }
+ case 25: break;
+ case 13:
{ return new Token(Token.NULL, yytext(), yyline+1, yycolumn+1);
}
- case 16: break;
+ case 26: 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 18f3c13..957e74c 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
@@ -12,13 +12,13 @@
package de.dhbw.compiler.jflexasscanner;
public class NumToken extends Token {
-
- public NumToken(int type, String text, int line, int column) {
- super(type,text,line,column);
+
+ public NumToken(String text, int line, int column) {
+ super(Token.NUM,text,line,column);
}
int getValue() {
- return 0;
+ return Integer.parseInt(getText());
}