From c7fb7dfd794700bf6977a907a8612e9b644e4fe4 Mon Sep 17 00:00:00 2001 From: Trygve Laugstøl Date: Mon, 4 Jul 2016 21:53:55 +0200 Subject: o Improved parser. --- .../main/test/io/trygvis/ld/test1/Test1Test.java | 102 +++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 cmake/elfinfo/src/main/test/io/trygvis/ld/test1/Test1Test.java (limited to 'cmake/elfinfo/src/main/test/io/trygvis/ld/test1') diff --git a/cmake/elfinfo/src/main/test/io/trygvis/ld/test1/Test1Test.java b/cmake/elfinfo/src/main/test/io/trygvis/ld/test1/Test1Test.java new file mode 100644 index 0000000..ca3f49a --- /dev/null +++ b/cmake/elfinfo/src/main/test/io/trygvis/ld/test1/Test1Test.java @@ -0,0 +1,102 @@ +package io.trygvis.ld.test1; + +import org.antlr.v4.runtime.ANTLRInputStream; +import org.antlr.v4.runtime.BufferedTokenStream; +import org.antlr.v4.runtime.CommonToken; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.Token; +import org.junit.Test; + +import javax.annotation.Nonnull; + +import static org.junit.Assert.assertEquals; + +public class Test1Test { + + @Test + public void test1() { + name("foo", "foo"); + } + + @Test + public void test2() { + name("\"foo bar\"", "foo bar"); + } + + private void name(String input, String expected) { + Test1Parser parser = load(input); + + Test1Parser.NameContext name = parser.name(); + System.out.println("String tree: " + name.toStringTree(parser)); + + String actual = name.getText(); + assertEquals(input + "\n" + name.toStringTree(parser), expected, actual); + } + + @Test + public void expr1() { + expr("a + b", "(expr (name a) + (name b))"); + } + + @Test + public void expr2() { + expr("\"foo bar\" + b", "(expr (name f o o b a r) + (name b))"); + } + + @Test + public void expr3() { + expr("\n\n\r\n\t\"foo bar\" + b\r\r\t", "(expr (name f o o b a r) + (name b))"); + } + + private void expr(String input, String expected) { + Test1Parser parser = load(input); + + Test1Parser.ExprContext expr = parser.expr(); + String stringTree = expr.toStringTree(parser); + + assertEquals(expected, stringTree); + } + + @Nonnull + private Test1Parser load(String input) { + System.out.println("Input : |" + input + "|"); + CommonTokenStream tokens = new CommonTokenStream(new Test1Lexer(new ANTLRInputStream(input))); + Test1Parser parser = new Test1Parser(tokens); + parser.setBuildParseTree(true); + parser.setTrace(true); + + tokens.fill(); + showTokens(tokens, parser); + return parser; + } + + public static void showTokens(BufferedTokenStream tokens, Parser parser) { + for (Token tok : tokens.getTokens()) { + String s; + if (tok instanceof CommonToken) { + CommonToken t = (CommonToken) tok; + + String channelStr = ""; + if (t.getChannel() > 0) { + channelStr = ",channel=" + t.getChannel(); + } + + String txt = t.getText(); + if (txt != null) { + txt = txt.replace("\n", "\\n"); + txt = txt.replace("\r", "\\r"); + txt = txt.replace("\t", "\\t"); + } else { + txt = ""; + } + + String type = parser.getVocabulary().getDisplayName(t.getType()); + s = "[@" + t.getTokenIndex() + "," + t.getStartIndex() + ":" + t.getStopIndex() + "=\'" + txt + "\',<" + type + ">" + channelStr + "," + t.getLine() + ":" + t.getCharPositionInLine() + "]"; + } else { + s = tok.toString(); + } + System.out.println(s); + } + } +} -- cgit v1.2.3