[11 - Antlr Parser] Add global library and add implementation for "CC-Praxis-Antlr Parser fuer X-Leer"/AntlrXParseMain
This commit is contained in:
7
CC-Praxis-Antlr Parser fuer X-Leer/X.tokens
Normal file
7
CC-Praxis-Antlr Parser fuer X-Leer/X.tokens
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
T__9=9
|
||||||
|
DECL=4
|
||||||
|
DECLLIST=5
|
||||||
|
INVALID=6
|
||||||
|
STATLIST=7
|
||||||
|
UMINUS=8
|
||||||
|
'TODO'=9
|
||||||
@@ -69,13 +69,24 @@ public class AntlrXParserMain {
|
|||||||
"end.\n";
|
"end.\n";
|
||||||
|
|
||||||
public static void main(String[] args) throws Exception {
|
public static void main(String[] args) throws Exception {
|
||||||
|
|
||||||
ANTLRInputStream input = new ANTLRInputStream(new ByteArrayInputStream(BEISPIELFOLIEN.getBytes()));
|
|
||||||
|
|
||||||
//TODO
|
//TODO
|
||||||
// - Scanner aufrufen
|
// - Scanner aufrufen
|
||||||
// - Parser aufrufen
|
// - Parser aufrufen
|
||||||
// - Text- und Grapviz-Form ausgeben/speichern
|
// - Text- und Grapviz-Form ausgeben/speichern
|
||||||
|
ANTLRInputStream input = new ANTLRInputStream(new ByteArrayInputStream(BEISPIELFOLIEN.getBytes()));
|
||||||
|
XLexer lexer = new XLexer(input);
|
||||||
|
CommonTokenStream tokenStream = new CommonTokenStream(lexer);
|
||||||
|
XParser parser = new XParser(tokenStream);
|
||||||
|
XParser.program_return result = parser.program();
|
||||||
|
CommonTree tree = (CommonTree) result.getTree();
|
||||||
|
|
||||||
|
graphizDotTree(tree, "XAST.dot");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void graphizDotTree(Tree tree, String name) throws FileNotFoundException {
|
||||||
|
StringTemplate template = new DOTTreeGenerator().toDOT(tree);
|
||||||
|
PrintWriter out = new PrintWriter(name);
|
||||||
|
out.println(template.toString());
|
||||||
|
out.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,3 @@ tokens {
|
|||||||
@parser::header {package de.dhbw.compiler.antlrxparser;}
|
@parser::header {package de.dhbw.compiler.antlrxparser;}
|
||||||
@lexer::header {package de.dhbw.compiler.antlrxparser;}
|
@lexer::header {package de.dhbw.compiler.antlrxparser;}
|
||||||
|
|
||||||
|
|
||||||
INVALID: .;
|
|
||||||
|
|
||||||
program: 'TODO';
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
// $ANTLR 3.5.2 C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g 2019-05-16 16:03:08
|
// $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 11:44:58
|
||||||
package de.dhbw.compiler.antlrxparser;
|
package de.dhbw.compiler.antlrxparser;
|
||||||
|
|
||||||
import org.antlr.runtime.*;
|
import org.antlr.runtime.*;
|
||||||
@@ -29,15 +29,15 @@ public class XLexer extends Lexer {
|
|||||||
public XLexer(CharStream input, RecognizerSharedState state) {
|
public XLexer(CharStream input, RecognizerSharedState state) {
|
||||||
super(input,state);
|
super(input,state);
|
||||||
}
|
}
|
||||||
@Override public String getGrammarFileName() { return "C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\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__9"
|
// $ANTLR start "T__9"
|
||||||
public final void mT__9() throws RecognitionException {
|
public final void mT__9() throws RecognitionException {
|
||||||
try {
|
try {
|
||||||
int _type = T__9;
|
int _type = T__9;
|
||||||
int _channel = DEFAULT_TOKEN_CHANNEL;
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\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' )
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\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'
|
||||||
{
|
{
|
||||||
match("TODO");
|
match("TODO");
|
||||||
|
|
||||||
@@ -57,8 +57,8 @@ public class XLexer extends Lexer {
|
|||||||
try {
|
try {
|
||||||
int _type = INVALID;
|
int _type = INVALID;
|
||||||
int _channel = DEFAULT_TOKEN_CHANNEL;
|
int _channel = DEFAULT_TOKEN_CHANNEL;
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:31:8: ( . )
|
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:31:8: ( . )
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:31:11: .
|
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:31:11: .
|
||||||
{
|
{
|
||||||
matchAny();
|
matchAny();
|
||||||
}
|
}
|
||||||
@@ -74,7 +74,7 @@ public class XLexer extends Lexer {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void mTokens() throws RecognitionException {
|
public void mTokens() throws RecognitionException {
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:1:8: ( T__9 | INVALID )
|
// /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__9 | INVALID )
|
||||||
int alt1=2;
|
int alt1=2;
|
||||||
int LA1_0 = input.LA(1);
|
int LA1_0 = input.LA(1);
|
||||||
if ( (LA1_0=='T') ) {
|
if ( (LA1_0=='T') ) {
|
||||||
@@ -100,14 +100,14 @@ public class XLexer extends Lexer {
|
|||||||
|
|
||||||
switch (alt1) {
|
switch (alt1) {
|
||||||
case 1 :
|
case 1 :
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:1:10: T__9
|
// /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__9
|
||||||
{
|
{
|
||||||
mT__9();
|
mT__9();
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 2 :
|
case 2 :
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:1:15: INVALID
|
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:1:15: INVALID
|
||||||
{
|
{
|
||||||
mINVALID();
|
mINVALID();
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// $ANTLR 3.5.2 C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g 2019-05-16 16:03:08
|
// $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 11:44:58
|
||||||
package de.dhbw.compiler.antlrxparser;
|
package de.dhbw.compiler.antlrxparser;
|
||||||
|
|
||||||
import org.antlr.runtime.*;
|
import org.antlr.runtime.*;
|
||||||
@@ -47,7 +47,7 @@ public class XParser extends Parser {
|
|||||||
return adaptor;
|
return adaptor;
|
||||||
}
|
}
|
||||||
@Override public String[] getTokenNames() { return XParser.tokenNames; }
|
@Override public String[] getTokenNames() { return XParser.tokenNames; }
|
||||||
@Override public String getGrammarFileName() { return "C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\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"; }
|
||||||
|
|
||||||
|
|
||||||
public static class program_return extends ParserRuleReturnScope {
|
public static class program_return extends ParserRuleReturnScope {
|
||||||
@@ -58,7 +58,7 @@ public class XParser extends Parser {
|
|||||||
|
|
||||||
|
|
||||||
// $ANTLR start "program"
|
// $ANTLR start "program"
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:33: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:33: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);
|
||||||
@@ -70,8 +70,8 @@ public class XParser extends Parser {
|
|||||||
Object string_literal1_tree=null;
|
Object string_literal1_tree=null;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:33:8: ( 'TODO' )
|
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:33:8: ( 'TODO' )
|
||||||
// C:\\Users\\eisenbiegler\\Dropbox\\workspace_cc\\CC-Praxis-Antlr Parser fuer X-Leer\\src\\de\\dhbw\\compiler\\antlrxparser\\X.g:33:10: 'TODO'
|
// /Users/kreis/git/gitea.humenius.me/dhbw-compilerbau/CC-Praxis-Antlr Parser fuer X-Leer/src/de/dhbw/compiler/antlrxparser/X.g:33:10: 'TODO'
|
||||||
{
|
{
|
||||||
root_0 = (Object)adaptor.nil();
|
root_0 = (Object)adaptor.nil();
|
||||||
|
|
||||||
|
|||||||
7
X.tokens
Normal file
7
X.tokens
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
T__9=9
|
||||||
|
DECL=4
|
||||||
|
DECLLIST=5
|
||||||
|
INVALID=6
|
||||||
|
STATLIST=7
|
||||||
|
UMINUS=8
|
||||||
|
'TODO'=9
|
||||||
BIN
lib/hamcrest-core-1.3-javadoc.jar
Normal file
BIN
lib/hamcrest-core-1.3-javadoc.jar
Normal file
Binary file not shown.
BIN
lib/hamcrest-core-1.3.jar
Normal file
BIN
lib/hamcrest-core-1.3.jar
Normal file
Binary file not shown.
BIN
lib/junit-4.12-javadoc.jar
Normal file
BIN
lib/junit-4.12-javadoc.jar
Normal file
Binary file not shown.
BIN
lib/junit-4.12.jar
Normal file
BIN
lib/junit-4.12.jar
Normal file
Binary file not shown.
@@ -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
|
||||||
|
COMMENT=4
|
||||||
|
DECL=5
|
||||||
|
DECLLIST=6
|
||||||
|
DIGIT=7
|
||||||
|
FLOATCONST=8
|
||||||
|
ID=9
|
||||||
|
INTCONST=10
|
||||||
|
INVALID=11
|
||||||
|
LETTER=12
|
||||||
|
OTHER=13
|
||||||
|
POSDIGIT=14
|
||||||
|
STATLIST=15
|
||||||
|
STRINGCONST=16
|
||||||
|
UMINUS=17
|
||||||
|
WS=18
|
||||||
|
ZERO=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
|
||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/* **********************************************
|
||||||
|
* Duale Hochschule Baden-Württemberg Karlsruhe
|
||||||
|
* Prof. Dr. Jörn Eisenbiegler
|
||||||
|
*
|
||||||
|
* Vorlesung Übersetzerbau
|
||||||
|
* Praxis ANTLR-Parser für X
|
||||||
|
* - Grammatik für Scanner und Parser
|
||||||
|
*
|
||||||
|
* **********************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
grammar X;
|
||||||
|
|
||||||
|
options {
|
||||||
|
language = Java;
|
||||||
|
output = AST;
|
||||||
|
}
|
||||||
|
|
||||||
|
// AST-Tokens
|
||||||
|
tokens {
|
||||||
|
DECL;
|
||||||
|
STATLIST;
|
||||||
|
DECLLIST;
|
||||||
|
UMINUS;
|
||||||
|
}
|
||||||
|
|
||||||
|
@parser::header {package de.dhbw.compiler.antlrxparser;}
|
||||||
|
@lexer::header {package de.dhbw.compiler.antlrxparser;}
|
||||||
|
|
||||||
|
|
||||||
|
INVALID: .;
|
||||||
|
|
||||||
|
program: 'TODO';
|
||||||
@@ -33,5 +33,6 @@
|
|||||||
</library>
|
</library>
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
<orderEntry type="library" name="lib" level="project" />
|
<orderEntry type="library" name="lib" level="project" />
|
||||||
|
<orderEntry type="library" name="junit:junit:4.12" level="application" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
@@ -18,5 +18,6 @@
|
|||||||
<SOURCES />
|
<SOURCES />
|
||||||
</library>
|
</library>
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
|
<orderEntry type="library" name="junit:junit:4.12" level="application" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
Reference in New Issue
Block a user