From b99a4e12e5c7fa09344ff416fe856fa02b271c98 Mon Sep 17 00:00:00 2001 From: Daniel Date: Tue, 5 Mar 2024 20:02:43 +0200 Subject: [PATCH] Working grammar + Compiled Parser --- src/grammars/HelloWorld.g4 | 3 - src/grammars/SoftwareRequirements.g4 | 36 +++++ src/main/java/org/lumijiez/Main.java | 28 ++-- .../org/lumijiez/parser/HelloWorld.interp | 14 -- .../org/lumijiez/parser/HelloWorld.tokens | 2 - .../parser/HelloWorldBaseListener.java | 51 ------ .../parser/HelloWorldBaseVisitor.java | 21 --- .../lumijiez/parser/HelloWorldLexer.interp | 20 --- .../org/lumijiez/parser/HelloWorldLexer.java | 123 --------------- .../lumijiez/parser/HelloWorldLexer.tokens | 2 - .../lumijiez/parser/HelloWorldListener.java | 19 --- .../org/lumijiez/parser/HelloWorldParser.java | 149 ------------------ .../lumijiez/parser/HelloWorldVisitor.java | 18 --- src/main/resources/TestProgram.txt | 5 + 14 files changed, 58 insertions(+), 433 deletions(-) delete mode 100644 src/grammars/HelloWorld.g4 create mode 100644 src/grammars/SoftwareRequirements.g4 delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorld.interp delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorld.tokens delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldBaseListener.java delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldBaseVisitor.java delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldLexer.interp delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldLexer.java delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldLexer.tokens delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldListener.java delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldParser.java delete mode 100644 src/main/java/org/lumijiez/parser/HelloWorldVisitor.java create mode 100644 src/main/resources/TestProgram.txt diff --git a/src/grammars/HelloWorld.g4 b/src/grammars/HelloWorld.g4 deleted file mode 100644 index 5108ee9..0000000 --- a/src/grammars/HelloWorld.g4 +++ /dev/null @@ -1,3 +0,0 @@ -grammar HelloWorld; - -start: 'Hello, World!' EOF; \ No newline at end of file diff --git a/src/grammars/SoftwareRequirements.g4 b/src/grammars/SoftwareRequirements.g4 new file mode 100644 index 0000000..75458f7 --- /dev/null +++ b/src/grammars/SoftwareRequirements.g4 @@ -0,0 +1,36 @@ +grammar SoftwareRequirements; + +// Lexer rules +ID : [a-zA-Z]+ ; +STRING : '"' ~'"'* '"' ; +WS : [ \t\r\n]+ -> skip ; + +// Parser rules +program : (requirement | functionSpec)+ ; + +requirement : ID ':' predicate ';' ; + +predicate : expression '=>' expression ; + +expression : term (logical_op term)* ; + +term : '(' expression ')' + | STRING + ; + +logical_op : '&&' | '||' ; + +functionSpec : ID'()' ':' '(' parameter_list ')' ';' ; + +parameter_list : parameter (',' parameter)* ; + +parameter : STRING ':' STRING ; + +// Define symbols +LPAREN : '(' ; +RPAREN : ')' ; +COLON : ':' ; +SEMICOLON : ';' ; +COMMA : ',' ; +LBRACE : '{' ; +RBRACE : '}' ; diff --git a/src/main/java/org/lumijiez/Main.java b/src/main/java/org/lumijiez/Main.java index f0a8d82..a22f182 100644 --- a/src/main/java/org/lumijiez/Main.java +++ b/src/main/java/org/lumijiez/Main.java @@ -4,26 +4,32 @@ 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; +import org.lumijiez.parser.SoftwareRequirementsBaseListener; +import org.lumijiez.parser.SoftwareRequirementsLexer; +import org.lumijiez.parser.SoftwareRequirementsParser; +import java.io.IOException; +import java.net.URISyntaxException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Objects; public class Main { - public static void main(String[] args) { - String input = "Hello, World!"; + public static void main(String[] args) throws IOException, URISyntaxException { + String input = new String(Files.readAllBytes(Path.of(Objects.requireNonNull(Main.class.getResource("/TestProgram.txt")).toURI()))); + CharStream inputStream = CharStreams.fromString(input); - HelloWorldLexer lexer = new HelloWorldLexer(inputStream); + SoftwareRequirementsLexer lexer = new SoftwareRequirementsLexer(inputStream); CommonTokenStream tokenStream = new CommonTokenStream(lexer); - HelloWorldParser parser = new HelloWorldParser(tokenStream); + SoftwareRequirementsParser parser = new SoftwareRequirementsParser(tokenStream); ParseTreeWalker walker = new ParseTreeWalker(); - MyListener listener = new MyListener(); - walker.walk(listener, parser.start()); + SoftwareReqParseTree listener = new SoftwareReqParseTree(); + walker.walk(listener, parser.program()); } - static class MyListener extends HelloWorldBaseListener { + static class SoftwareReqParseTree extends SoftwareRequirementsBaseListener { @Override - public void enterStart(HelloWorldParser.StartContext ctx) { + public void enterProgram(SoftwareRequirementsParser.ProgramContext ctx) { System.out.println("Parsed: " + ctx.getText()); } } diff --git a/src/main/java/org/lumijiez/parser/HelloWorld.interp b/src/main/java/org/lumijiez/parser/HelloWorld.interp deleted file mode 100644 index 9dbbeab..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorld.interp +++ /dev/null @@ -1,14 +0,0 @@ -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 deleted file mode 100644 index 017a733..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorld.tokens +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 6f2695a..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldBaseListener.java +++ /dev/null @@ -1,51 +0,0 @@ -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 deleted file mode 100644 index 9f4785d..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldBaseVisitor.java +++ /dev/null @@ -1,21 +0,0 @@ -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 deleted file mode 100644 index ae94d2d..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldLexer.interp +++ /dev/null @@ -1,20 +0,0 @@ -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 deleted file mode 100644 index 6dcabd4..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldLexer.java +++ /dev/null @@ -1,123 +0,0 @@ -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 deleted file mode 100644 index 017a733..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldLexer.tokens +++ /dev/null @@ -1,2 +0,0 @@ -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 deleted file mode 100644 index 570cf5a..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldListener.java +++ /dev/null @@ -1,19 +0,0 @@ -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 deleted file mode 100644 index 80ddfd7..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldParser.java +++ /dev/null @@ -1,149 +0,0 @@ -// 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 deleted file mode 100644 index 40efae5..0000000 --- a/src/main/java/org/lumijiez/parser/HelloWorldVisitor.java +++ /dev/null @@ -1,18 +0,0 @@ -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 diff --git a/src/main/resources/TestProgram.txt b/src/main/resources/TestProgram.txt new file mode 100644 index 0000000..99d6e84 --- /dev/null +++ b/src/main/resources/TestProgram.txt @@ -0,0 +1,5 @@ +DatabaseAccess: +("UserIsAuthenticated" && "UserHasPermission") => ("AccessToAdminPanel" || "AccessToModeratorPanel"); + +GetUserList(): +("Return" : "int x, float y", "Execution Time" : "<1s"); \ No newline at end of file