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()); }