This commit is contained in:
ChUrl
2020-12-12 16:02:57 +01:00
parent a14f15618d
commit 98fcd9930c
7 changed files with 22 additions and 29 deletions

View File

@ -2,10 +2,10 @@ package parser;
import org.antlr.v4.runtime.Token; import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.Vocabulary; import org.antlr.v4.runtime.Vocabulary;
import parser.ast.AST;
import parser.ast.Node;
import parser.grammar.Grammar; import parser.grammar.Grammar;
import parser.grammar.LL1GrammarAnalyzer; import parser.grammar.LL1GrammarAnalyzer;
import util.ast.AST;
import util.ast.Node;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Path; import java.nio.file.Path;
@ -13,13 +13,13 @@ import java.util.ArrayDeque;
import java.util.Deque; import java.util.Deque;
import java.util.List; import java.util.List;
import static util.tools.Logger.log; import static util.Logger.log;
public class LL1Parser { public class LL1Parser {
private final ILL1ParsingTable parsetable; private final LL1ParsingTable parsetable;
public LL1Parser(ILL1ParsingTable parsetable) { public LL1Parser(LL1ParsingTable parsetable) {
this.parsetable = parsetable; this.parsetable = parsetable;
} }

View File

@ -12,7 +12,7 @@ import java.util.Map.Entry;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
public class LL1ParsingTable implements ILL1ParsingTable { public class LL1ParsingTable {
private final Grammar grammar; private final Grammar grammar;
private final Map<Entry<String, String>, String> parsetable; private final Map<Entry<String, String>, String> parsetable;
@ -22,32 +22,27 @@ public class LL1ParsingTable implements ILL1ParsingTable {
this.parsetable = parsetable; this.parsetable = parsetable;
} }
public static ILL1ParsingTable fromGrammar(Grammar grammar) { public static LL1ParsingTable fromGrammar(Grammar grammar) {
LL1GrammarAnalyzer analyzer = new LL1GrammarAnalyzer(grammar); LL1GrammarAnalyzer analyzer = new LL1GrammarAnalyzer(grammar);
return analyzer.getTable(); return analyzer.getTable();
} }
@Override
public String get(String nonterminal, String terminal) { public String get(String nonterminal, String terminal) {
return this.parsetable.get(new SimpleEntry<>(nonterminal, terminal)); return this.parsetable.get(new SimpleEntry<>(nonterminal, terminal));
} }
@Override
public String getStartSymbol() { public String getStartSymbol() {
return this.grammar.getStartSymbol(); return this.grammar.getStartSymbol();
} }
@Override
public Set<String> getNonterminals() { public Set<String> getNonterminals() {
return this.grammar.getNonterminals(); return this.grammar.getNonterminals();
} }
@Override
public Set<String> getTerminals() { public Set<String> getTerminals() {
return this.grammar.getTerminals(); return this.grammar.getTerminals();
} }
@Override
public String getEpsilon() { public String getEpsilon() {
return this.grammar.getEpsilonSymbol(); return this.grammar.getEpsilonSymbol();
} }

View File

@ -1,8 +1,8 @@
package parser; package parser;
import util.ast.AST; import parser.ast.AST;
import static util.tools.Logger.log; import static util.Logger.log;
public class MyParseException extends RuntimeException { public class MyParseException extends RuntimeException {

View File

@ -1,7 +1,5 @@
package parser.grammar; package parser.grammar;
import parser.Actions;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
@ -11,9 +9,9 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static parser.Actions.COMPACT; import static parser.grammar.Actions.COMPACT;
import static parser.Actions.NULLABLE; import static parser.grammar.Actions.NULLABLE;
import static util.tools.Logger.log; import static util.Logger.log;
public class Grammar { public class Grammar {

View File

@ -1,6 +1,5 @@
package parser.grammar; package parser.grammar;
import parser.ILL1ParsingTable;
import parser.LL1ParsingTable; import parser.LL1ParsingTable;
import java.util.AbstractMap; import java.util.AbstractMap;
@ -13,9 +12,9 @@ import java.util.Set;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static util.tools.Logger.log; import static util.Logger.log;
import static util.tools.Logger.logIfTrue; import static util.Logger.logIfTrue;
import static util.tools.Logger.logNullable; import static util.Logger.logNullable;
public class LL1GrammarAnalyzer { public class LL1GrammarAnalyzer {
@ -24,7 +23,7 @@ public class LL1GrammarAnalyzer {
private final Map<String, Set<String>> first; private final Map<String, Set<String>> first;
private final Map<String, Set<String>> follow; private final Map<String, Set<String>> follow;
private final ILL1ParsingTable table; private final LL1ParsingTable table;
public LL1GrammarAnalyzer(Grammar grammar) { public LL1GrammarAnalyzer(Grammar grammar) {
this.grammar = grammar; this.grammar = grammar;
@ -215,7 +214,7 @@ public class LL1GrammarAnalyzer {
return followOut; return followOut;
} }
private ILL1ParsingTable initParseTable() { private LL1ParsingTable initParseTable() {
Map<Map.Entry<String, String>, String> tableOut = new HashMap<>(); Map<Map.Entry<String, String>, String> tableOut = new HashMap<>();
log("Parsetable Aufstellen:"); log("Parsetable Aufstellen:");
@ -348,7 +347,7 @@ public class LL1GrammarAnalyzer {
return this.follow; return this.follow;
} }
public ILL1ParsingTable getTable() { public LL1ParsingTable getTable() {
return this.table; return this.table;
} }
} }

View File

@ -4,8 +4,9 @@ import lexer.StupsLexer;
import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.Lexer;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import parser.ast.AST;
import parser.ast.ASTCompacter;
import parser.grammar.Grammar; import parser.grammar.Grammar;
import util.ast.AST;
import java.io.IOException; import java.io.IOException;
import java.net.URISyntaxException; import java.net.URISyntaxException;

View File

@ -2,7 +2,7 @@ package parser.grammar;
import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import parser.ILL1ParsingTable; import parser.LL1ParsingTable;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet; import java.util.HashSet;
@ -165,7 +165,7 @@ class LL1GrammarAnalyzerTest {
@Test @Test
void testTableGrammar1() { void testTableGrammar1() {
LL1GrammarAnalyzer analyzer = new LL1GrammarAnalyzer(grammar1); LL1GrammarAnalyzer analyzer = new LL1GrammarAnalyzer(grammar1);
ILL1ParsingTable table = analyzer.getTable(); LL1ParsingTable table = analyzer.getTable();
assertThat(table.get("E", "id")).isEqualTo("T E2"); assertThat(table.get("E", "id")).isEqualTo("T E2");
assertThat(table.get("E", "(")).isEqualTo("T E2"); assertThat(table.get("E", "(")).isEqualTo("T E2");