package org.krakenapps.logdb.query.parser; import static org.krakenapps.bnf.Syntax.k; import static org.krakenapps.bnf.Syntax.option; import static org.krakenapps.bnf.Syntax.ref; import org.krakenapps.bnf.Binding; import org.krakenapps.bnf.Syntax; import org.krakenapps.logdb.LogQueryParser; import org.krakenapps.logdb.query.StringPlaceholder; import org.krakenapps.logdb.query.command.Eval; import org.krakenapps.logdb.query.command.Term; public class EvalParser implements LogQueryParser { @Override public void addSyntax(Syntax syntax) { syntax.add("eval", this, k("eval "), ref("term"), option(k("as "), new StringPlaceholder())); syntax.addRoot("eval"); } @Override public Object parse(Binding b) { Term term = (Term) b.getChildren()[1].getValue(); String column = term.toString(); if (b.getChildren().length == 3) column = (String) b.getChildren()[2].getChildren()[1].getValue(); return new Eval(term, column); } }