[11 - Antlr Parser] Fix Scanner tests

This commit is contained in:
2020-06-03 14:02:58 +02:00
parent 6aa5e71f1e
commit 2e62631386
41 changed files with 4415 additions and 4451 deletions

1
.idea/modules.xml generated
View File

@@ -3,6 +3,7 @@
<component name="ProjectModuleManager"> <component name="ProjectModuleManager">
<modules> <modules>
<module fileurl="file://$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/CC-Praxis-Antlr Parser fuer X-Leer.iml" filepath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/CC-Praxis-Antlr Parser fuer X-Leer.iml" /> <module fileurl="file://$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/CC-Praxis-Antlr Parser fuer X-Leer.iml" filepath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/CC-Praxis-Antlr Parser fuer X-Leer.iml" />
<module fileurl="file://$PROJECT_DIR$/ÜB-Praxis-JFlex Scanner für AS-Leer/ÜB-Praxis-JFlex Scanner für AS-Leer.iml" filepath="$PROJECT_DIR$/ÜB-Praxis-JFlex Scanner für AS-Leer/ÜB-Praxis-JFlex Scanner für AS-Leer.iml" />
</modules> </modules>
</component> </component>
</project> </project>

View File

@@ -2,8 +2,8 @@
<configuration default="false" name="Run Antlr Builder" type="Application" factoryName="Application"> <configuration default="false" name="Run Antlr Builder" type="Application" factoryName="Application">
<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="-o &quot;$ModuleSourcePath$/de/dhbw/compiler/antlrxparser/&quot; &quot;$ModuleSourcePath$/de/dhbw/compiler/antlrxparser/X.g&quot;" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer" /> <option name="WORKING_DIRECTORY" value="$ContentRoot$" />
<method v="2" /> <method v="2" />
</configuration> </configuration>
</component> </component>

71
.idea/workspace.xml generated
View File

@@ -2,9 +2,21 @@
<project version="4"> <project version="4">
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="a11aa5c4-505d-4bfb-9e81-72367c118bbe" name="Default Changelist" comment=""> <list default="true" id="a11aa5c4-505d-4bfb-9e81-72367c118bbe" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/modules.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/modules.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/runConfigurations/Run_Antlr_builder.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/runConfigurations/Run_Antlr_builder.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/X.tokens" beforeDir="false" afterPath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/X.tokens" afterDir="false" /> <change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/X.tokens" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/XLexer.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/XParser.java" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g" beforeDir="false" afterPath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g" afterDir="false" /> <change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g" beforeDir="false" afterPath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g" afterDir="false" />
<change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/XLexer.java" beforeDir="false" afterPath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/XLexer.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/XParser.java" beforeDir="false" afterPath="$PROJECT_DIR$/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/XParser.java" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/X.g" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/X.g" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/XLexer$DFA4.class" beforeDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/XLexer.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/XLexer.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/XParser$program_return.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/XParser$program_return.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/XParser.class" beforeDir="false" afterPath="$PROJECT_DIR$/out/production/CC-Praxis-Antlr Parser fuer X-Leer/de/dhbw/compiler/antlrxparser/XParser.class" afterDir="false" />
<change beforePath="$PROJECT_DIR$/ÜB-Praxis-JFlex Scanner für AS-Leer/ÜB-Praxis-JFlex Scanner für AS-Leer.iml" beforeDir="false" afterPath="$PROJECT_DIR$/ÜB-Praxis-JFlex Scanner für AS-Leer/ÜB-Praxis-JFlex Scanner für AS-Leer.iml" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
@@ -25,11 +37,12 @@
<property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" /> <property name="SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="WebServerToolWindowFactoryState" value="false" /> <property name="WebServerToolWindowFactoryState" value="false" />
<property name="aspect.path.notification.shown" value="true" /> <property name="aspect.path.notification.shown" value="true" />
<property name="project.structure.last.edited" value="Project" /> <property name="last_opened_file_path" value="$PROJECT_DIR$/ÜB-Praxis-JFlex Scanner für AS-Leer" />
<property name="project.structure.last.edited" value="Modules" />
<property name="project.structure.proportion" value="0.15429688" /> <property name="project.structure.proportion" value="0.15429688" />
<property name="project.structure.side.proportion" value="0.2" /> <property name="project.structure.side.proportion" value="0.2" />
</component> </component>
<component name="RunManager" selected="JUnit.TestAntlrXScanner1.tokenASSIGN"> <component name="RunManager" selected="JUnit.TestAntlrXParser1">
<configuration name="TestAntlrXParser1" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> <configuration name="TestAntlrXParser1" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true">
<module name="CC-Praxis-Antlr Parser fuer X-Leer" /> <module name="CC-Praxis-Antlr Parser fuer X-Leer" />
<useClassPathOnly /> <useClassPathOnly />
@@ -65,7 +78,7 @@
<option name="Make" enabled="true" /> <option name="Make" enabled="true" />
</method> </method>
</configuration> </configuration>
<configuration name="TestAntlrXScanner1" type="JUnit" factoryName="JUnit" temporary="true" nameIsGenerated="true"> <configuration name="TestAntlrXScanner1" type="JUnit" factoryName="JUnit" nameIsGenerated="true">
<module name="CC-Praxis-Antlr Parser fuer X-Leer" /> <module name="CC-Praxis-Antlr Parser fuer X-Leer" />
<useClassPathOnly /> <useClassPathOnly />
<extension name="coverage"> <extension name="coverage">
@@ -146,10 +159,9 @@
</list> </list>
<recent_temporary> <recent_temporary>
<list> <list>
<item itemvalue="JUnit.TestAntlrXScanner1.tokenStringConst" />
<item itemvalue="JUnit.TestAntlrXScanner1" />
<item itemvalue="JUnit.TestAntlrXParser1.program00BeginEnd" />
<item itemvalue="JUnit.TestAntlrXParser1" /> <item itemvalue="JUnit.TestAntlrXParser1" />
<item itemvalue="JUnit.TestAntlrXScanner1.tokenStringConst" />
<item itemvalue="JUnit.TestAntlrXParser1.program00BeginEnd" />
<item itemvalue="JUnit.TestAntlrXScanner1.tokenREAD" /> <item itemvalue="JUnit.TestAntlrXScanner1.tokenREAD" />
</list> </list>
</recent_temporary> </recent_temporary>
@@ -166,7 +178,8 @@
<updated>1591172713288</updated> <updated>1591172713288</updated>
<workItem from="1591172719978" duration="202000" /> <workItem from="1591172719978" duration="202000" />
<workItem from="1591172941402" duration="220000" /> <workItem from="1591172941402" duration="220000" />
<workItem from="1591174233890" duration="8126000" /> <workItem from="1591174233890" duration="9316000" />
<workItem from="1591183629705" duration="2093000" />
</task> </task>
<servers /> <servers />
</component> </component>
@@ -182,42 +195,52 @@
<screen x="0" y="0" width="1920" height="1040" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state x="570" y="121" key="#TestAntlrXScanner1.tokenASSIGN/0.0.1920.1040@0.0.1920.1040" timestamp="1591175187591" /> <state x="570" y="121" key="#TestAntlrXScanner1.tokenASSIGN/0.0.1920.1040@0.0.1920.1040" timestamp="1591175187591" />
<state x="245" y="129" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1591178569825"> <state x="-37" y="200" width="1471" height="691" key="#com.intellij.execution.impl.EditConfigurationsDialog" timestamp="1591184444701">
<screen x="0" y="0" width="1920" height="1040" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state x="184" y="112" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.0.1440.900@0.0.1440.900" timestamp="1591172899381" /> <state x="184" y="112" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.0.1440.900@0.0.1440.900" timestamp="1591172899381" />
<state x="245" y="129" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1591178569825" /> <state x="-37" y="200" width="1471" height="691" key="#com.intellij.execution.impl.EditConfigurationsDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1591184444701" />
<state x="92" y="92" width="1736" height="856" key="#com.intellij.execution.junit2.states.ComparisonFailureState$DiffDialog" timestamp="1591178570191"> <state x="92" y="92" width="1736" height="856" key="#com.intellij.execution.junit2.states.ComparisonFailureState$DiffDialog" timestamp="1591185724270">
<screen x="0" y="0" width="1920" height="1040" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state x="92" y="92" width="1736" height="856" key="#com.intellij.execution.junit2.states.ComparisonFailureState$DiffDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1591178570191" /> <state x="92" y="92" width="1736" height="856" key="#com.intellij.execution.junit2.states.ComparisonFailureState$DiffDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1591185724270" />
<state width="914" height="268" key="GridCell.Tab.0.bottom" timestamp="1591182426442"> <state x="700" y="183" key="#com.intellij.ide.macro.MacrosDialog" timestamp="1591184444196">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="700" y="183" key="#com.intellij.ide.macro.MacrosDialog/0.0.1920.1040@0.0.1920.1040" timestamp="1591184444196" />
<state x="700" y="233" key="FileChooserDialogImpl" timestamp="1591184758908">
<screen x="0" y="0" width="1920" height="1040" />
</state>
<state x="700" y="233" key="FileChooserDialogImpl/0.0.1920.1040@0.0.1920.1040" timestamp="1591184758908" />
<state width="1877" height="270" key="GridCell.Tab.0.bottom" timestamp="1591185718383">
<screen x="0" y="0" width="1920" height="1040" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state width="1398" height="245" key="GridCell.Tab.0.bottom/0.0.1440.900@0.0.1440.900" timestamp="1591173185826" /> <state width="1398" height="245" key="GridCell.Tab.0.bottom/0.0.1440.900@0.0.1440.900" timestamp="1591173185826" />
<state width="914" height="268" key="GridCell.Tab.0.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1591182426442" /> <state width="1877" height="270" key="GridCell.Tab.0.bottom/0.0.1920.1040@0.0.1920.1040" timestamp="1591185718383" />
<state width="914" height="268" key="GridCell.Tab.0.center" timestamp="1591182426442"> <state width="1877" height="270" key="GridCell.Tab.0.center" timestamp="1591185718383">
<screen x="0" y="0" width="1920" height="1040" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state width="1398" height="245" key="GridCell.Tab.0.center/0.0.1440.900@0.0.1440.900" timestamp="1591173185825" /> <state width="1398" height="245" key="GridCell.Tab.0.center/0.0.1440.900@0.0.1440.900" timestamp="1591173185825" />
<state width="914" height="268" key="GridCell.Tab.0.center/0.0.1920.1040@0.0.1920.1040" timestamp="1591182426442" /> <state width="1877" height="270" key="GridCell.Tab.0.center/0.0.1920.1040@0.0.1920.1040" timestamp="1591185718383" />
<state width="914" height="268" key="GridCell.Tab.0.left" timestamp="1591182426442"> <state width="1877" height="270" key="GridCell.Tab.0.left" timestamp="1591185718383">
<screen x="0" y="0" width="1920" height="1040" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state width="1398" height="245" key="GridCell.Tab.0.left/0.0.1440.900@0.0.1440.900" timestamp="1591173185825" /> <state width="1398" height="245" key="GridCell.Tab.0.left/0.0.1440.900@0.0.1440.900" timestamp="1591173185825" />
<state width="914" height="268" key="GridCell.Tab.0.left/0.0.1920.1040@0.0.1920.1040" timestamp="1591182426442" /> <state width="1877" height="270" key="GridCell.Tab.0.left/0.0.1920.1040@0.0.1920.1040" timestamp="1591185718383" />
<state width="914" height="268" key="GridCell.Tab.0.right" timestamp="1591182426442"> <state width="1877" height="270" key="GridCell.Tab.0.right" timestamp="1591185718383">
<screen x="0" y="0" width="1920" height="1040" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state width="1398" height="245" key="GridCell.Tab.0.right/0.0.1440.900@0.0.1440.900" timestamp="1591173185826" /> <state width="1398" height="245" key="GridCell.Tab.0.right/0.0.1440.900@0.0.1440.900" timestamp="1591173185826" />
<state width="914" height="268" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1591182426442" /> <state width="1877" height="270" key="GridCell.Tab.0.right/0.0.1920.1040@0.0.1920.1040" timestamp="1591185718383" />
<state x="335" y="156" width="915" height="587" key="NewModule_or_Project.wizard" timestamp="1591172753823"> <state x="447" y="180" width="915" height="587" key="NewModule_or_Project.wizard" timestamp="1591184776491">
<screen x="0" y="0" width="1440" height="900" /> <screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state x="335" y="156" width="915" height="587" key="NewModule_or_Project.wizard/0.0.1440.900@0.0.1440.900" timestamp="1591172753823" /> <state x="335" y="156" width="915" height="587" key="NewModule_or_Project.wizard/0.0.1440.900@0.0.1440.900" timestamp="1591172753823" />
<state x="208" y="31" key="SettingsEditor" timestamp="1591172804318"> <state x="447" y="180" key="NewModule_or_Project.wizard/0.0.1920.1040@0.0.1920.1040" timestamp="1591184776491" />
<screen x="0" y="0" width="1440" height="900" /> <state x="277" y="36" key="SettingsEditor" timestamp="1591184318089">
<screen x="0" y="0" width="1920" height="1040" />
</state> </state>
<state x="208" y="31" key="SettingsEditor/0.0.1440.900@0.0.1440.900" timestamp="1591172804318" /> <state x="208" y="31" key="SettingsEditor/0.0.1440.900@0.0.1440.900" timestamp="1591172804318" />
<state x="277" y="36" key="SettingsEditor/0.0.1920.1040@0.0.1920.1040" timestamp="1591184318089" />
</component> </component>
</project> </project>

View File

@@ -1,63 +0,0 @@
T__23=23
T__24=24
T__25=25
T__26=26
T__27=27
T__28=28
T__29=29
T__30=30
T__31=31
T__32=32
T__33=33
T__34=34
T__35=35
T__36=36
T__37=37
T__38=38
T__39=39
T__40=40
T__41=41
T__42=42
BINOP=4
DECL=5
DECLIST=6
ESCAPE=7
EXPR=8
FLOATCONST=9
ID=10
INTCONST=11
MODIFIER=12
PROGRAM=13
STAT=14
STATLIST=15
STRINGCONST=16
TYPE=17
UDIVIDE=18
UMINUS=19
UMULTIPLY=20
UPLUS=21
WS=22
'('=23
')'=24
'*'=20
'+'=21
'-'=19
'.'=25
'/'=18
':'=26
':='=27
';'=28
'begin'=29
'else'=30
'end'=31
'float'=32
'for'=33
'if'=34
'int'=35
'print'=36
'program'=37
'read print'=38
'read'=39
'string'=40
'then'=41
'while'=42

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -25,10 +25,6 @@ tokens {
FLOATCONST; FLOATCONST;
WS; WS;
MODIFIER; MODIFIER;
UMINUS='-';
UPLUS='+';
UMULTIPLY='*';
UDIVIDE='/';
DECLIST; DECLIST;
PROGRAM; PROGRAM;
DECL; DECL;
@@ -36,6 +32,7 @@ tokens {
STAT; STAT;
STATLIST; STATLIST;
EXPR; EXPR;
INVALID;
} }
@parser::header {package de.dhbw.compiler.antlrxparser;} @parser::header {package de.dhbw.compiler.antlrxparser;}
@@ -48,31 +45,32 @@ 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' | ('1'..'9') ('0'..'9')*;
FLOATCONST: INTCONST '.' INTCONST; FLOATCONST: INTCONST ('.' DIGIT*)? ('e'|'E')('+' |'-' )? INTCONST
| INTCONST ('.' DIGIT*)?;
STRINGCONST: '"' (ESCAPE | ~('\\' | '"'))* '"'; STRINGCONST: '"' (ESCAPE | ~('\\' | '"'))* '"';
ESCAPE: '\\' ('\"' |'\'' | '\\'); ESCAPE: '\\' ('\"' |'\'' | '\\');
BINOP: '+' | '-' | '*' | '/' | '<' | '>' | '='; WS: ('\t' | ' ' | '\r' | '\n' | '\f')+ { skip(); };
WS: ('\t' | ' ' | '\r' | '\n' | '\f')+ { skip(); }; INVALID: .;
fragment DIGIT: ('0'..'9');
// -- Parser stuff // -- Parser stuff
program: 'program' ID ';' decllist statlist '.' EOF -> ^(PROGRAM ID decllist statlist); program: 'program' ID ';' decllist statlist '.' EOF -> ^(PROGRAM ID decllist statlist);
// Declaration // Declaration
decllist: decl decllist -> ^(DECLIST decl decllist); decllist: decl decllist -> ^(DECLIST decl decllist);
decl: modifier ID ':' type ';' -> ^(DECL modifier ID type); decl: modifier ID ':' type ';' -> ^(DECL modifier ID type);
modifier: mod='read' | mod='print' | mod='read print' -> ^(MODIFIER[mod]); modifier: 'read' 'print'? | 'read' | 'print';
type: t='int' | t='float' | t='string' -> ^(TYPE[t]); type: 'int' | 'float' | 'string';
// Block // Block
statlist: 'begin' (stat ';')* 'end' -> ^(STATLIST stat*); statlist: 'begin' (stat ';')* 'end' -> ^(STATLIST stat*);
stat: t=assignstat | t=condstat | t=whilestat | t=forstat -> ^(STAT[t]) stat: assignstat | condstat | whilestat | forstat | statlist;
| statlist
-> ^(STATLIST statlist);
assignstat: ID ':=' expr -> ^(':=' ID expr); assignstat: ID ':=' expr -> ^(':=' ID expr);
condstat: 'if' cond 'then' stat condElseStat? -> ^('if' cond stat condElseStat? ); condstat: 'if' cond 'then' stat condElseStat? -> ^('if' cond stat condElseStat? );
condElseStat: 'else' stat -> ^('else' stat); condElseStat: 'else' stat -> ^('else' stat);
@@ -80,18 +78,23 @@ whilestat: 'while' '(' cond ')' stat -> ^('while' cond stat);
forstat: 'for' '(' assignstat ';' cond ';' assignstat ')' stat forstat: 'for' '(' assignstat ';' cond ';' assignstat ')' stat
-> ^('for' assignstat cond assignstat stat); -> ^('for' assignstat cond assignstat stat);
expr: expr2 UPLUS expr -> ^(UPLUS expr2 expr) expr: expr2 '+' expr -> ^('+' expr2 expr)
| expr2 UMINUS expr -> ^(UMINUS expr2 expr) | expr2 '-' expr -> ^('-' expr2 expr)
| expr2 -> ^(expr2); | expr2 -> ^(expr2);
expr2: expr3 UMULTIPLY expr2 -> ^(UMULTIPLY expr3 expr2) expr2: expr3 '*' expr2 -> ^('*' expr3 expr2)
| expr3 UDIVIDE expr2 -> ^(UDIVIDE expr3 expr2) | expr3 '/' expr2 -> ^('/' expr3 expr2)
| expr3 -> ^(expr3); | expr3 -> ^(expr3);
expr3: number -> ^(number) expr3: number | '-' number | STRINGCONST | '('! expr^ ')';
| UMINUS number -> ^(UMINUS number)
| t=STRINGCONST | t=ID -> ^($t)
| '(' expr ')' -> ^(expr);
number: INTCONST | FLOATCONST; number: INTCONST | FLOATCONST;
cond: expr cond2 -> ^(expr cond2); compOp: '<' | '>' | '=';
cond2: BINOP expr -> ^(BINOP expr); cond: expr cond2;
cond2: compOp expr;
// -- Dummy rules
// Das sollte dafür sorgen, dass implizite Tokens auch ihre Tokens bekommen
// TODO: Remove this
minus: '-';
div: '/';
multiply: '*';
plus: '+';

View File

@@ -0,0 +1,68 @@
T__20=20
T__21=21
T__22=22
T__23=23
T__24=24
T__25=25
T__26=26
T__27=27
T__28=28
T__29=29
T__30=30
T__31=31
T__32=32
T__33=33
T__34=34
T__35=35
T__36=36
T__37=37
T__38=38
T__39=39
T__40=40
T__41=41
T__42=42
T__43=43
T__44=44
T__45=45
DECL=4
DECLIST=5
DIGIT=6
ESCAPE=7
EXPR=8
FLOATCONST=9
ID=10
INTCONST=11
INVALID=12
MODIFIER=13
PROGRAM=14
STAT=15
STATLIST=16
STRINGCONST=17
TYPE=18
WS=19
'('=20
')'=21
'*'=22
'+'=23
'-'=24
'.'=25
'/'=26
':'=27
':='=28
';'=29
'<'=30
'='=31
'>'=32
'begin'=33
'else'=34
'end'=35
'float'=36
'for'=37
'if'=38
'int'=39
'print'=40
'program'=41
'read'=42
'string'=43
'then'=44
'while'=45

View File

@@ -25,10 +25,6 @@ tokens {
FLOATCONST; FLOATCONST;
WS; WS;
MODIFIER; MODIFIER;
UMINUS='-';
UPLUS='+';
UMULTIPLY='*';
UDIVIDE='/';
DECLIST; DECLIST;
PROGRAM; PROGRAM;
DECL; DECL;
@@ -36,6 +32,7 @@ tokens {
STAT; STAT;
STATLIST; STATLIST;
EXPR; EXPR;
INVALID;
} }
@parser::header {package de.dhbw.compiler.antlrxparser;} @parser::header {package de.dhbw.compiler.antlrxparser;}
@@ -48,31 +45,32 @@ 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' | ('1'..'9') ('0'..'9')*;
FLOATCONST: INTCONST '.' INTCONST; FLOATCONST: INTCONST ('.' DIGIT*)? ('e'|'E')('+' |'-' )? INTCONST
| INTCONST ('.' DIGIT*)?;
STRINGCONST: '"' (ESCAPE | ~('\\' | '"'))* '"'; STRINGCONST: '"' (ESCAPE | ~('\\' | '"'))* '"';
ESCAPE: '\\' ('\"' |'\'' | '\\'); ESCAPE: '\\' ('\"' |'\'' | '\\');
BINOP: '+' | '-' | '*' | '/' | '<' | '>' | '='; WS: ('\t' | ' ' | '\r' | '\n' | '\f')+ { skip(); };
WS: ('\t' | ' ' | '\r' | '\n' | '\f')+ { skip(); }; INVALID: .;
fragment DIGIT: ('0'..'9');
// -- Parser stuff // -- Parser stuff
program: 'program' ID ';' decllist statlist '.' EOF -> ^(PROGRAM ID decllist statlist); program: 'program' ID ';' decllist statlist '.' EOF -> ^(PROGRAM ID decllist statlist);
// Declaration // Declaration
decllist: decl decllist -> ^(DECLIST decl decllist); decllist: decl decllist -> ^(DECLIST decl decllist);
decl: modifier ID ':' type ';' -> ^(DECL modifier ID type); decl: modifier ID ':' type ';' -> ^(DECL modifier ID type);
modifier: mod='read' | mod='print' | mod='read print' -> ^(MODIFIER[mod]); modifier: 'read' 'print'? | 'read' | 'print';
type: t='int' | t='float' | t='string' -> ^(TYPE[t]); type: 'int' | 'float' | 'string';
// Block // Block
statlist: 'begin' (stat ';')* 'end' -> ^(STATLIST stat*); statlist: 'begin' (stat ';')* 'end' -> ^(STATLIST stat*);
stat: t=assignstat | t=condstat | t=whilestat | t=forstat -> ^(STAT[t]) stat: assignstat | condstat | whilestat | forstat | statlist;
| statlist
-> ^(STATLIST statlist);
assignstat: ID ':=' expr -> ^(':=' ID expr); assignstat: ID ':=' expr -> ^(':=' ID expr);
condstat: 'if' cond 'then' stat condElseStat? -> ^('if' cond stat condElseStat? ); condstat: 'if' cond 'then' stat condElseStat? -> ^('if' cond stat condElseStat? );
condElseStat: 'else' stat -> ^('else' stat); condElseStat: 'else' stat -> ^('else' stat);
@@ -80,18 +78,23 @@ whilestat: 'while' '(' cond ')' stat -> ^('while' cond stat);
forstat: 'for' '(' assignstat ';' cond ';' assignstat ')' stat forstat: 'for' '(' assignstat ';' cond ';' assignstat ')' stat
-> ^('for' assignstat cond assignstat stat); -> ^('for' assignstat cond assignstat stat);
expr: expr2 UPLUS expr -> ^(UPLUS expr2 expr) expr: expr2 '+' expr -> ^('+' expr2 expr)
| expr2 UMINUS expr -> ^(UMINUS expr2 expr) | expr2 '-' expr -> ^('-' expr2 expr)
| expr2 -> ^(expr2); | expr2 -> ^(expr2);
expr2: expr3 UMULTIPLY expr2 -> ^(UMULTIPLY expr3 expr2) expr2: expr3 '*' expr2 -> ^('*' expr3 expr2)
| expr3 UDIVIDE expr2 -> ^(UDIVIDE expr3 expr2) | expr3 '/' expr2 -> ^('/' expr3 expr2)
| expr3 -> ^(expr3); | expr3 -> ^(expr3);
expr3: number -> ^(number) expr3: number | '-' number | STRINGCONST | '('! expr^ ')';
| UMINUS number -> ^(UMINUS number)
| t=STRINGCONST | t=ID -> ^($t)
| '(' expr ')' -> ^(expr);
number: INTCONST | FLOATCONST; number: INTCONST | FLOATCONST;
cond: expr cond2 -> ^(expr cond2); compOp: '<' | '>' | '=';
cond2: BINOP expr -> ^(BINOP expr); cond: expr cond2;
cond2: compOp expr;
// -- Dummy rules
// Das sollte dafür sorgen, dass implizite Tokens auch ihre Tokens bekommen
// TODO: Remove this
minus: '-';
div: '/';
multiply: '*';
plus: '+';

View File

@@ -0,0 +1,68 @@
T__20=20
T__21=21
T__22=22
T__23=23
T__24=24
T__25=25
T__26=26
T__27=27
T__28=28
T__29=29
T__30=30
T__31=31
T__32=32
T__33=33
T__34=34
T__35=35
T__36=36
T__37=37
T__38=38
T__39=39
T__40=40
T__41=41
T__42=42
T__43=43
T__44=44
T__45=45
DECL=4
DECLIST=5
DIGIT=6
ESCAPE=7
EXPR=8
FLOATCONST=9
ID=10
INTCONST=11
INVALID=12
MODIFIER=13
PROGRAM=14
STAT=15
STATLIST=16
STRINGCONST=17
TYPE=18
WS=19
'('=20
')'=21
'*'=22
'+'=23
'-'=24
'.'=25
'/'=26
':'=27
':='=28
';'=29
'<'=30
'='=31
'>'=32
'begin'=33
'else'=34
'end'=35
'float'=36
'for'=37
'if'=38
'int'=39
'print'=40
'program'=41
'read'=42
'string'=43
'then'=44
'while'=45

View File

@@ -1,38 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4"> <module type="JAVA_MODULE" version="4">
<component name="EclipseModuleManager"> <component name="NewModuleRootManager" inherit-compiler-output="true">
<libelement value="jar://$MODULE_DIR$/lib/jflex-1.6.1.jar!/" />
<src_description expected_position="0">
<src_folder value="file://$MODULE_DIR$/src" expected_position="0" />
</src_description>
</component>
<component name="NewModuleRootManager">
<output url="file://$MODULE_DIR$/bin" />
<exclude-output /> <exclude-output />
<content url="file://$MODULE_DIR$"> <content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
</content> </content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" /> <orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="jdk" jdkName="JavaSE-1.7" jdkType="JavaSDK" />
<orderEntry type="module-library">
<library name="junit4">
<CLASSES>
<root url="jar://$APPLICATION_HOME_DIR$/lib/junit-4.12.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="module-library">
<library name="jflex-1.6.1.jar">
<CLASSES>
<root url="jar://$MODULE_DIR$/lib/jflex-1.6.1.jar!/" />
</CLASSES>
<JAVADOC />
<SOURCES />
</library>
</orderEntry>
<orderEntry type="library" name="junit:junit:4.12" level="application" />
<orderEntry type="library" name="lib" level="project" />
</component> </component>
</module> </module>