package org.jtwig.parser.parboiled.expression; import org.jtwig.model.expression.ConstantExpression; import org.jtwig.parser.parboiled.ParserContext; import org.jtwig.parser.parboiled.base.LexicParser; import org.jtwig.parser.parboiled.base.PositionTrackerParser; import org.jtwig.parser.parboiled.model.Keyword; import org.parboiled.Rule; public class BooleanExpressionParser extends ExpressionParser<ConstantExpression> { public BooleanExpressionParser(ParserContext context) { super(BooleanExpressionParser.class, context); } @Override public Rule ExpressionRule() { return FirstOf( TrueRule(), FalseRule() ); } public Rule TrueRule () { PositionTrackerParser positionTrackerParser = parserContext().parser(PositionTrackerParser.class); LexicParser lexicParser = parserContext().parser(LexicParser.class); return Sequence( positionTrackerParser.PushPosition(), lexicParser.Keyword(Keyword.TRUE), push(new ConstantExpression(positionTrackerParser.pop(), true)) ); } public Rule FalseRule () { PositionTrackerParser positionTrackerParser = parserContext().parser(PositionTrackerParser.class); LexicParser lexicParser = parserContext().parser(LexicParser.class); return Sequence( positionTrackerParser.PushPosition(), lexicParser.Keyword(Keyword.FALSE), push(new ConstantExpression(positionTrackerParser.pop(), false)) ); } }