diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..aa00ffa --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index ecfa09c..893a262 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/pom.xml b/pom.xml index e0f22fe..56e3a49 100644 --- a/pom.xml +++ b/pom.xml @@ -13,5 +13,5 @@ 21 UTF-8 - + \ No newline at end of file diff --git a/src/grammars/HelloWorld.g4 b/src/grammars/HelloWorld.g4 new file mode 100644 index 0000000..5108ee9 --- /dev/null +++ b/src/grammars/HelloWorld.g4 @@ -0,0 +1,3 @@ +grammar HelloWorld; + +start: 'Hello, World!' EOF; \ No newline at end of file diff --git a/src/main/java/org/lumijiez/Main.java b/src/main/java/org/lumijiez/Main.java index 70095d2..f0a8d82 100644 --- a/src/main/java/org/lumijiez/Main.java +++ b/src/main/java/org/lumijiez/Main.java @@ -1,19 +1,30 @@ package org.lumijiez; -// Press Shift twice to open the Search Everywhere dialog and type `show whitespaces`, -// then press Enter. You can now see whitespace characters in your code. +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.tree.ParseTreeWalker; +import org.lumijiez.parser.HelloWorldBaseListener; +import org.lumijiez.parser.HelloWorldLexer; +import org.lumijiez.parser.HelloWorldParser; + public class Main { public static void main(String[] args) { - // Press Alt+Enter with your caret at the highlighted text to see how - // IntelliJ IDEA suggests fixing it. - System.out.printf("Hello and welcome!"); + String input = "Hello, World!"; + CharStream inputStream = CharStreams.fromString(input); + HelloWorldLexer lexer = new HelloWorldLexer(inputStream); + CommonTokenStream tokenStream = new CommonTokenStream(lexer); + HelloWorldParser parser = new HelloWorldParser(tokenStream); - // Press Shift+F10 or click the green arrow button in the gutter to run the code. - for (int i = 1; i <= 5; i++) { + ParseTreeWalker walker = new ParseTreeWalker(); + MyListener listener = new MyListener(); + walker.walk(listener, parser.start()); + } - // Press Shift+F9 to start debugging your code. We have set one breakpoint - // for you, but you can always add more by pressing Ctrl+F8. - System.out.println("i = " + i); + static class MyListener extends HelloWorldBaseListener { + @Override + public void enterStart(HelloWorldParser.StartContext ctx) { + System.out.println("Parsed: " + ctx.getText()); } } } \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorld.interp b/src/main/java/org/lumijiez/parser/HelloWorld.interp new file mode 100644 index 0000000..9dbbeab --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorld.interp @@ -0,0 +1,14 @@ +token literal names: +null +'Hello, World!' + +token symbolic names: +null +null + +rule names: +start + + +atn: +[4, 1, 1, 6, 2, 0, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 4, 0, 2, 1, 0, 0, 0, 2, 3, 5, 1, 0, 0, 3, 4, 5, 0, 0, 1, 4, 1, 1, 0, 0, 0, 0] \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorld.tokens b/src/main/java/org/lumijiez/parser/HelloWorld.tokens new file mode 100644 index 0000000..017a733 --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorld.tokens @@ -0,0 +1,2 @@ +T__0=1 +'Hello, World!'=1 diff --git a/src/main/java/org/lumijiez/parser/HelloWorldBaseListener.java b/src/main/java/org/lumijiez/parser/HelloWorldBaseListener.java new file mode 100644 index 0000000..6f2695a --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldBaseListener.java @@ -0,0 +1,51 @@ +package org.lumijiez.parser;// Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/HelloWorld.g4 by ANTLR 4.13.1 + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link HelloWorldListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +@SuppressWarnings("CheckReturnValue") +public class HelloWorldBaseListener implements HelloWorldListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStart(HelloWorldParser.StartContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStart(HelloWorldParser.StartContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorldBaseVisitor.java b/src/main/java/org/lumijiez/parser/HelloWorldBaseVisitor.java new file mode 100644 index 0000000..9f4785d --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldBaseVisitor.java @@ -0,0 +1,21 @@ +package org.lumijiez.parser;// Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/HelloWorld.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link HelloWorldVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class HelloWorldBaseVisitor extends AbstractParseTreeVisitor implements HelloWorldVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStart(HelloWorldParser.StartContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorldLexer.interp b/src/main/java/org/lumijiez/parser/HelloWorldLexer.interp new file mode 100644 index 0000000..ae94d2d --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldLexer.interp @@ -0,0 +1,20 @@ +token literal names: +null +'Hello, World!' + +token symbolic names: +null +null + +rule names: +T__0 + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[4, 0, 1, 17, 6, -1, 2, 0, 7, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 16, 0, 1, 1, 0, 0, 0, 1, 3, 1, 0, 0, 0, 3, 4, 5, 72, 0, 0, 4, 5, 5, 101, 0, 0, 5, 6, 5, 108, 0, 0, 6, 7, 5, 108, 0, 0, 7, 8, 5, 111, 0, 0, 8, 9, 5, 44, 0, 0, 9, 10, 5, 32, 0, 0, 10, 11, 5, 87, 0, 0, 11, 12, 5, 111, 0, 0, 12, 13, 5, 114, 0, 0, 13, 14, 5, 108, 0, 0, 14, 15, 5, 100, 0, 0, 15, 16, 5, 33, 0, 0, 16, 2, 1, 0, 0, 0, 1, 0, 0] \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorldLexer.java b/src/main/java/org/lumijiez/parser/HelloWorldLexer.java new file mode 100644 index 0000000..6dcabd4 --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldLexer.java @@ -0,0 +1,123 @@ +package org.lumijiez.parser;// Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/HelloWorld.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue", "this-escape"}) +public class HelloWorldLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "T__0" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'Hello, World!'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public HelloWorldLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "HelloWorld.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\u0004\u0000\u0001\u0011\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0001"+ + "\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+ + "\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001"+ + "\u0000\u0001\u0000\u0000\u0000\u0001\u0001\u0001\u0001\u0000\u0000\u0010"+ + "\u0000\u0001\u0001\u0000\u0000\u0000\u0001\u0003\u0001\u0000\u0000\u0000"+ + "\u0003\u0004\u0005H\u0000\u0000\u0004\u0005\u0005e\u0000\u0000\u0005\u0006"+ + "\u0005l\u0000\u0000\u0006\u0007\u0005l\u0000\u0000\u0007\b\u0005o\u0000"+ + "\u0000\b\t\u0005,\u0000\u0000\t\n\u0005 \u0000\u0000\n\u000b\u0005W\u0000"+ + "\u0000\u000b\f\u0005o\u0000\u0000\f\r\u0005r\u0000\u0000\r\u000e\u0005"+ + "l\u0000\u0000\u000e\u000f\u0005d\u0000\u0000\u000f\u0010\u0005!\u0000"+ + "\u0000\u0010\u0002\u0001\u0000\u0000\u0000\u0001\u0000\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorldLexer.tokens b/src/main/java/org/lumijiez/parser/HelloWorldLexer.tokens new file mode 100644 index 0000000..017a733 --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldLexer.tokens @@ -0,0 +1,2 @@ +T__0=1 +'Hello, World!'=1 diff --git a/src/main/java/org/lumijiez/parser/HelloWorldListener.java b/src/main/java/org/lumijiez/parser/HelloWorldListener.java new file mode 100644 index 0000000..570cf5a --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldListener.java @@ -0,0 +1,19 @@ +package org.lumijiez.parser;// Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/HelloWorld.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link HelloWorldParser}. + */ +public interface HelloWorldListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link HelloWorldParser#start}. + * @param ctx the parse tree + */ + void enterStart(HelloWorldParser.StartContext ctx); + /** + * Exit a parse tree produced by {@link HelloWorldParser#start}. + * @param ctx the parse tree + */ + void exitStart(HelloWorldParser.StartContext ctx); +} \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorldParser.java b/src/main/java/org/lumijiez/parser/HelloWorldParser.java new file mode 100644 index 0000000..80ddfd7 --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldParser.java @@ -0,0 +1,149 @@ +// Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/HelloWorld.g4 by ANTLR 4.13.1 +package org.lumijiez.parser; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast", "CheckReturnValue"}) +public class HelloWorldParser extends Parser { + static { RuntimeMetaData.checkVersion("4.13.1", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + T__0=1; + public static final int + RULE_start = 0; + private static String[] makeRuleNames() { + return new String[] { + "start" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, "'Hello, World!'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "HelloWorld.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public HelloWorldParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @SuppressWarnings("CheckReturnValue") + public static class StartContext extends ParserRuleContext { + public TerminalNode EOF() { return getToken(HelloWorldParser.EOF, 0); } + public StartContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_start; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof HelloWorldListener ) ((HelloWorldListener)listener).enterStart(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof HelloWorldListener ) ((HelloWorldListener)listener).exitStart(this); + } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof HelloWorldVisitor ) return ((HelloWorldVisitor)visitor).visitStart(this); + else return visitor.visitChildren(this); + } + } + + public final StartContext start() throws RecognitionException { + StartContext _localctx = new StartContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_start); + try { + enterOuterAlt(_localctx, 1); + { + setState(2); + match(T__0); + setState(3); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static final String _serializedATN = + "\u0004\u0001\u0001\u0006\u0002\u0000\u0007\u0000\u0001\u0000\u0001\u0000"+ + "\u0001\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0004\u0000"+ + "\u0002\u0001\u0000\u0000\u0000\u0002\u0003\u0005\u0001\u0000\u0000\u0003"+ + "\u0004\u0005\u0000\u0000\u0001\u0004\u0001\u0001\u0000\u0000\u0000\u0000"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/main/java/org/lumijiez/parser/HelloWorldVisitor.java b/src/main/java/org/lumijiez/parser/HelloWorldVisitor.java new file mode 100644 index 0000000..40efae5 --- /dev/null +++ b/src/main/java/org/lumijiez/parser/HelloWorldVisitor.java @@ -0,0 +1,18 @@ +package org.lumijiez.parser;// Generated from D:/Source/JavaProjects/dsl-formal-requirements/src/grammars/HelloWorld.g4 by ANTLR 4.13.1 +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link HelloWorldParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface HelloWorldVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link HelloWorldParser#start}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStart(HelloWorldParser.StartContext ctx); +} \ No newline at end of file