From 49e047ce56741ebaaf372712608602712575887f Mon Sep 17 00:00:00 2001 From: Christoph Date: Sun, 6 Dec 2020 02:06:40 +0100 Subject: [PATCH] update --- .idea/compiler.xml | 3 + src/test/java/parser/TestFirstFollow.java.dis | 256 ------------------ 2 files changed, 3 insertions(+), 256 deletions(-) delete mode 100644 src/test/java/parser/TestFirstFollow.java.dis diff --git a/.idea/compiler.xml b/.idea/compiler.xml index ac216bc..3c36d06 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -3,4 +3,7 @@ + + \ No newline at end of file diff --git a/src/test/java/parser/TestFirstFollow.java.dis b/src/test/java/parser/TestFirstFollow.java.dis deleted file mode 100644 index c7e9745..0000000 --- a/src/test/java/parser/TestFirstFollow.java.dis +++ /dev/null @@ -1,256 +0,0 @@ -// javac -cp .:junit-4.12.jar:hamcrest-core-1.3.jar TestFirstFollow.java -// java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore TestFirstFollow - -import org.antlr.v4.tool.Grammar; -import org.antlr.v4.tool.Rule; -import org.junit.Before; -import org.junit.Test; -import parser.ILL1ParsingTable; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - - -public class TestFirstFollow { - - private Grammar grammar0; - private Grammar grammar1; - - @Before - public void setUp() { - this.initGrammar0(); - this.initGrammar1(); - } - - private void initGrammar0() { - /* - Z -> d - Z -> X Y Z - Y -> - Y -> c - X -> Y - X -> a - */ - - List nonterminals = new ArrayList<>(); - String[] narray = {"X", "Y", "Z"}; - nonterminals = Arrays.asList(narray); - - List terminals = new ArrayList<>(); - String[] tarray = {"a", "c", "d", "$"}; - terminals = Arrays.asList(tarray); - - String startSymbol = "Z"; - List productions = new ArrayList<>(); - String[] production0 = {"d"}; - productions.add(new Rule("Z", Arrays.asList(production0))); - String[] production1 = {"X", "Y", "Z"}; - productions.add(new Rule("Z", Arrays.asList(production1))); - productions.add(new Rule("Y", Collections.emptyList())); - String[] production2 = {"c"}; - productions.add(new Rule("Y", Arrays.asList(production2))); - String[] production3 = {"Y"}; - productions.add(new Rule("X", Arrays.asList(production3))); - String[] production4 = {"a"}; - productions.add(new Rule("X", Arrays.asList(production4))); - - this.grammar0 = new Grammar(nonterminals, terminals, - startSymbol, productions); - } - - - private void initGrammar1() { - /* - E -> T E' - E' -> + T E' - E' -> - T -> F T' - T' -> * F T' - T' -> - F -> ( E ) - F -> id - - */ - - List nonterminals = new ArrayList<>(); - String[] narray = {"E", "E'", "T", "T'", "F"}; - nonterminals = Arrays.asList(narray); - - List terminals = new ArrayList<>(); - String[] tarray = {"+", "*", "(", ")", "id", "$"}; - terminals = Arrays.asList(tarray); - - String startSymbol = "E"; - List productions = new ArrayList<>(); - String[] production0 = {"T", "E'"}; - productions.add(new Rule("E", Arrays.asList(production0))); - String[] production1 = {"+", "T", "E'"}; - productions.add(new Rule("E'", Arrays.asList(production1))); - productions.add(new Rule("E'", Collections.emptyList())); - String[] production2 = {"F", "T'"}; - productions.add(new Rule("T", Arrays.asList(production2))); - String[] production3 = {"*", "F", "T'"}; - productions.add(new Rule("T'", Arrays.asList(production3))); - productions.add(new Rule("T'", Collections.emptyList())); - String[] production4 = {"(", "E", ")"}; - productions.add(new Rule("F", Arrays.asList(production4))); - String[] production5 = {"id"}; - productions.add(new Rule("F", Arrays.asList(production5))); - - this.grammar1 = new Grammar(nonterminals, terminals, - startSymbol, productions); - } - - - @Test - public void testNullable0() { - GrammarAnalyzer ga = new GrammarAnalyzer(this.grammar0); - Set nullable = ga.getNullable(); - assertTrue(nullable.contains("Y")); - assertTrue(nullable.contains("X")); - assertTrue(!nullable.contains("Z")); - assertEquals(2, nullable.size()); - } - - @Test - public void testNullable1() { - GrammarAnalyzer ga = new GrammarAnalyzer(this.grammar1); - Set nullable = ga.getNullable(); - assertTrue(nullable.contains("E'")); - assertTrue(nullable.contains("T'")); - assertTrue(!nullable.contains("E")); - assertEquals(2, nullable.size()); - } - - @Test - public void testFirst0() { - GrammarAnalyzer ga = new GrammarAnalyzer(this.grammar0); - Map> first = ga.getFirst(); - assertTrue(first.get("Y").contains("c")); - assertEquals(1, first.get("Y").size()); - assertTrue(first.get("X").contains("c")); - assertTrue(first.get("X").contains("a")); - assertEquals(2, first.get("X").size()); - assertTrue(first.get("Z").contains("c")); - assertTrue(first.get("Z").contains("a")); - assertTrue(first.get("Z").contains("d")); - assertEquals(3, first.get("Z").size()); - } - - - @Test - public void testFirst1() { - GrammarAnalyzer ga = new GrammarAnalyzer(this.grammar1); - Map> first = ga.getFirst(); - assertTrue(first.get("E").contains("id")); - assertTrue(first.get("E").contains("(")); - assertEquals(2, first.get("E").size()); - assertTrue(first.get("T").contains("id")); - assertTrue(first.get("T").contains("(")); - assertEquals(2, first.get("T").size()); - assertTrue(first.get("E'").contains("+")); - assertEquals(1, first.get("E'").size()); - assertTrue(first.get("T'").contains("*")); - assertEquals(1, first.get("T'").size()); - assertTrue(first.get("F").contains("id")); - assertTrue(first.get("F").contains("(")); - assertEquals(2, first.get("F").size()); - } - - @Test - public void testFollow0() { - GrammarAnalyzer ga = new GrammarAnalyzer(this.grammar0); - Map> follow = ga.getFollow(); - assertTrue(follow.get("X").contains("a")); - assertTrue(follow.get("X").contains("c")); - assertTrue(follow.get("X").contains("d")); - assertEquals(3, follow.get("X").size()); - assertTrue(follow.get("Y").contains("a")); - assertTrue(follow.get("Y").contains("c")); - assertTrue(follow.get("Y").contains("d")); - assertEquals(3, follow.get("Y").size()); - assertTrue(follow.get("Z").contains("$")); - assertEquals(1, follow.get("Z").size()); - } - - @Test - public void testFollow1() { - GrammarAnalyzer ga = new GrammarAnalyzer(this.grammar1); - Map> follow = ga.getFollow(); - assertTrue(follow.get("E").contains(")")); - assertTrue(follow.get("E").contains("$")); - assertEquals(2, follow.get("E").size()); - assertTrue(follow.get("T").contains("+")); - assertTrue(follow.get("T").contains(")")); - assertTrue(follow.get("T").contains("$")); - assertEquals(3, follow.get("T").size()); - assertTrue(follow.get("T'").contains("$")); - assertTrue(follow.get("T'").contains("+")); - assertTrue(follow.get("T'").contains(")")); - assertEquals(3, follow.get("T'").size()); - assertTrue(follow.get("E'").contains("$")); - assertTrue(follow.get("E'").contains(")")); - assertEquals(2, follow.get("E'").size()); - assertTrue(follow.get("F").contains("+")); - assertTrue(follow.get("F").contains(")")); - assertTrue(follow.get("F").contains("*")); - assertTrue(follow.get("F").contains("$")); - assertEquals(4, follow.get("F").size()); - } - - @Test - public void testTable1() { - GrammarAnalyzer ga = new GrammarAnalyzer(this.grammar1); - ILL1ParsingTable table = ga.getTable(); - List production; - - production = table.get("E", "id"); - assertTrue(production.get(0).equals("T")); - assertTrue(production.get(1).equals("E'")); - production = table.get("T", "id"); - assertTrue(production.get(0).equals("F")); - assertTrue(production.get(1).equals("T'")); - production = table.get("F", "id"); - assertTrue(production.get(0).equals("id")); - - production = table.get("E'", "+"); - assertTrue(production.get(0).equals("+")); - assertTrue(production.get(1).equals("T")); - assertTrue(production.get(2).equals("E'")); - production = table.get("T'", "+"); - assertEquals(0, production.size()); - - production = table.get("T'", "*"); - assertTrue(production.get(0).equals("*")); - assertTrue(production.get(1).equals("F")); - assertTrue(production.get(2).equals("T'")); - - production = table.get("E", "("); - assertTrue(production.get(0).equals("T")); - assertTrue(production.get(1).equals("E'")); - production = table.get("T", "("); - assertTrue(production.get(0).equals("F")); - assertTrue(production.get(1).equals("T'")); - production = table.get("F", "("); - assertTrue(production.get(0).equals("(")); - assertTrue(production.get(1).equals("E")); - assertTrue(production.get(2).equals(")")); - - production = table.get("E'", ")"); - assertEquals(0, production.size()); - production = table.get("T'", ")"); - assertEquals(0, production.size()); - production = table.get("E'", "$"); - assertEquals(0, production.size()); - production = table.get("T'", "$"); - assertEquals(0, production.size()); - } - -}