Search in sources :

Example 11 with ParseTree

use of org.snt.inmemantlr.tree.ParseTree in project inmemantlr by julianthome.

the class TestNonCombinedGrammar method testParserLexer.

@Test
public void testParserLexer() throws IOException {
    LOGGER.debug("Test multi file parsing");
    File[] files = { new File(getClass().getClassLoader().getResource("inmemantlr/MySQLLexer.g4").getFile()), new File(getClass().getClassLoader().getResource("inmemantlr/MySQLParser.g4").getFile()) };
    GenericParser gp = new GenericParser(files);
    DefaultTreeListener t = new DefaultTreeListener();
    gp.setListener(t);
    boolean compile;
    try {
        gp.compile();
        compile = true;
    } catch (CompilationException e) {
        compile = false;
    }
    Assertions.assertTrue(compile);
    try {
        ParseTree parseTree;
        gp.parse("select a from b;");
        parseTree = t.getParseTree();
        Assertions.assertEquals(parseTree.getNodes().size(), 13);
        LOGGER.debug(parseTree.toDot());
    } catch (IllegalWorkflowException | ParsingException e) {
        LOGGER.error(e.getMessage(), e);
    }
}
Also used : CompilationException(org.snt.inmemantlr.exceptions.CompilationException) ParsingException(org.snt.inmemantlr.exceptions.ParsingException) IllegalWorkflowException(org.snt.inmemantlr.exceptions.IllegalWorkflowException) File(java.io.File) DefaultTreeListener(org.snt.inmemantlr.listener.DefaultTreeListener) ParseTree(org.snt.inmemantlr.tree.ParseTree) GenericParser(org.snt.inmemantlr.GenericParser) Test(org.junit.jupiter.api.Test)

Example 12 with ParseTree

use of org.snt.inmemantlr.tree.ParseTree in project inmemantlr by julianthome.

the class TestParseTreeProcessor method testProcessor.

@Test
public void testProcessor() {
    GenericParser gp = new GenericParser(sgrammarcontent);
    boolean compile;
    try {
        gp.compile();
        compile = true;
    } catch (CompilationException e) {
        compile = false;
    }
    Assertions.assertTrue(compile);
    Assertions.assertTrue(s != null && !s.isEmpty());
    DefaultTreeListener dlist = new DefaultTreeListener();
    gp.setListener(dlist);
    try {
        gp.parse(s);
    } catch (IllegalWorkflowException | ParsingException e) {
        Assertions.assertTrue(false);
    }
    ParseTree parseTree = dlist.getParseTree();
    // Process the tree bottom up
    ParseTreeProcessor<String, String> processor = new ParseTreeProcessor<String, String>(parseTree) {

        int cnt = 0;

        @Override
        public String getResult() {
            return String.valueOf(cnt);
        }

        @Override
        protected void initialize() {
            for (ParseTreeNode n : this.parseTree.getNodes()) {
                smap.put(n, "");
            }
        }

        @Override
        protected void process(ParseTreeNode n) {
            cnt++;
            simpleProp(n);
            Assertions.assertTrue(getElement(n) != null);
        }
    };
    try {
        processor.process();
    } catch (ParseTreeProcessorException e) {
        Assertions.assertFalse(true);
    }
    Assertions.assertTrue(processor.debug() != null);
}
Also used : CompilationException(org.snt.inmemantlr.exceptions.CompilationException) IllegalWorkflowException(org.snt.inmemantlr.exceptions.IllegalWorkflowException) ParseTreeProcessorException(org.snt.inmemantlr.exceptions.ParseTreeProcessorException) GenericParser(org.snt.inmemantlr.GenericParser) ParsingException(org.snt.inmemantlr.exceptions.ParsingException) ParseTreeProcessor(org.snt.inmemantlr.tree.ParseTreeProcessor) DefaultTreeListener(org.snt.inmemantlr.listener.DefaultTreeListener) ParseTree(org.snt.inmemantlr.tree.ParseTree) ParseTreeNode(org.snt.inmemantlr.tree.ParseTreeNode) Test(org.junit.jupiter.api.Test)

Example 13 with ParseTree

use of org.snt.inmemantlr.tree.ParseTree in project inmemantlr by julianthome.

the class TestSimple method testLogic.

@Test
public void testLogic() throws IOException {
    try (InputStream sgrammar = getClass().getClassLoader().getResourceAsStream("inmemantlr/Logic.g4")) {
        sgrammarcontent = FileUtils.getStringFromStream(sgrammar);
    }
    String toParse = "hello";
    GenericParser gp = new GenericParser(sgrammarcontent);
    DefaultTreeListener t = new DefaultTreeListener();
    gp.setListener(t);
    boolean compile;
    try {
        gp.compile();
        compile = true;
    } catch (CompilationException e) {
        compile = false;
        LOGGER.debug(e.getMessage());
    }
    Assertions.assertTrue(compile);
    try {
        gp.parse(toParse);
    } catch (IllegalWorkflowException | ParsingException e) {
        assert false;
    }
    ParseTree a = t.getParseTree();
    Assertions.assertEquals(a.getNodes().size(), 4);
    LOGGER.debug(ParseTreeSerializer.INSTANCE.toDot(a, true));
}
Also used : CompilationException(org.snt.inmemantlr.exceptions.CompilationException) InputStream(java.io.InputStream) ParsingException(org.snt.inmemantlr.exceptions.ParsingException) IllegalWorkflowException(org.snt.inmemantlr.exceptions.IllegalWorkflowException) DefaultTreeListener(org.snt.inmemantlr.listener.DefaultTreeListener) ParseTree(org.snt.inmemantlr.tree.ParseTree) GenericParser(org.snt.inmemantlr.GenericParser) Test(org.junit.jupiter.api.Test)

Example 14 with ParseTree

use of org.snt.inmemantlr.tree.ParseTree in project inmemantlr by julianthome.

the class TestSimple method testInterpreter.

@Test
public void testInterpreter() throws IOException {
    try (InputStream sgrammar = getClass().getClassLoader().getResourceAsStream("inmemantlr/Simple.g4")) {
        sgrammarcontent = FileUtils.getStringFromStream(sgrammar);
    }
    GenericParser gp = new GenericParser(sgrammarcontent);
    DefaultTreeListener t = new DefaultTreeListener();
    gp.setListener(t);
    boolean compile;
    try {
        gp.compile();
        compile = true;
    } catch (CompilationException e) {
        compile = false;
    }
    Assertions.assertTrue(compile);
    // this example shows you how one could use inmemantlr for incremental parsing
    try {
        ParseTree parseTree;
        gp.parse("PRINT a+b");
        parseTree = t.getParseTree();
        LOGGER.debug(parseTree.toDot());
        Assertions.assertEquals(parseTree.getNodes().size(), 6);
        gp.parse("PRINT \"test\"");
        parseTree = t.getParseTree();
        LOGGER.debug(parseTree.toDot());
        Assertions.assertEquals(parseTree.getNodes().size(), 4);
    } catch (IllegalWorkflowException | ParsingException e) {
        LOGGER.error(e.getMessage(), e);
    }
}
Also used : CompilationException(org.snt.inmemantlr.exceptions.CompilationException) InputStream(java.io.InputStream) ParsingException(org.snt.inmemantlr.exceptions.ParsingException) IllegalWorkflowException(org.snt.inmemantlr.exceptions.IllegalWorkflowException) DefaultTreeListener(org.snt.inmemantlr.listener.DefaultTreeListener) ParseTree(org.snt.inmemantlr.tree.ParseTree) GenericParser(org.snt.inmemantlr.GenericParser) Test(org.junit.jupiter.api.Test)

Aggregations

ParseTree (org.snt.inmemantlr.tree.ParseTree)14 Test (org.junit.jupiter.api.Test)11 IllegalWorkflowException (org.snt.inmemantlr.exceptions.IllegalWorkflowException)11 ParsingException (org.snt.inmemantlr.exceptions.ParsingException)11 DefaultTreeListener (org.snt.inmemantlr.listener.DefaultTreeListener)11 GenericParser (org.snt.inmemantlr.GenericParser)10 CompilationException (org.snt.inmemantlr.exceptions.CompilationException)10 File (java.io.File)7 InputStream (java.io.InputStream)5 FileNotFoundException (java.io.FileNotFoundException)3 ParseTreeNode (org.snt.inmemantlr.tree.ParseTreeNode)3 ParserRuleContext (org.antlr.v4.runtime.ParserRuleContext)2 GenericParserToGo (org.snt.inmemantlr.GenericParserToGo)2 ParseTreeProcessorException (org.snt.inmemantlr.exceptions.ParseTreeProcessorException)2 ParseTreeProcessor (org.snt.inmemantlr.tree.ParseTreeProcessor)2 IOException (java.io.IOException)1 List (java.util.List)1 Set (java.util.Set)1 Vector (java.util.Vector)1 RecognitionException (org.antlr.v4.runtime.RecognitionException)1