diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/.idea/libraries/lib.xml b/ÜB-Praxis-Abstiegsparser für X-Leer/.idea/libraries/lib.xml new file mode 100644 index 0000000..fa8838a --- /dev/null +++ b/ÜB-Praxis-Abstiegsparser für X-Leer/.idea/libraries/lib.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/FloatConstToken.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/FloatConstToken.class index 34995af..6722396 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/FloatConstToken.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/FloatConstToken.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/IntConstToken.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/IntConstToken.class index 9127331..5c87c68 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/IntConstToken.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/IntConstToken.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.class index 887f0f9..df34117 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.java~ b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.java~ deleted file mode 100644 index 6b3d62a..0000000 --- a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.java~ +++ /dev/null @@ -1,991 +0,0 @@ -/* The following code was generated by JFlex 1.6.1 */ - -/* ********************************************** - * Duale Hochschule Baden-Württemberg Karlsruhe - * Prof. Dr. Jörn Eisenbiegler - * - * Vorlesung Übersetzerbau - * Praxis X Abstiegsparser - * - Scanner-Definition - * - * ********************************************** - */ - - -package de.dhbw.compiler.xparser; - - -/** - * This class is a scanner generated by - * JFlex 1.6.1 - * from the specification file C:/Users/eisenbiegler/Dropbox/workspace_�b/�B-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/XParser/JFlexXScanner.lex - */ -public final class JFlexXScanner { - - /** 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 INT = 2; - public static final int FRACTION = 4; - public static final int EXPVZ = 6; - public static final int EXP = 8; - public static final int STRING = 10; - - /** - * 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, 2, 2, 3, 3, 4, 4, 5, 5 - }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\10\0\3\42\1\0\2\42\22\0\1\43\1\0\1\41\5\0\1\24"+ - "\1\25\1\20\1\16\1\0\1\17\1\35\1\21\1\40\11\37\1\22"+ - "\1\32\1\26\1\23\1\27\2\0\4\36\1\45\25\36\1\0\1\44"+ - "\4\0\1\3\1\33\1\36\1\4\1\2\1\11\1\15\1\30\1\6"+ - "\2\36\1\12\1\34\1\7\1\13\1\5\1\36\1\1\1\14\1\10"+ - "\2\36\1\31\3\36\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 = - "\6\0\1\1\10\2\1\3\1\4\1\5\1\6\1\7"+ - "\1\10\1\11\1\12\1\13\1\14\1\2\1\15\1\2"+ - "\1\16\1\17\1\20\1\21\1\22\2\23\1\24\1\25"+ - "\2\26\1\27\2\30\1\31\1\32\1\33\1\34\1\35"+ - "\1\36\1\37\1\35\5\2\1\40\4\2\1\0\1\41"+ - "\2\2\1\42\1\0\1\43\1\0\1\44\1\45\1\46"+ - "\1\2\1\47\3\2\1\50\2\2\1\51\1\2\1\0"+ - "\2\2\1\52\1\53\2\2\1\54\2\2\1\55\2\2"+ - "\1\56\1\2\1\57\1\2\1\60\1\61\1\2\1\62"+ - "\1\63"; - - private static int [] zzUnpackAction() { - int [] result = new int[103]; - 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\46\0\114\0\162\0\230\0\276\0\344\0\u010a"+ - "\0\u0130\0\u0156\0\u017c\0\u01a2\0\u01c8\0\u01ee\0\u0214\0\344"+ - "\0\344\0\344\0\u023a\0\u0260\0\344\0\344\0\344\0\344"+ - "\0\344\0\u0286\0\344\0\u02ac\0\344\0\344\0\u02d2\0\344"+ - "\0\u02f8\0\344\0\u031e\0\344\0\344\0\344\0\u0344\0\344"+ - "\0\344\0\u036a\0\344\0\344\0\344\0\344\0\344\0\344"+ - "\0\344\0\u0390\0\u03b6\0\u03dc\0\u0402\0\u0428\0\u044e\0\u0156"+ - "\0\u0474\0\u049a\0\u04c0\0\u04e6\0\u050c\0\344\0\u0532\0\u0558"+ - "\0\344\0\u057e\0\344\0\u05a4\0\344\0\344\0\344\0\u05ca"+ - "\0\u0156\0\u05f0\0\u0616\0\u063c\0\u0156\0\u0662\0\u0688\0\u0156"+ - "\0\u06ae\0\u06d4\0\u06fa\0\u0720\0\u0156\0\u0156\0\u0746\0\u076c"+ - "\0\u0156\0\u0792\0\u07b8\0\344\0\u07de\0\u0804\0\u0156\0\u082a"+ - "\0\u0156\0\u0850\0\u0156\0\u0156\0\u0876\0\u0156\0\u0156"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[103]; - 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\7\1\10\1\11\2\12\1\13\1\14\1\12\1\15"+ - "\1\16\2\12\1\17\1\12\1\20\1\21\1\22\1\23"+ - "\1\24\1\25\1\26\1\27\1\30\1\31\1\12\1\32"+ - "\1\33\1\34\1\12\1\35\1\12\1\36\1\37\1\40"+ - "\2\41\1\7\1\12\2\42\1\43\32\42\1\44\1\42"+ - "\2\45\4\42\1\43\2\46\1\47\34\46\2\50\4\46"+ - "\1\47\17\51\1\52\17\51\1\53\1\54\5\51\37\55"+ - "\2\56\5\55\1\57\15\60\4\57\1\60\5\57\2\60"+ - "\1\57\4\60\2\57\1\61\1\57\1\60\1\62\1\60"+ - "\47\0\1\12\1\63\13\12\12\0\2\12\1\0\2\12"+ - "\1\0\3\12\4\0\1\12\1\0\6\12\1\64\2\12"+ - "\1\65\3\12\12\0\2\12\1\0\2\12\1\0\3\12"+ - "\4\0\1\12\1\0\15\12\12\0\2\12\1\0\2\12"+ - "\1\0\3\12\4\0\1\12\1\0\1\66\14\12\12\0"+ - "\2\12\1\0\2\12\1\0\3\12\4\0\1\12\1\0"+ - "\6\12\1\67\1\12\1\70\4\12\12\0\2\12\1\0"+ - "\2\12\1\0\3\12\4\0\1\12\1\0\15\12\12\0"+ - "\1\71\1\12\1\0\2\12\1\0\3\12\4\0\1\12"+ - "\1\0\11\12\1\72\1\73\2\12\12\0\2\12\1\0"+ - "\2\12\1\0\3\12\4\0\1\12\1\0\7\12\1\74"+ - "\5\12\12\0\2\12\1\0\2\12\1\0\3\12\4\0"+ - "\1\12\20\0\1\75\50\0\1\76\23\0\15\12\12\0"+ - "\1\77\1\12\1\0\2\12\1\0\3\12\4\0\1\12"+ - "\1\0\1\12\1\100\13\12\12\0\2\12\1\0\2\12"+ - "\1\0\3\12\4\0\1\12\35\0\1\101\52\0\2\41"+ - "\21\0\1\102\17\0\2\103\24\0\1\104\17\0\2\105"+ - "\44\0\1\106\1\54\46\0\1\107\5\0\2\12\1\110"+ - "\12\12\12\0\2\12\1\0\2\12\1\0\3\12\4\0"+ - "\1\12\1\0\3\12\1\111\11\12\12\0\2\12\1\0"+ - "\2\12\1\0\3\12\4\0\1\12\1\0\13\12\1\112"+ - "\1\12\12\0\2\12\1\0\2\12\1\0\3\12\4\0"+ - "\1\12\1\0\5\12\1\113\4\12\1\114\2\12\12\0"+ - "\2\12\1\0\2\12\1\0\3\12\4\0\1\12\1\0"+ - "\7\12\1\115\5\12\12\0\2\12\1\0\2\12\1\0"+ - "\3\12\4\0\1\12\1\0\1\12\1\116\13\12\12\0"+ - "\2\12\1\0\2\12\1\0\3\12\4\0\1\12\1\0"+ - "\12\12\1\117\2\12\12\0\2\12\1\0\2\12\1\0"+ - "\3\12\4\0\1\12\1\0\1\120\14\12\12\0\2\12"+ - "\1\0\2\12\1\0\3\12\4\0\1\12\1\0\1\121"+ - "\14\12\12\0\2\12\1\0\2\12\1\0\3\12\4\0"+ - "\1\12\20\75\1\122\25\75\1\0\5\12\1\123\7\12"+ - "\12\0\2\12\1\0\2\12\1\0\3\12\4\0\1\12"+ - "\1\0\14\12\1\124\12\0\2\12\1\0\2\12\1\0"+ - "\3\12\4\0\1\12\37\0\2\103\44\0\2\105\6\0"+ - "\3\12\1\125\11\12\12\0\2\12\1\0\2\12\1\0"+ - "\3\12\4\0\1\12\1\0\1\12\1\126\13\12\12\0"+ - "\2\12\1\0\2\12\1\0\3\12\4\0\1\12\1\0"+ - "\6\12\1\127\6\12\12\0\2\12\1\0\2\12\1\0"+ - "\3\12\4\0\1\12\1\0\14\12\1\130\12\0\2\12"+ - "\1\0\2\12\1\0\3\12\4\0\1\12\1\0\6\12"+ - "\1\131\6\12\12\0\2\12\1\0\2\12\1\0\3\12"+ - "\4\0\1\12\1\0\2\12\1\132\12\12\12\0\2\12"+ - "\1\0\2\12\1\0\3\12\4\0\1\12\1\0\5\12"+ - "\1\133\7\12\12\0\2\12\1\0\2\12\1\0\3\12"+ - "\4\0\1\12\20\75\1\122\1\134\24\75\1\0\11\12"+ - "\1\135\3\12\12\0\2\12\1\0\2\12\1\0\3\12"+ - "\4\0\1\12\1\0\5\12\1\136\7\12\12\0\2\12"+ - "\1\0\2\12\1\0\3\12\4\0\1\12\1\0\7\12"+ - "\1\137\5\12\12\0\2\12\1\0\2\12\1\0\3\12"+ - "\4\0\1\12\1\0\1\140\14\12\12\0\2\12\1\0"+ - "\2\12\1\0\3\12\4\0\1\12\1\0\7\12\1\141"+ - "\5\12\12\0\2\12\1\0\2\12\1\0\3\12\4\0"+ - "\1\12\1\0\6\12\1\142\6\12\12\0\2\12\1\0"+ - "\2\12\1\0\3\12\4\0\1\12\1\0\1\12\1\143"+ - "\13\12\12\0\2\12\1\0\2\12\1\0\3\12\4\0"+ - "\1\12\1\0\6\12\1\144\6\12\12\0\2\12\1\0"+ - "\2\12\1\0\3\12\4\0\1\12\1\0\2\12\1\145"+ - "\12\12\12\0\2\12\1\0\2\12\1\0\3\12\4\0"+ - "\1\12\1\0\14\12\1\146\12\0\2\12\1\0\2\12"+ - "\1\0\3\12\4\0\1\12\1\0\15\12\12\0\2\12"+ - "\1\0\1\12\1\147\1\0\3\12\4\0\1\12"; - - private static int [] zzUnpackTrans() { - int [] result = new int[2204]; - 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 = - "\6\0\1\11\10\1\3\11\2\1\5\11\1\1\1\11"+ - "\1\1\2\11\1\1\1\11\1\1\1\11\1\1\3\11"+ - "\1\1\2\11\1\1\7\11\13\1\1\0\1\11\2\1"+ - "\1\11\1\0\1\11\1\0\3\11\12\1\1\0\11\1"+ - "\1\11\13\1"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[103]; - 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: */ - private int intvalue=0; - private String textvalue =""; - private int fracvalue=0; - private int fraclength=0; - private int expvalue=0; - private int expsign=1; - private int startline =0; - private int startcolumn =0; - private String stringvalue=""; - - - /** - * Creates a new scanner - * - * @param in the java.io.Reader to read input from. - */ - public JFlexXScanner(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 < 140) { - 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; - switch (zzLexicalState) { - case INT: { - yybegin(YYINITIAL); - yypushback(1); - return new IntConstToken(Token.INTCONST, textvalue, startline, startcolumn, intvalue); - } - case 104: break; - case FRACTION: { - yybegin(YYINITIAL); - yypushback(1); - return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn,intvalue+fracvalue/Math.pow(10,fraclength)); - } - case 105: break; - case EXPVZ: { - yybegin(YYINITIAL); - yypushback(1); - return new Token(Token.INVALID, textvalue, startline, startcolumn); - } - case 106: break; - case EXP: { - yybegin(YYINITIAL); - yypushback(1); - return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn, (intvalue+fracvalue/Math.pow(10,fraclength))*Math.pow(10,expvalue*expsign)); - } - case 107: break; - case STRING: { - yybegin(YYINITIAL); return new Token(Token.INVALID, textvalue, startline, startcolumn); - } - case 108: break; - default: - { - return new Token(Token.EOF, yytext(), yyline+1, yycolumn+1); - } - } - } - else { - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 1: - { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); - } - case 52: break; - case 2: - { return new Token(Token.ID, yytext(), yyline+1, yycolumn+1); - } - case 53: break; - case 3: - { return new Token(Token.PLUS, yytext(), yyline+1, yycolumn+1); - } - case 54: break; - case 4: - { return new Token(Token.MINUS, yytext(), yyline+1, yycolumn+1); - } - case 55: break; - case 5: - { return new Token(Token.MULT, yytext(), yyline+1, yycolumn+1); - } - case 56: break; - case 6: - { return new Token(Token.DIV, yytext(), yyline+1, yycolumn+1); - } - case 57: break; - case 7: - { return new Token(Token.COLON, yytext(), yyline+1, yycolumn+1); - } - case 58: break; - case 8: - { return new Token(Token.EQUALS, yytext(), yyline+1, yycolumn+1); - } - case 59: break; - case 9: - { return new Token(Token.LBR, yytext(), yyline+1, yycolumn+1); - } - case 60: break; - case 10: - { return new Token(Token.RBR, yytext(), yyline+1, yycolumn+1); - } - case 61: break; - case 11: - { return new Token(Token.LESS, yytext(), yyline+1, yycolumn+1); - } - case 62: break; - case 12: - { return new Token(Token.MORE, yytext(), yyline+1, yycolumn+1); - } - case 63: break; - case 13: - { return new Token(Token.SEMICOLON, yytext(), yyline+1, yycolumn+1); - } - case 64: break; - case 14: - { return new Token(Token.DOT, yytext(), yyline+1, yycolumn+1); - } - case 65: break; - case 15: - { yybegin(INT); textvalue=yytext(); startline=yyline+1; startcolumn=yycolumn+1; - intvalue=yytext().charAt(0)-'0'; fracvalue=0; fraclength=0; expvalue=0; - } - case 66: break; - case 16: - { return new IntConstToken(Token.INTCONST, yytext(), yyline+1, yycolumn+1, 0); - } - case 67: break; - case 17: - { yybegin(STRING); textvalue="\""; stringvalue=""; startline=yyline+1; startcolumn=yycolumn+1; - } - case 68: break; - case 18: - { /* eat whitespace */ - } - case 69: break; - case 19: - { yybegin(YYINITIAL); - yypushback(1); - return new IntConstToken(Token.INTCONST, textvalue, startline, startcolumn, intvalue); - } - case 70: break; - case 20: - { yybegin(FRACTION); - textvalue+=yytext(); - } - case 71: break; - case 21: - { intvalue = 10*intvalue + yytext().charAt(0)-'0'; - textvalue+=yytext(); - } - case 72: break; - case 22: - { yybegin(YYINITIAL); - yypushback(1); - return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn,intvalue+fracvalue/Math.pow(10,fraclength)); - } - case 73: break; - case 23: - { fracvalue= 10*fracvalue+ yytext().charAt(0)-'0'; - fraclength++; - textvalue+=yytext(); - } - case 74: break; - case 24: - { yybegin(YYINITIAL); - yypushback(1); - return new Token(Token.INVALID, textvalue, startline, startcolumn); - } - case 75: break; - case 25: - { yybegin(EXP); expvalue=yytext().charAt(0)-'0'; expsign=1; textvalue+=yytext(); - } - case 76: break; - case 26: - { yybegin(YYINITIAL); - return new FloatConstToken(Token.FLOATCONST, textvalue+yytext(), startline, startcolumn,intvalue+fracvalue/Math.pow(10,fraclength)); - } - case 77: break; - case 27: - { yybegin(YYINITIAL); - yypushback(1); - return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn, (intvalue+fracvalue/Math.pow(10,fraclength))*Math.pow(10,expvalue*expsign)); - } - case 78: break; - case 28: - { expvalue = 10* expvalue + yytext().charAt(0)-'0'; textvalue+=yytext(); - } - case 79: break; - case 29: - { yybegin(YYINITIAL); return new Token(Token.INVALID, textvalue+yytext(), startline, startcolumn); - } - case 80: break; - case 30: - { textvalue+=yytext(); stringvalue+=yytext(); - } - case 81: break; - case 31: - { yybegin(YYINITIAL); return new StringConstToken(Token.STRINGCONST, textvalue+"\"", startline, startcolumn, stringvalue); - } - case 82: break; - case 32: - { return new Token(Token.IF, yytext(), yyline+1, yycolumn+1); - } - case 83: break; - case 33: - { return new Token(Token.ASSIGN, yytext(), yyline+1, yycolumn+1); - } - case 84: break; - case 34: - // lookahead expression with fixed base length - zzMarkedPos = Character.offsetByCodePoints - (zzBufferL, zzStartRead, zzEndRead - zzStartRead, zzStartRead, 1); - { yybegin(INT); textvalue=yytext(); startline=yyline+1; startcolumn=yycolumn+1; - intvalue=yytext().charAt(0)-'0'; fracvalue=0; fraclength=0; expvalue=0; - } - case 85: break; - case 35: - // lookahead expression with fixed base length - zzMarkedPos = Character.offsetByCodePoints - (zzBufferL, zzStartRead, zzEndRead - zzStartRead, zzStartRead, 1); - { yybegin(EXPVZ); textvalue += yytext(); - } - case 86: break; - case 36: - // lookahead expression with fixed base length - zzMarkedPos = Character.offsetByCodePoints - (zzBufferL, zzStartRead, zzEndRead - zzStartRead, zzStartRead, 1); - { yybegin(EXPVZ); - textvalue+=yytext(); - } - case 87: break; - case 37: - { yybegin(EXP); expvalue=yytext().charAt(1)-'0'; expsign=-1; textvalue+=yytext(); - } - case 88: break; - case 38: - { textvalue+="\\\""; stringvalue+="\""; - } - case 89: break; - case 39: - { return new Token(Token.END, yytext(), yyline+1, yycolumn+1); - } - case 90: break; - case 40: - { return new Token(Token.INT, yytext(), yyline+1, yycolumn+1); - } - case 91: break; - case 41: - { return new Token(Token.FOR, yytext(), yyline+1, yycolumn+1); - } - case 92: break; - case 42: - { return new Token(Token.READ, yytext(), yyline+1, yycolumn+1); - } - case 93: break; - case 43: - { return new Token(Token.ELSE, yytext(), yyline+1, yycolumn+1); - } - case 94: break; - case 44: - { return new Token(Token.THEN, yytext(), yyline+1, yycolumn+1); - } - case 95: break; - case 45: - { /* eat comments */ - } - case 96: break; - case 46: - { return new Token(Token.PRINT, yytext(), yyline+1, yycolumn+1); - } - case 97: break; - case 47: - { return new Token(Token.FLOAT, yytext(), yyline+1, yycolumn+1); - } - case 98: break; - case 48: - { return new Token(Token.WHILE, yytext(), yyline+1, yycolumn+1); - } - case 99: break; - case 49: - { return new Token(Token.BEGIN, yytext(), yyline+1, yycolumn+1); - } - case 100: break; - case 50: - { return new Token(Token.STRING, yytext(), yyline+1, yycolumn+1); - } - case 101: break; - case 51: - { return new Token(Token.PROGRAM, yytext(), yyline+1, yycolumn+1); - } - case 102: break; - default: - zzScanError(ZZ_NO_MATCH); - } - } - } - } - - -} diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.lex b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.lex new file mode 100644 index 0000000..9373246 --- /dev/null +++ b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/JFlexXScanner.lex @@ -0,0 +1,148 @@ +/* ********************************************** + * Duale Hochschule Baden-Württemberg Karlsruhe + * Prof. Dr. Jörn Eisenbiegler + * + * Vorlesung Übersetzerbau + * Praxis X Abstiegsparser + * - Scanner-Definition + * + * ********************************************** + */ + + +package de.dhbw.compiler.xparser; + +%% + +%class JFlexXScanner +%type Token +%function nextToken + + +%unicode +%line +%column + +%public +%final + +%xstate INT, FRACTION, EXPVZ, EXP, STRING + +%{ + private int intvalue=0; + private String textvalue =""; + private int fracvalue=0; + private int fraclength=0; + private int expvalue=0; + private int expsign=1; + private int startline =0; + private int startcolumn =0; + private String stringvalue=""; +%} + + + +%% + +read { return new Token(Token.READ, yytext(), yyline+1, yycolumn+1); } +print { return new Token(Token.PRINT, yytext(), yyline+1, yycolumn+1); } +int { return new Token(Token.INT, yytext(), yyline+1, yycolumn+1); } +float { return new Token(Token.FLOAT, yytext(), yyline+1, yycolumn+1); } +string { return new Token(Token.STRING, yytext(), yyline+1, yycolumn+1); } +\+ { return new Token(Token.PLUS, yytext(), yyline+1, yycolumn+1); } +\- { return new Token(Token.MINUS, yytext(), yyline+1, yycolumn+1); } +\* { return new Token(Token.MULT, yytext(), yyline+1, yycolumn+1); } +\/ { return new Token(Token.DIV, yytext(), yyline+1, yycolumn+1); } +:= { return new Token(Token.ASSIGN, yytext(), yyline+1, yycolumn+1); } +\( { return new Token(Token.LBR, yytext(), yyline+1, yycolumn+1); } +\) { return new Token(Token.RBR, yytext(), yyline+1, yycolumn+1); } +\< { return new Token(Token.LESS, yytext(), yyline+1, yycolumn+1); } +> { return new Token(Token.MORE, yytext(), yyline+1, yycolumn+1); } += { return new Token(Token.EQUALS, yytext(), yyline+1, yycolumn+1); } +if { return new Token(Token.IF, yytext(), yyline+1, yycolumn+1); } +then { return new Token(Token.THEN, yytext(), yyline+1, yycolumn+1); } +else { return new Token(Token.ELSE, yytext(), yyline+1, yycolumn+1); } +while { return new Token(Token.WHILE, yytext(), yyline+1, yycolumn+1); } +for { return new Token(Token.FOR, yytext(), yyline+1, yycolumn+1); } +; { return new Token(Token.SEMICOLON, yytext(), yyline+1, yycolumn+1); } +begin { return new Token(Token.BEGIN, yytext(), yyline+1, yycolumn+1); } +end { return new Token(Token.END, yytext(), yyline+1, yycolumn+1); } +program { return new Token(Token.PROGRAM, yytext(), yyline+1, yycolumn+1); } +\. { return new Token(Token.DOT, yytext(), yyline+1, yycolumn+1); } +: { return new Token(Token.COLON, yytext(), yyline+1, yycolumn+1); } + + +[a-zA-Z][a-zA-Z0-9]* { return new Token(Token.ID, yytext(), yyline+1, yycolumn+1); } + +0 { return new IntConstToken(Token.INTCONST, yytext(), yyline+1, yycolumn+1, 0); } +0/\. { yybegin(INT); textvalue=yytext(); startline=yyline+1; startcolumn=yycolumn+1; + intvalue=yytext().charAt(0)-'0'; fracvalue=0; fraclength=0; expvalue=0; } +[1-9] { yybegin(INT); textvalue=yytext(); startline=yyline+1; startcolumn=yycolumn+1; + intvalue=yytext().charAt(0)-'0'; fracvalue=0; fraclength=0; expvalue=0; } + +\" { yybegin(STRING); textvalue="\""; stringvalue=""; startline=yyline+1; startcolumn=yycolumn+1; } + +(\/\*)~(\*\/) { /* eat comments */ } +[\ \t\b\f\r\n]+ { /* eat whitespace */ } +<> { return new Token(Token.EOF, yytext(), yyline+1, yycolumn+1); } +[^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); } + + { + [a-zA-Z \.:] { textvalue+=yytext(); stringvalue+=yytext(); } + \\\" { textvalue+="\\\""; stringvalue+="\""; } + \" { yybegin(YYINITIAL); return new StringConstToken(Token.STRINGCONST, textvalue+"\"", startline, startcolumn, stringvalue); } + [^] { yybegin(YYINITIAL); return new Token(Token.INVALID, textvalue+yytext(), startline, startcolumn); } + <> { yybegin(YYINITIAL); return new Token(Token.INVALID, textvalue, startline, startcolumn); } +} + + { + [0-9] { intvalue = 10*intvalue + yytext().charAt(0)-'0'; + textvalue+=yytext();} + \. { yybegin(FRACTION); + textvalue+=yytext();} + [eE]/-?[0-9] { yybegin(EXPVZ); textvalue += yytext(); } + [^] { yybegin(YYINITIAL); + yypushback(1); + return new IntConstToken(Token.INTCONST, textvalue, startline, startcolumn, intvalue); } + <> { yybegin(YYINITIAL); + yypushback(1); + return new IntConstToken(Token.INTCONST, textvalue, startline, startcolumn, intvalue);} +} + + { + [0-9] { fracvalue= 10*fracvalue+ yytext().charAt(0)-'0'; + fraclength++; + textvalue+=yytext();} + [eE]/-?[0-9] { yybegin(EXPVZ); + textvalue+=yytext();} + [^] { yybegin(YYINITIAL); + yypushback(1); + return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn,intvalue+fracvalue/Math.pow(10,fraclength)); } + <> { yybegin(YYINITIAL); + yypushback(1); + return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn,intvalue+fracvalue/Math.pow(10,fraclength)); } +} + + { + -0|0 { yybegin(YYINITIAL); + return new FloatConstToken(Token.FLOATCONST, textvalue+yytext(), startline, startcolumn,intvalue+fracvalue/Math.pow(10,fraclength)); } + -[1-9] { yybegin(EXP); expvalue=yytext().charAt(1)-'0'; expsign=-1; textvalue+=yytext(); } + [1-9] { yybegin(EXP); expvalue=yytext().charAt(0)-'0'; expsign=1; textvalue+=yytext(); } + [^] { yybegin(YYINITIAL); + yypushback(1); + return new Token(Token.INVALID, textvalue, startline, startcolumn); } + <> { yybegin(YYINITIAL); + yypushback(1); + return new Token(Token.INVALID, textvalue, startline, startcolumn); } +} + + { + [0-9] { expvalue = 10* expvalue + yytext().charAt(0)-'0'; textvalue+=yytext(); } + [^] { yybegin(YYINITIAL); + yypushback(1); + return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn, (intvalue+fracvalue/Math.pow(10,fraclength))*Math.pow(10,expvalue*expsign)); } + <> { yybegin(YYINITIAL); + yypushback(1); + return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn, (intvalue+fracvalue/Math.pow(10,fraclength))*Math.pow(10,expvalue*expsign)); } +} + diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/StringConstToken.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/StringConstToken.class index 7f6706a..a25908a 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/StringConstToken.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/StringConstToken.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Token.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Token.class index a4c78b4..21d35eb 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Token.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Token.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/TokenReader.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/TokenReader.class index c2d508c..9786511 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/TokenReader.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/TokenReader.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Tree.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Tree.class index 762ac5a..305e4d6 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Tree.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/Tree.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class index 1c1d5a0..2bea52c 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParser.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParserMain.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParserMain.class index adbd360..6d1f52a 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParserMain.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/XParserMain.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/ParseTreeTest.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/ParseTreeTest.class index deb317a..49bbd84 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/ParseTreeTest.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/ParseTreeTest.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser.class index 88a2690..7fd24a7 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser1.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser1.class index 5325291..fc0c903 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser1.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser1.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser2.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser2.class index ecc9e68..4a43f9e 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser2.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXASTParser2.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner1.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner1.class index d91da5d..0964237 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner1.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner1.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner2.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner2.class index f298017..0427177 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner2.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner2.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner3.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner3.class index 5a5e3e5..677fdde 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner3.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXScanner3.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser.class index 76ceeeb..a453b6f 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser1.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser1.class index 52f8468..27e7555 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser1.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser1.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser2.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser2.class index e4e7411..a2b396a 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser2.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXTopDownParser2.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser.class index 1af067d..b2e75d8 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser1.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser1.class index 33f03ec..cff03bd 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser1.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TestXminTopDownParser1.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TokenStreamTest.class b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TokenStreamTest.class index 13a864c..90da404 100644 Binary files a/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TokenStreamTest.class and b/ÜB-Praxis-Abstiegsparser für X-Leer/bin/de/dhbw/compiler/xparser/test/TokenStreamTest.class differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/lib/hamcrest-all-1.3.jar b/ÜB-Praxis-Abstiegsparser für X-Leer/lib/hamcrest-all-1.3.jar new file mode 100644 index 0000000..6f62ba0 Binary files /dev/null and b/ÜB-Praxis-Abstiegsparser für X-Leer/lib/hamcrest-all-1.3.jar differ diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java b/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java index 7fb6dfe..df274c8 100644 --- a/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java +++ b/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParser.java @@ -12,15 +12,163 @@ package de.dhbw.compiler.xparser; public class XParser { - + private final TokenReader in; public XParser(TokenReader in) { - //TODO Initialization + this.in = in; } public Tree parseProgram() { - //TODO Parser + int oldPosition = in.getPosition(); + Tree program, id, semicolon, block, dot, eof; + + if ((program = parseToken(Token.PROGRAM)) != null + && ((id = parseToken(Token.ID)) != null) + && ((semicolon = parseToken(Token.SEMICOLON)) != null) + && ((block = parseBlock()) != null) + && ((dot = parseToken(Token.DOT)) != null) + && ((eof = parseToken(Token.EOF)) != null)) { + Tree tree = new Tree(new Token(Token.APROGRAM)); + tree.addLastChild(program); + tree.addLastChild(id); + tree.addLastChild(semicolon); + tree.addLastChild(block); + tree.addLastChild(dot); + tree.addLastChild(eof); + + return tree; + } + + System.out.println("> Skipping Tree"); + in.setPosition(oldPosition); return null; } + private Tree parseBlock() { + int oldPosition = in.getPosition(); + + Tree begin, statList, end; + if ((begin = parseToken(Token.BEGIN)) != null + && (statList = parseStatList()) != null + && (end = parseToken(Token.END)) != null) { + Tree tree = new Tree(new Token(Token.BLOCK)); + tree.addFirstChild(begin); + tree.addLastChild(statList); + tree.addLastChild(end); + + return tree; + } + + System.out.println("parseBlock> Skipping Tree"); + in.setPosition(oldPosition); + return null; + } + + private Tree parseStatList() { + // int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.STATLIST)); + Tree stat; + + while ((stat = parseStatWithSemicolon()) != null) { + tree.addLastChild(stat); + } + +// if ((block = parseBlock()) != null) { +// tree.addFirstChild(new Tree(new Token(Token.STATWITHSEMI))); +// tree.addFirstChild(block); +// tree.addLastChild(new Tree(new Token(Token.SEMICOLON))); +// +// return tree; +// } + + // in.setPosition(oldPosition); + return tree; + } + + private Tree parseStatWithSemicolon() { + int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.STATWITHSEMI)); + Tree state, semicolon; + + if (((state = parseStat()) != null) + && ((semicolon = parseToken(Token.SEMICOLON)) != null)) { + tree.addLastChild(state); + tree.addLastChild(semicolon); + return tree; + } + + in.setPosition(oldPosition); + return null; + } + + private Tree parseStat() { + int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.STAT)); + Tree numAssign, condStat, block; + + if ((numAssign = parseNumAssign()) != null) { + tree.addLastChild(numAssign); + return tree; + } + + in.setPosition(oldPosition); + if ((condStat = parseCondStat()) != null) { + tree.addLastChild(condStat); + return tree; + } + + in.setPosition(oldPosition); + if ((block = parseBlock()) != null) { + tree.addLastChild(block); + return tree; + } + + in.setPosition(oldPosition); + return null; + } + + private Tree parseCondStat() { + return null; + } + + private Tree parseNumAssign() { + int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.ASSIGNSTAT)); + Tree id, assign, numExpr; + + if ((id = parseToken(Token.ID)) != null + && (assign = parseToken(Token.ASSIGN)) != null + && (numExpr = parseNumExpr()) != null) { + tree.addLastChild(id); + tree.addLastChild(assign); + tree.addLastChild(numExpr); + return tree; + } + + in.setPosition(oldPosition); + return null; + } + + private Tree parseNumExpr() { + int oldPosition = in.getPosition(); + Tree tree = new Tree(new Token(Token.EXPR)); + + + + return null; + } + + private Tree parseToken(int tokenType) { + int oldPosition = in.getPosition(); + Token nextToken = in.nextToken(); + System.out.println("parseToken> " + nextToken); + if (nextToken.getType() == tokenType) { + return new Tree(nextToken); + } else { + // Reset to last position as it needs to be re-read again + in.setPosition(oldPosition); + return null; + } + } + } diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParserMain.java b/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParserMain.java index 2734bda..548d6f7 100644 --- a/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParserMain.java +++ b/ÜB-Praxis-Abstiegsparser für X-Leer/src/de/dhbw/compiler/xparser/XParserMain.java @@ -12,7 +12,7 @@ package de.dhbw.compiler.xparser; import java.io.PrintWriter; import java.io.StringReader; - +import java.util.Scanner; public class XParserMain { @@ -75,7 +75,12 @@ public class XParserMain { //TODO Initialize scanner and parser //TODO Call parser //TODO Output: Tree, count of tokens and comparisons - + StringReader reader = new StringReader(BEISPIELFOLIEN); + JFlexXScanner scanner = new JFlexXScanner(reader); + TokenReader tokenReader = new TokenReader(scanner); + XParser parser = new XParser(tokenReader); + + parser.parseProgram(); } } diff --git a/ÜB-Praxis-Abstiegsparser für X-Leer/ÜB-Praxis-Abstiegsparser für X-Leer.iml b/ÜB-Praxis-Abstiegsparser für X-Leer/ÜB-Praxis-Abstiegsparser für X-Leer.iml index 2848d78..fc5d49d 100644 --- a/ÜB-Praxis-Abstiegsparser für X-Leer/ÜB-Praxis-Abstiegsparser für X-Leer.iml +++ b/ÜB-Praxis-Abstiegsparser für X-Leer/ÜB-Praxis-Abstiegsparser für X-Leer.iml @@ -17,5 +17,6 @@ + \ No newline at end of file