g.addRule(new Rule(
new Word(new Symbol[] {new Nonterminal(new StringBuffer("S"))}),
new Word(new Symbol[] {
new Nonterminal(new StringBuffer("a")),
new Nonterminal(new StringBuffer("S")),
new Terminal(new StringBuffer("b"))})));
g.addRule(new Rule(
new Word(new Symbol[] {new Nonterminal(new StringBuffer("S"))}),
new Word(new Symbol[] {
new Nonterminal(new StringBuffer("S")),
new Terminal(new StringBuffer("S"))})));
g.addRule(new Rule(
new Word(new Symbol[] {new Nonterminal(new StringBuffer("S"))}),
new Word(new Symbol[] {new Terminal(new StringBuffer("a")), new Terminal(new StringBuffer("b"))})));
CtxtFreeGrammar g2 = new CtxtFreeGrammar(g);
try {
ParseTree[] trees = ChartParser.parse(