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.Vocabulary;
import parser.ast.AST;
import parser.ast.Node;
import parser.grammar.Grammar;
import parser.grammar.LL1GrammarAnalyzer;
import util.ast.AST;
import util.ast.Node;
import java.io.IOException;
import java.nio.file.Path;
@ -13,13 +13,13 @@ import java.util.ArrayDeque;
import java.util.Deque;
import java.util.List;
import static util.tools.Logger.log;
import static util.Logger.log;
public class LL1Parser {
private final ILL1ParsingTable parsetable;
private final LL1ParsingTable parsetable;
public LL1Parser(ILL1ParsingTable parsetable) {
public LL1Parser(LL1ParsingTable parsetable) {
this.parsetable = parsetable;
}

View File

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

View File

@ -1,8 +1,8 @@
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 {

View File

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

View File

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

View File

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

View File

@ -2,7 +2,7 @@ package parser.grammar;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import parser.ILL1ParsingTable;
import parser.LL1ParsingTable;
import java.util.Arrays;
import java.util.HashSet;
@ -165,7 +165,7 @@ class LL1GrammarAnalyzerTest {
@Test
void testTableGrammar1() {
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", "(")).isEqualTo("T E2");