-
Parser.add(boolean required)
add := add (<PLUS> mul | <MINUS> mul)*
Parser.and(boolean required)
Parser.cmp(boolean required)
cmp := add (<LT> add | <LE> add | <GE> add | <GT> add)*
consume current token (get next token).
consume current token (get next token); throw exception if the current token doesn't
match the expected symbol.
Parser.eq(boolean required)
eq := cmp (<EQ> cmp | <NE> cmp)*
eval := dynamic | deferred
Parser.eval(boolean required,
boolean deferred)
dynmamic := <START_EVAL_DYNAMIC> expr <END_EVAL>
deferred := <START_EVAL_DEFERRED> expr <END_EVAL>
Parser.expr(boolean required)
expr := or (<QUESTION> expr <COLON> expr)?
protected void
protected void
literal := <TRUE> | <FALSE> | <STRING> | <INTEGER> | <FLOAT> | <NULL>
Parser.mul(boolean required)
mul := unary (<MUL> unary | <DIV> unary | <MOD> unary)*
nonliteral := <IDENTIFIER> | function | <LPAREN> expr <RPAREN>
function := (<IDENTIFIER> <COLON>)? <IDENTIFIER> <LPAREN> list? <RPAREN>
Parser.or(boolean required)
params := <LPAREN> (expr (<COMMA> expr)*)? <RPAREN>
Parse a floating point literal.
Parse an integer literal.
tree := text? ((dynamic text?)+ | (deferred text?)+)?
Parser.unary(boolean required)
unary := <NOT> unary | <MINUS> unary | <EMPTY> unary | value
value := (nonliteral | literal) (<DOT> <IDENTIFIER> | <LBRACK> expr <RBRACK>)*