public final class OperatorTable<T> extends Object
Parser
to parse expressions with operator-precedence grammar. The operators
and precedences are declared in this table.
Operators have precedences. The higher the precedence number, the higher the precedence. For the same precedence, prefix > postfix > left-associative > non-associative > right-associative.
For example:
Unary<Integer> negate = new Unary<Integer>() {... return -n; };
Binary<Integer> plus = new Binary<Integer>() {... return a + b; };
Binary<Integer> minus = new Binary<Integer>() {... return a - b; };
...
Terminals terms = Terminals.operators("+", "-", "*", "/");
Parser<Integer> calculator = new OperatorTable()
.prefix(terms.token("-").retn(negate), 100)
.infixl(terms.token("+").retn(plus), 10)
.infixl(terms.token("-").retn(minus), 10)
.infixl(terms.token("*").retn(multiply), 20)
.infixl(terms.token("/").retn(divide), 20)
.build(Terminals.IntegerLiteral.PARSER.map(stringToInteger));
Parser<Integer> parser = calculator.from(
terms.tokenizer().or(Terminals.IntegerLiteral.TOKENIZER), Scanners.WHITESPACES.optional());
return parser.parse(text);
Constructor and Description |
---|
OperatorTable() |
Modifier and Type | Method and Description |
---|---|
Parser<T> |
build(Parser<? extends T> operand)
Builds a
Parser based on information in this OperatorTable . |
OperatorTable<T> |
infixl(Parser<? extends java.util.function.BiFunction<? super T,? super T,? extends T>> parser,
int precedence)
Adds an infix left-associative binary operator.
|
OperatorTable<T> |
infixn(Parser<? extends java.util.function.BiFunction<? super T,? super T,? extends T>> parser,
int precedence)
Adds an infix non-associative binary operator.
|
OperatorTable<T> |
infixr(Parser<? extends java.util.function.BiFunction<? super T,? super T,? extends T>> parser,
int precedence)
Adds an infix right-associative binary operator.
|
OperatorTable<T> |
postfix(Parser<? extends java.util.function.Function<? super T,? extends T>> parser,
int precedence)
Adds a postfix unary operator.
|
OperatorTable<T> |
prefix(Parser<? extends java.util.function.Function<? super T,? extends T>> parser,
int precedence)
Adds a prefix unary operator.
|
public OperatorTable<T> prefix(Parser<? extends java.util.function.Function<? super T,? extends T>> parser, int precedence)
parser
- the parser for the operator.precedence
- the precedence number.public OperatorTable<T> postfix(Parser<? extends java.util.function.Function<? super T,? extends T>> parser, int precedence)
parser
- the parser for the operator.precedence
- the precedence number.public OperatorTable<T> infixl(Parser<? extends java.util.function.BiFunction<? super T,? super T,? extends T>> parser, int precedence)
parser
- the parser for the operator.precedence
- the precedence number.public OperatorTable<T> infixr(Parser<? extends java.util.function.BiFunction<? super T,? super T,? extends T>> parser, int precedence)
parser
- the parser for the operator.precedence
- the precedence number.public OperatorTable<T> infixn(Parser<? extends java.util.function.BiFunction<? super T,? super T,? extends T>> parser, int precedence)
parser
- the parser for the operator.precedence
- the precedence number.Copyright © 2013–2016 jparsec. All rights reserved.