package org.jtwig.parser.parboiled.expression;
import org.jtwig.model.expression.Expression;
import org.jtwig.parser.parboiled.ParserContext;
import org.jtwig.parser.parboiled.base.SpacingParser;
import org.parboiled.Rule;
public class PrimaryExpressionParser extends ExpressionParser<Expression> {
public PrimaryExpressionParser(ParserContext context) {
super(PrimaryExpressionParser.class, context);
}
@Override
public Rule ExpressionRule() {
return FirstOf(
parserContext().parser(UnaryOperationExpressionParser.class).ExpressionRule(),
ParenthesisRule(),
parserContext().parser(ConstantExpressionParser.class).ExpressionRule(),
parserContext().parser(FunctionExpressionParser.class).ExpressionRule(),
parserContext().parser(VariableExpressionParser.class).ExpressionRule()
);
}
Rule ParenthesisRule() {
return Sequence(
"(",
parserContext().parser(SpacingParser.class).Spacing(),
parserContext().parser(AnyExpressionParser.class).ExpressionRule(),
parserContext().parser(SpacingParser.class).Spacing(),
")"
);
}
}