package org.jtwig.parser.parboiled.expression;
import org.jtwig.model.expression.UnaryOperationExpression;
import org.jtwig.parser.parboiled.ParserContext;
import org.jtwig.parser.parboiled.base.PositionTrackerParser;
import org.jtwig.parser.parboiled.base.SpacingParser;
import org.jtwig.parser.parboiled.expression.operator.UnaryOperatorParser;
import org.parboiled.Rule;
public class UnaryOperationExpressionParser extends ExpressionParser<UnaryOperationExpression> {
public UnaryOperationExpressionParser(ParserContext context) {
super(UnaryOperationExpressionParser.class, context);
}
@Override
public Rule ExpressionRule() {
PositionTrackerParser positionTrackerParser = parserContext().parser(PositionTrackerParser.class);
UnaryOperatorParser unaryOperatorParser = parserContext().parser(UnaryOperatorParser.class);
SpacingParser spacingParser = parserContext().parser(SpacingParser.class);
PrimaryExpressionParser primaryExpressionParser = parserContext().parser(PrimaryExpressionParser.class);
return Sequence(
positionTrackerParser.PushPosition(),
unaryOperatorParser.UnaryOperator(),
spacingParser.Spacing(),
primaryExpressionParser.ExpressionRule(),
push(new UnaryOperationExpression(
positionTrackerParser.pop(2),
unaryOperatorParser.pop(1),
pop()
))
);
}
}