Clean up and fix Antlr Parser module
This commit is contained in:
9
.idea/libraries/antlr_3_5_2_complete.xml
generated
9
.idea/libraries/antlr_3_5_2_complete.xml
generated
@@ -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>
|
|
||||||
9
.idea/libraries/jflex_1_6_1.xml
generated
9
.idea/libraries/jflex_1_6_1.xml
generated
@@ -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>
|
|
||||||
4
.idea/libraries/lib.xml
generated
4
.idea/libraries/lib.xml
generated
@@ -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>
|
||||||
10
.idea/libraries/lib1.xml
generated
10
.idea/libraries/lib1.xml
generated
@@ -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>
|
|
||||||
10
.idea/libraries/lib2.xml
generated
10
.idea/libraries/lib2.xml
generated
@@ -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>
|
|
||||||
3
.idea/runConfigurations/Run_Antlr_builder.xml
generated
3
.idea/runConfigurations/Run_Antlr_builder.xml
generated
@@ -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=""$ModuleSourcePath$/de/dhbw/compiler/antlrxparser/X.g"" />
|
<option name="PROGRAM_PARAMETERS" value=""$ModuleSourcePath$/de/dhbw/compiler/antlrxparser/X.g"" />
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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(); };
|
||||||
|
|
||||||
|
|||||||
@@ -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 );";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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});
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
lib/antlr-3.5.2-complete.jar
Normal file
BIN
lib/antlr-3.5.2-complete.jar
Normal file
Binary file not shown.
@@ -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)); }
|
||||||
|
}
|
||||||
|
|
||||||
Binary file not shown.
Binary file not shown.
@@ -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() + ">"); */}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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>
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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>
|
||||||
Reference in New Issue
Block a user