package de.fuberlin.projectci.parseTable;
import de.fuberlin.projectci.grammar.Grammar;
/**
* Abstrakte Beschreibung eines ParseTableBuilders.
*/
public abstract class ParseTableBuilder {
private Grammar grammar;
/**
* Initialisiert den ParseTableBuilder mit einer zugehörigen (erweiterten!) Grammatik.
* @param grammar eine erweiterte Grammatik.
*/
public ParseTableBuilder(Grammar grammar) {
this.grammar=grammar;
}
/**
* Fabrikmethode zum Erzeugen eines konkreten ParseTableBuilder für die übergebene Grammatik.
*/
public static ParseTableBuilder createParseTableBuilder(Grammar grammar){
// Erst mal eine SLRParseTableBuilder verwenden.
// Kann später ggfs. gegen einen LALRParseTableBuilder ausgetauscht werden.
return new SLRParseTableBuilder(grammar);
}
public Grammar getGrammar(){
return grammar;
}
/**
* Baut die Parsetabelle (Action- und Goto-Tabelle) für die zugehörige Grammatik.
* @return eine Parsetabelle
* @throws InvalidGrammarException falls die Grammatik keine gültige (S|LA)LR-Grammatik ist.
*/
public abstract ParseTable buildParseTable() throws InvalidGrammarException;
}