updates
This commit is contained in:
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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 {
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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");
|
||||
|
Reference in New Issue
Block a user