package org.jtwig.parser.parboiled.expression; import org.jtwig.model.expression.TernaryOperationExpression; import org.jtwig.parser.parboiled.ParserContext; import org.jtwig.parser.parboiled.base.PositionTrackerParser; import org.jtwig.parser.parboiled.base.SpacingParser; import org.parboiled.Rule; public class TernaryOperationExpressionParser extends ExpressionParser<TernaryOperationExpression> { public TernaryOperationExpressionParser(ParserContext context) { super(TernaryOperationExpressionParser.class, context); } @Override public Rule ExpressionRule() { SpacingParser spacingParser = parserContext().parser(SpacingParser.class); PositionTrackerParser positionTrackerParser = parserContext().parser(PositionTrackerParser.class); Rule initial = parserContext().parser(PrimaryExpressionParser.class).ExpressionRule(); Rule recursive = parserContext().parser(AnyExpressionParser.class).ExpressionRule(); return Sequence( positionTrackerParser.PushPosition(), initial, spacingParser.Spacing(), String("?"), spacingParser.Spacing(), recursive, spacingParser.Spacing(), String(":"), spacingParser.Spacing(), recursive, push(new TernaryOperationExpression( positionTrackerParser.pop(3), pop(2), pop(1), pop() )) ); } }