Merge pull request #1991 from cognitree/fix-bindings-grammar

Fix bindings grammar
This commit is contained in:
Jonathan Shook 2024-07-26 12:05:33 -05:00 committed by GitHub
commit 2d30d69f1f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 7 deletions

View File

@ -3,7 +3,7 @@ grammar VirtData;
virtdataRecipe : virtdataFlow (specend virtdataFlow?)* EOF ; virtdataRecipe : virtdataFlow (specend virtdataFlow?)* EOF ;
virtdataFlow : (COMPOSE)? expression (';' expression?)* ; virtdataFlow : (COMPOSE)? expression (';' expression? | WS? expression)* ;
expression : (lvalue ASSIGN)? virtdataCall ; expression : (lvalue ASSIGN)? virtdataCall ;

View File

@ -20,9 +20,12 @@ import io.nosqlbench.virtdata.lang.ast.VirtDataAST;
import io.nosqlbench.virtdata.lang.ast.VirtDataFlow; import io.nosqlbench.virtdata.lang.ast.VirtDataFlow;
import io.nosqlbench.virtdata.lang.generated.VirtDataLexer; import io.nosqlbench.virtdata.lang.generated.VirtDataLexer;
import io.nosqlbench.virtdata.lang.generated.VirtDataParser; import io.nosqlbench.virtdata.lang.generated.VirtDataParser;
import org.antlr.v4.runtime.BaseErrorListener;
import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CodePointCharStream; import org.antlr.v4.runtime.CodePointCharStream;
import org.antlr.v4.runtime.Recognizer;
import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.CommonTokenStream;
import org.antlr.v4.runtime.RecognitionException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@ -36,14 +39,11 @@ public class VirtDataDSL {
try { try {
CodePointCharStream cstream = CharStreams.fromString(input); CodePointCharStream cstream = CharStreams.fromString(input);
VirtDataLexer lexer = new VirtDataLexer(cstream); VirtDataParser parser = getVirtDataParser(cstream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
VirtDataParser parser = new VirtDataParser(tokens);
VirtDataBuilder astListener = new VirtDataBuilder(); VirtDataBuilder astListener = new VirtDataBuilder();
parser.addParseListener(astListener); parser.addParseListener(astListener);
VirtDataParser.VirtdataRecipeContext virtdataRecipeContext = parser.virtdataRecipe();
VirtDataParser.VirtdataFlowContext virtdataFlowContext = parser.virtdataFlow(); logger.trace(() -> "parse tree: " + virtdataRecipeContext.toStringTree(parser));
logger.trace(() -> "parse tree: " + virtdataFlowContext.toStringTree(parser));
if (astListener.hasErrors()) { if (astListener.hasErrors()) {
System.out.println(astListener.getErrorNodes()); System.out.println(astListener.getErrorNodes());
@ -67,6 +67,18 @@ public class VirtDataDSL {
} }
} }
private static VirtDataParser getVirtDataParser(CodePointCharStream cstream) {
VirtDataLexer lexer = new VirtDataLexer(cstream);
lexer.addErrorListener(new BaseErrorListener() {
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
throw new RuntimeException(e);
}
});
CommonTokenStream tokens = new CommonTokenStream(lexer);
return new VirtDataParser(tokens);
}
public static class ParseResult { public static class ParseResult {
public Throwable throwable; public Throwable throwable;
public VirtDataFlow flow; public VirtDataFlow flow;