import org.simantics.scl.compiler.parser.generator.grammar.AnaGrammar;
import org.simantics.scl.compiler.parser.generator.grammar.Prod;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import gnu.trove.list.array.TIntArrayList;
import gnu.trove.list.array.TLongArrayList;
import gnu.trove.set.hash.TLongHashSet;
public class ParseTableBuilder {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ParseTableBuilder.class);
public final static int MAX_STACK_ID = 10;
private static final int STATE_MASK = 0x0fff;
//System.out.println(newState + " " + grammar.getName(a) + " " + stackOp);
if(stackOverflow) {
- System.err.println("Stack overflow when following " + grammar.getName(a) + " at");
- System.err.println(itemSet.toString(grammar));
+ LOGGER.error("Stack overflow when following " + grammar.getName(a) + " at");
+ LOGGER.error(itemSet.toString(grammar));
}
else {
int state = getState(a, b);
trans.put(symbol, REDUCE_MASK | production | (stackPos << 13));
}
else {
- System.err.println("Shift/reduce conflict when encountering " + grammar.terminalNames[symbol] + " in context");
- System.err.println(itemSets.get(i).toString(grammar));
+ LOGGER.error("Shift/reduce conflict when encountering " + grammar.terminalNames[symbol] + " in context");
+ LOGGER.error(itemSets.get(i).toString(grammar));
}
}
else {
- System.err.println("Reduce/reduce conflict when encountering " + grammar.terminalNames[symbol] + " in context");
- System.err.println(itemSets.get(i).toString(grammar));
+ LOGGER.error("Reduce/reduce conflict when encountering " + grammar.terminalNames[symbol] + " in context");
+ LOGGER.error(itemSets.get(i).toString(grammar));
}
}
else
builder.createReduceActions();
- System.out.println("States: " + builder.itemSets.size());
+ LOGGER.info("States: " + builder.itemSets.size());
//builder.visualize();
}
});
for(int i=0;i<stateSets.length;++i) {
- System.out.println("--- State " + i + " ---");
- System.out.println(stateSets[i].toString(grammar));
+ LOGGER.info("--- State " + i + " ---");
+ LOGGER.info(stateSets[i].toString(grammar));
final TIntIntHashMap stackOp = stackOps.get(i);
transitions.get(i).forEachEntry(new TIntIntProcedure() {
@Override
public boolean execute(int a, int b) {
int sOp = stackOp.get(a);
- System.out.print(grammar.getName(a) + " -> ");
+ LOGGER.info(grammar.getName(a) + " -> ");
if(sOp != 0) {
- System.out.print("[");
+ LOGGER.info("[");
if((sOp & PUSH_MASK) != 0) {
sOp ^= PUSH_MASK;
- System.out.print("PUSH ");
+ LOGGER.info("PUSH ");
}
if((sOp & POP_MASK) != 0) {
sOp ^= POP_MASK;
- System.out.print("POP ");
+ LOGGER.info("POP ");
}
if(sOp != 0)
- System.out.print(sOp);
- System.out.print("] ");
+ LOGGER.info(Integer.toString(sOp));
+ LOGGER.info("] ");
}
if((b & REDUCE_MASK) != 0) {
b ^= REDUCE_MASK;
- System.out.println("reduce " + b); // grammar.prods.get(~b).toString(grammar));
+ LOGGER.info("reduce " + b); // grammar.prods.get(~b).toString(grammar));
}
else {
- System.out.println("shift " + b);
+ LOGGER.info("shift " + b);
}
return true;
}