Clean up and fix Antlr Parser module

This commit is contained in:
2020-06-03 10:07:51 +02:00
parent ef7bb13422
commit 620b6e35bd
36 changed files with 297 additions and 975 deletions

View File

@@ -1,9 +0,0 @@
<component name="libraryTable">
<library name="antlr-3.5.2-complete">
<CLASSES>
<root url="jar://$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/lib/antlr-3.5.2-complete.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -1,9 +0,0 @@
<component name="libraryTable">
<library name="jflex-1.6.1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/ÜB-Praxis-LL1-Parser für X-Leer/lib/jflex-1.6.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -1,10 +1,10 @@
<component name="libraryTable"> <component name="libraryTable">
<library name="lib"> <library name="lib">
<CLASSES> <CLASSES>
<root url="jar://$PROJECT_DIR$/ÜB-Praxis-Abstiegsparser für X-Leer/lib/hamcrest-all-1.3.jar!/" /> <root url="file://$PROJECT_DIR$/lib" />
<root url="jar://$PROJECT_DIR$/ÜB-Praxis-Abstiegsparser für X-Leer/lib/jflex-1.6.1.jar!/" />
</CLASSES> </CLASSES>
<JAVADOC /> <JAVADOC />
<SOURCES /> <SOURCES />
<jarDirectory url="file://$PROJECT_DIR$/lib" recursive="false" />
</library> </library>
</component> </component>

View File

@@ -1,10 +0,0 @@
<component name="libraryTable">
<library name="lib1">
<CLASSES>
<root url="jar://$PROJECT_DIR$/ÜB-Praxis-Scanner für Namen-Leer/lib/hamcrest-all-1.3.jar!/" />
<root url="jar://$PROJECT_DIR$/ÜB-Praxis-Scanner für Namen-Leer/lib/jflex-1.6.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -1,10 +0,0 @@
<component name="libraryTable">
<library name="lib2">
<CLASSES>
<root url="jar://$PROJECT_DIR$/ÜB-Praxis-JFlex Scanner für AS-Leer/lib/jflex-1.6.1.jar!/" />
<root url="jar://$PROJECT_DIR$/ÜB-Praxis-JFlex Scanner für AS-Leer/lib/hamcrest-all-1.3.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</component>

View File

@@ -1,5 +1,8 @@
<component name="ProjectRunConfigurationManager"> <component name="ProjectRunConfigurationManager">
<configuration default="false" name="Run Antlr builder" type="Application" factoryName="Application"> <configuration default="false" name="Run Antlr builder" type="Application" factoryName="Application">
<option name="ALTERNATIVE_JRE_PATH" value="1.8.0_181" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="true" />
<option name="INCLUDE_PROVIDED_SCOPE" value="true" />
<option name="MAIN_CLASS_NAME" value="org.antlr.Tool" /> <option name="MAIN_CLASS_NAME" value="org.antlr.Tool" />
<module name="CC-Praxis-Antlr Parser fuer X-Leer" /> <module name="CC-Praxis-Antlr Parser fuer X-Leer" />
<option name="PROGRAM_PARAMETERS" value="&quot;$ModuleSourcePath$/de/dhbw/compiler/antlrxparser/X.g&quot;" /> <option name="PROGRAM_PARAMETERS" value="&quot;$ModuleSourcePath$/de/dhbw/compiler/antlrxparser/X.g&quot;" />

View File

@@ -1,5 +1,6 @@
T__7=7 T__8=8
ID=4 FLOATCONST=4
INTCONST=5 ID=5
WS=6 INTCONST=6
'TODO'=7 WS=7
'TODO'=8

View File

@@ -22,6 +22,7 @@ options {
tokens { tokens {
ID; ID;
INTCONST; INTCONST;
FLOATCONST;
WS; WS;
} }
@@ -35,6 +36,7 @@ ID: ('a'..'z' | 'A'..'Z')
greedy = true; // Lese alle möglichen Zeichen ein -> Zahlen in ID -> bleibt weiterhin ID greedy = true; // Lese alle möglichen Zeichen ein -> Zahlen in ID -> bleibt weiterhin ID
}: 'a'..'z' | 'A'..'Z' | '0'..'9')*; }: 'a'..'z' | 'A'..'Z' | '0'..'9')*;
INTCONST: ('0'..'9')+; INTCONST: ('0'..'9')+;
FLOATCONST: INTCONST '.' INTCONST;
WS: ('\t' | ' ' | '\r' | '\n' | '\f')+ { skip(); }; WS: ('\t' | ' ' | '\r' | '\n' | '\f')+ { skip(); };

View File

@@ -1,4 +1,4 @@
// $ANTLR 3.5.2 /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g 2020-05-27 16:02:18 // $ANTLR 3.5.2 /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g 2020-06-03 10:07:23
package de.dhbw.compiler.antlrxparser; package de.dhbw.compiler.antlrxparser;
import org.antlr.runtime.*; import org.antlr.runtime.*;
@@ -9,10 +9,11 @@ import java.util.ArrayList;
@SuppressWarnings("all") @SuppressWarnings("all")
public class XLexer extends Lexer { public class XLexer extends Lexer {
public static final int EOF=-1; public static final int EOF=-1;
public static final int T__7=7; public static final int T__8=8;
public static final int ID=4; public static final int FLOATCONST=4;
public static final int INTCONST=5; public static final int ID=5;
public static final int WS=6; public static final int INTCONST=6;
public static final int WS=7;
// delegates // delegates
// delegators // delegators
@@ -29,10 +30,10 @@ public class XLexer extends Lexer {
} }
@Override public String getGrammarFileName() { return "/Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g"; } @Override public String getGrammarFileName() { return "/Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g"; }
// $ANTLR start "T__7" // $ANTLR start "T__8"
public final void mT__7() throws RecognitionException { public final void mT__8() throws RecognitionException {
try { try {
int _type = T__7; int _type = T__8;
int _channel = DEFAULT_TOKEN_CHANNEL; int _channel = DEFAULT_TOKEN_CHANNEL;
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:9:6: ( 'TODO' ) // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:9:6: ( 'TODO' )
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:9:8: 'TODO' // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:9:8: 'TODO'
@@ -48,15 +49,15 @@ public class XLexer extends Lexer {
// do for sure before leaving // do for sure before leaving
} }
} }
// $ANTLR end "T__7" // $ANTLR end "T__8"
// $ANTLR start "ID" // $ANTLR start "ID"
public final void mID() throws RecognitionException { public final void mID() throws RecognitionException {
try { try {
int _type = ID; int _type = ID;
int _channel = DEFAULT_TOKEN_CHANNEL; int _channel = DEFAULT_TOKEN_CHANNEL;
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:33:3: ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( options {greedy=true; } : 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* ) // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:34:3: ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( options {greedy=true; } : 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* )
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:33:13: ( 'a' .. 'z' | 'A' .. 'Z' ) ( options {greedy=true; } : 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:34:13: ( 'a' .. 'z' | 'A' .. 'Z' ) ( options {greedy=true; } : 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )*
{ {
if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) { if ( (input.LA(1) >= 'A' && input.LA(1) <= 'Z')||(input.LA(1) >= 'a' && input.LA(1) <= 'z') ) {
input.consume(); input.consume();
@@ -66,7 +67,7 @@ public class XLexer extends Lexer {
recover(mse); recover(mse);
throw mse; throw mse;
} }
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:34:13: ( options {greedy=true; } : 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )* // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:35:13: ( options {greedy=true; } : 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' )*
loop1: loop1:
while (true) { while (true) {
int alt1=4; int alt1=4;
@@ -148,19 +149,19 @@ public class XLexer extends Lexer {
} }
switch (alt1) { switch (alt1) {
case 1 : case 1 :
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:36:16: 'a' .. 'z' // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:37:16: 'a' .. 'z'
{ {
matchRange('a','z'); matchRange('a','z');
} }
break; break;
case 2 : case 2 :
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:36:27: 'A' .. 'Z' // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:37:27: 'A' .. 'Z'
{ {
matchRange('A','Z'); matchRange('A','Z');
} }
break; break;
case 3 : case 3 :
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:36:38: '0' .. '9' // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:37:38: '0' .. '9'
{ {
matchRange('0','9'); matchRange('0','9');
} }
@@ -187,10 +188,10 @@ public class XLexer extends Lexer {
try { try {
int _type = INTCONST; int _type = INTCONST;
int _channel = DEFAULT_TOKEN_CHANNEL; int _channel = DEFAULT_TOKEN_CHANNEL;
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:37:9: ( ( '0' .. '9' )+ ) // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:38:9: ( ( '0' .. '9' )+ )
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:37:13: ( '0' .. '9' )+ // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:38:13: ( '0' .. '9' )+
{ {
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:37:13: ( '0' .. '9' )+ // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:38:13: ( '0' .. '9' )+
int cnt2=0; int cnt2=0;
loop2: loop2:
while (true) { while (true) {
@@ -234,15 +235,39 @@ public class XLexer extends Lexer {
} }
// $ANTLR end "INTCONST" // $ANTLR end "INTCONST"
// $ANTLR start "FLOATCONST"
public final void mFLOATCONST() throws RecognitionException {
try {
int _type = FLOATCONST;
int _channel = DEFAULT_TOKEN_CHANNEL;
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:39:11: ( INTCONST '.' INTCONST )
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:39:13: INTCONST '.' INTCONST
{
mINTCONST();
match('.');
mINTCONST();
}
state.type = _type;
state.channel = _channel;
}
finally {
// do for sure before leaving
}
}
// $ANTLR end "FLOATCONST"
// $ANTLR start "WS" // $ANTLR start "WS"
public final void mWS() throws RecognitionException { public final void mWS() throws RecognitionException {
try { try {
int _type = WS; int _type = WS;
int _channel = DEFAULT_TOKEN_CHANNEL; int _channel = DEFAULT_TOKEN_CHANNEL;
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:39:3: ( ( '\\t' | ' ' | '\\r' | '\\n' | '\\f' )+ ) // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:41:3: ( ( '\\t' | ' ' | '\\r' | '\\n' | '\\f' )+ )
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:39:13: ( '\\t' | ' ' | '\\r' | '\\n' | '\\f' )+ // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:41:13: ( '\\t' | ' ' | '\\r' | '\\n' | '\\f' )+
{ {
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:39:13: ( '\\t' | ' ' | '\\r' | '\\n' | '\\f' )+ // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:41:13: ( '\\t' | ' ' | '\\r' | '\\n' | '\\f' )+
int cnt3=0; int cnt3=0;
loop3: loop3:
while (true) { while (true) {
@@ -289,134 +314,14 @@ public class XLexer extends Lexer {
@Override @Override
public void mTokens() throws RecognitionException { public void mTokens() throws RecognitionException {
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:8: ( T__7 | ID | INTCONST | WS ) // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:8: ( T__8 | ID | INTCONST | FLOATCONST | WS )
int alt4=4; int alt4=5;
switch ( input.LA(1) ) { alt4 = dfa4.predict(input);
case 'T':
{
int LA4_1 = input.LA(2);
if ( (LA4_1=='O') ) {
int LA4_5 = input.LA(3);
if ( (LA4_5=='D') ) {
int LA4_6 = input.LA(4);
if ( (LA4_6=='O') ) {
int LA4_7 = input.LA(5);
if ( ((LA4_7 >= '0' && LA4_7 <= '9')||(LA4_7 >= 'A' && LA4_7 <= 'Z')||(LA4_7 >= 'a' && LA4_7 <= 'z')) ) {
alt4=2;
}
else {
alt4=1;
}
}
else {
alt4=2;
}
}
else {
alt4=2;
}
}
else {
alt4=2;
}
}
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z':
{
alt4=2;
}
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
{
alt4=3;
}
break;
case '\t':
case '\n':
case '\f':
case '\r':
case ' ':
{
alt4=4;
}
break;
default:
NoViableAltException nvae =
new NoViableAltException("", 4, 0, input);
throw nvae;
}
switch (alt4) { switch (alt4) {
case 1 : case 1 :
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:10: T__7 // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:10: T__8
{ {
mT__7(); mT__8();
} }
break; break;
@@ -435,7 +340,14 @@ public class XLexer extends Lexer {
} }
break; break;
case 4 : case 4 :
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:27: WS // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:27: FLOATCONST
{
mFLOATCONST();
}
break;
case 5 :
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:38: WS
{ {
mWS(); mWS();
@@ -446,5 +358,67 @@ public class XLexer extends Lexer {
} }
protected DFA4 dfa4 = new DFA4(this);
static final String DFA4_eotS =
"\1\uffff\1\2\1\uffff\1\6\1\uffff\1\2\2\uffff\1\2\1\12\1\uffff";
static final String DFA4_eofS =
"\13\uffff";
static final String DFA4_minS =
"\1\11\1\117\1\uffff\1\56\1\uffff\1\104\2\uffff\1\117\1\60\1\uffff";
static final String DFA4_maxS =
"\1\172\1\117\1\uffff\1\71\1\uffff\1\104\2\uffff\1\117\1\172\1\uffff";
static final String DFA4_acceptS =
"\2\uffff\1\2\1\uffff\1\5\1\uffff\1\3\1\4\2\uffff\1\1";
static final String DFA4_specialS =
"\13\uffff}>";
static final String[] DFA4_transitionS = {
"\2\4\1\uffff\2\4\22\uffff\1\4\17\uffff\12\3\7\uffff\23\2\1\1\6\2\6\uffff"+
"\32\2",
"\1\5",
"",
"\1\7\1\uffff\12\3",
"",
"\1\10",
"",
"",
"\1\11",
"\12\2\7\uffff\32\2\6\uffff\32\2",
""
};
static final short[] DFA4_eot = DFA.unpackEncodedString(DFA4_eotS);
static final short[] DFA4_eof = DFA.unpackEncodedString(DFA4_eofS);
static final char[] DFA4_min = DFA.unpackEncodedStringToUnsignedChars(DFA4_minS);
static final char[] DFA4_max = DFA.unpackEncodedStringToUnsignedChars(DFA4_maxS);
static final short[] DFA4_accept = DFA.unpackEncodedString(DFA4_acceptS);
static final short[] DFA4_special = DFA.unpackEncodedString(DFA4_specialS);
static final short[][] DFA4_transition;
static {
int numStates = DFA4_transitionS.length;
DFA4_transition = new short[numStates][];
for (int i=0; i<numStates; i++) {
DFA4_transition[i] = DFA.unpackEncodedString(DFA4_transitionS[i]);
}
}
protected class DFA4 extends DFA {
public DFA4(BaseRecognizer recognizer) {
this.recognizer = recognizer;
this.decisionNumber = 4;
this.eot = DFA4_eot;
this.eof = DFA4_eof;
this.min = DFA4_min;
this.max = DFA4_max;
this.accept = DFA4_accept;
this.special = DFA4_special;
this.transition = DFA4_transition;
}
@Override
public String getDescription() {
return "1:1: Tokens : ( T__8 | ID | INTCONST | FLOATCONST | WS );";
}
}
} }

View File

@@ -1,4 +1,4 @@
// $ANTLR 3.5.2 /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g 2020-05-27 16:02:17 // $ANTLR 3.5.2 /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g 2020-06-03 10:07:22
package de.dhbw.compiler.antlrxparser; package de.dhbw.compiler.antlrxparser;
import org.antlr.runtime.*; import org.antlr.runtime.*;
@@ -14,13 +14,15 @@ import org.antlr.runtime.tree.*;
@SuppressWarnings("all") @SuppressWarnings("all")
public class XParser extends Parser { public class XParser extends Parser {
public static final String[] tokenNames = new String[] { public static final String[] tokenNames = new String[] {
"<invalid>", "<EOR>", "<DOWN>", "<UP>", "ID", "INTCONST", "WS", "'TODO'" "<invalid>", "<EOR>", "<DOWN>", "<UP>", "FLOATCONST", "ID", "INTCONST",
"WS", "'TODO'"
}; };
public static final int EOF=-1; public static final int EOF=-1;
public static final int T__7=7; public static final int T__8=8;
public static final int ID=4; public static final int FLOATCONST=4;
public static final int INTCONST=5; public static final int ID=5;
public static final int WS=6; public static final int INTCONST=6;
public static final int WS=7;
// delegates // delegates
public Parser[] getDelegates() { public Parser[] getDelegates() {
@@ -57,7 +59,7 @@ public class XParser extends Parser {
// $ANTLR start "program" // $ANTLR start "program"
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:42:1: program : 'TODO' ; // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:44:1: program : 'TODO' ;
public final XParser.program_return program() throws RecognitionException { public final XParser.program_return program() throws RecognitionException {
XParser.program_return retval = new XParser.program_return(); XParser.program_return retval = new XParser.program_return();
retval.start = input.LT(1); retval.start = input.LT(1);
@@ -69,13 +71,13 @@ public class XParser extends Parser {
CommonTree string_literal1_tree=null; CommonTree string_literal1_tree=null;
try { try {
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:42:8: ( 'TODO' ) // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:44:8: ( 'TODO' )
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:42:13: 'TODO' // /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:44:13: 'TODO'
{ {
root_0 = (CommonTree)adaptor.nil(); root_0 = (CommonTree)adaptor.nil();
string_literal1=(Token)match(input,7,FOLLOW_7_in_program256); if (state.failed) return retval; string_literal1=(Token)match(input,8,FOLLOW_8_in_program272); if (state.failed) return retval;
if ( state.backtracking==0 ) { if ( state.backtracking==0 ) {
string_literal1_tree = (CommonTree)adaptor.create(string_literal1); string_literal1_tree = (CommonTree)adaptor.create(string_literal1);
adaptor.addChild(root_0, string_literal1_tree); adaptor.addChild(root_0, string_literal1_tree);
@@ -106,5 +108,5 @@ public class XParser extends Parser {
public static final BitSet FOLLOW_7_in_program256 = new BitSet(new long[]{0x0000000000000002L}); public static final BitSet FOLLOW_8_in_program272 = new BitSet(new long[]{0x0000000000000002L});
} }

Binary file not shown.

View File

@@ -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 */ }
<<EOF>> { return new Token(Token.EOF, yytext(), yyline+1, yycolumn+1); }
[^] { return new Token(Token.INVALID, yytext(), yyline+1, yycolumn+1); }
<STRING> {
[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); }
<<EOF>> { yybegin(YYINITIAL); return new Token(Token.INVALID, textvalue, startline, startcolumn); }
}
<INT> {
[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); }
<<EOF>> { yybegin(YYINITIAL);
yypushback(1);
return new IntConstToken(Token.INTCONST, textvalue, startline, startcolumn, intvalue);}
}
<FRACTION> {
[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)); }
<<EOF>> { yybegin(YYINITIAL);
yypushback(1);
return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn,intvalue+fracvalue/Math.pow(10,fraclength)); }
}
<EXPVZ> {
-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); }
<<EOF>> { yybegin(YYINITIAL);
yypushback(1);
return new Token(Token.INVALID, textvalue, startline, startcolumn); }
}
<EXP> {
[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)); }
<<EOF>> { yybegin(YYINITIAL);
yypushback(1);
return new FloatConstToken(Token.FLOATCONST, textvalue, startline, startcolumn, (intvalue+fracvalue/Math.pow(10,fraclength))*Math.pow(10,expvalue*expsign)); }
}

View File

@@ -1,75 +0,0 @@
/* **********************************************
* 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 */ }
<YYINITIAL> {
"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); }
}
<NUM> {
{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); }
<ID> {
{AllChars} { idValue += yytext(); }
}
<ID> [^] { 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() + ">"); */}

View File

@@ -1,695 +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 AS-Scanner mit JFlex 4
*
* **********************************************
*/
package de.dhbw.compiler.jflexasscanner;
/**
* This class is a scanner generated by
* <a href="http://www.jflex.de/">JFlex</a> 1.6.1
* from the specification file <tt>C:/Development/Schule/Java/ÜB-Praxis-JFlex Scanner für AS-Leer/src/de/dhbw/compiler/jflexasscanner/JFlexASScanner.flex</tt>
*/
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 <code>aState</code>
*/
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 <code>false</code>, 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
* <b>cannot</b> be reused (internal buffer is discarded and lost).
* Lexical state is set to <tt>ZZ_INITIAL</tt>.
*
* 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 <tt>pos</tt> 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);
}
}
}
}
}

View File

@@ -32,7 +32,7 @@
<SOURCES /> <SOURCES />
</library> </library>
</orderEntry> </orderEntry>
<orderEntry type="library" name="lib" level="project" />
<orderEntry type="library" name="junit:junit:4.12" level="application" /> <orderEntry type="library" name="junit:junit:4.12" level="application" />
<orderEntry type="library" name="lib" level="project" />
</component> </component>
</module> </module>

View File

@@ -8,7 +8,6 @@
</content> </content>
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="jdk" jdkName="1.8.0_181" jdkType="JavaSDK" /> <orderEntry type="jdk" jdkName="1.8.0_181" jdkType="JavaSDK" />
<orderEntry type="library" exported="" name="lib" level="project" />
<orderEntry type="module-library" exported=""> <orderEntry type="module-library" exported="">
<library name="junit4"> <library name="junit4">
<CLASSES> <CLASSES>
@@ -19,5 +18,6 @@
</library> </library>
</orderEntry> </orderEntry>
<orderEntry type="library" name="junit:junit:4.12" level="application" /> <orderEntry type="library" name="junit:junit:4.12" level="application" />
<orderEntry type="library" name="lib" level="project" />
</component> </component>
</module> </module>