package de.fuberlin.projectci.test.driver;
import static org.junit.Assert.fail;
import java.util.logging.Level;
import java.util.logging.Logger;
import de.fuberlin.commons.lexer.ILexer;
import de.fuberlin.commons.parser.ISyntaxTree;
import de.fuberlin.commons.util.LogFactory;
import de.fuberlin.projecta.lexer.Lexer;
import de.fuberlin.projecta.lexer.io.StringCharStream;
import de.fuberlin.projectci.grammar.BNFGrammarReader;
import de.fuberlin.projectci.grammar.BNFParsingErrorException;
import de.fuberlin.projectci.grammar.Grammar;
import de.fuberlin.projectci.grammar.GrammarReader;
import de.fuberlin.projectci.parseTable.InvalidGrammarException;
import de.fuberlin.projectci.parseTable.ParseTable;
import de.fuberlin.projectci.parseTable.ParseTableBuilder;
import de.fuberlin.projectci.parseTable.SLRParseTableBuilder;
import de.fuberlin.projectci.test.driver.DriverTest.DriverTestDataProvider;
/**
* Driver-Testdaten für das Fibonacci-Beispiel.
*
*/
public class DriverTestDataProvider2 implements DriverTestDataProvider{
private static Logger logger = LogFactory.getLogger(DriverTestDataProvider1.class);
private ILexer lexer;
private ParseTable parseTable;
private Grammar grammar;
public DriverTestDataProvider2() {
super();
setUp();
}
// ****************************************************************************
// * Implementierung von DriverTestDataProvider
// ****************************************************************************
@Override
public ParseTable getParseTable() {
return parseTable;
}
@Override
public Grammar getGrammar() {
return grammar;
}
@Override
public ILexer getLexer() {
return lexer;
}
@Override
public ISyntaxTree expectedResult(){
return null;
}
private void setUp(){
grammar=sourceGrammar();
ParseTableBuilder ptb=new SLRParseTableBuilder(grammar);
try {
parseTable=ptb.buildParseTable();
logger.info("Valid source grammar.");
//System.out.println(parseTable.toString());
} catch (InvalidGrammarException e) {
logger.log(Level.INFO, "Invalid source grammar.",e);
}
String strProgram=
"def int fib(int n){\n"+
" if (n <= 1) return n;\n"+
" else {\n"+
" int fib;\n"+
" fib=fib(n-1) + fib(n-2);\n"+
" return fib;\n"+
" }\n"+
"}\n"+
"\n"+
"def int main(){\n"+
" int n;\n"+
" int fib;\n"+
" fib=fib(n);\n"+
" print fib;\n"+
" return fib;\n"+
"}\n";
lexer=new Lexer(new StringCharStream(strProgram));
}
private Grammar sourceGrammar(){
GrammarReader grammarReader = new BNFGrammarReader();
Grammar g3 = null;
try {
g3 = grammarReader.readGrammar("./input/de/fuberlin/projectci/non-ambigous.txt");
} catch (BNFParsingErrorException e) {
fail(e.getClass()+": "+e.getMessage());
}
return g3;
}
}