Class FunctionSequenceGrammarMatcher
java.lang.Object
com.singularsys.jep.configurableparser.matchers.FunctionSequenceGrammarMatcher
- All Implemented Interfaces:
GrammarMatcher,Serializable
A GrammarMatcher which matches functions in the form
atan2(seq) where
seq is a sequence of terms.
This differs from FunctionGrammarMatcher in that the sequence operator (usually ",")
is treated like a normal operator and parsed in the main ShuntingYard class.
So arguments 1,2,3,4 is parsed as a single subexpression rather than as four subexpressions.
The function must be in the FunctionTable and brackets are required.
To set up first a new sequence operator must be created. This should be a binary operator with right associativity. It should have a precedence level lower than all other operators. This operator should be passed to the constructor of the FunctionSequenceGrammarMatcher and possibly also the BracketedSequenceGrammarMatcher.
OperatorTable2 ot = new StandardOperatorTable2();
Operator seqOp = new Operator(",", null, Operator.BINARY+Operator.RIGHT);
ot.appendOperator(new OperatorKey() {}, seqOp, optab.getAssign()); // lower precedence than assignment
ConfigurableParser cp = new ConfigurableParser();
cp.addHashComments();
cp.addSlashComments();
cp.addSingleQuoteStrings();
cp.addDoubleQuoteStrings();
cp.addWhiteSpace();
cp.addExponentNumbers();
cp.addSymbols("(",")","[","]");
cp.setImplicitMultiplicationSymbols("(","[");
cp.addOperatorTokenMatcher();
cp.addIdentifiers();
cp.addSemiColonTerminator();
cp.addWhiteSpaceCommentFilter();
cp.addBracketMatcher("(",")");
// Add the function matcher
cp.addGrammarMatcher(new FunctionSequenceGrammarMatcher(
cp.getSymbolToken("("),
cp.getSymbolToken(")"),
seqOp));
// Add the bracket matcher
cp.addGrammarMatcher(new BracketedSequenceGrammarMatcher(
cp.getSymbolToken("["),
cp.getSymbolToken("]"),
seqOp
));
cp.addArrayAccessMatcher("[","]");
Jep jep = new Jep(ot,cp);
-
Constructor Summary
ConstructorsConstructorDescriptionFunctionSequenceGrammarMatcher(Token open, Token close, Operator seqOp) Create a FunctionGrammarMatcher -
Method Summary
Modifier and TypeMethodDescriptionvoidprotected TokenGenerate a token to use in GrammarExceptionsvoidDelayed initialisation, this method is called whenever components of the jep instance are changed.match(Lookahead2Iterator<Token> it, GrammarParser parser) Attempt to match a function, calls the GrammarParser.parseSubExpression() to match function arguments.
-
Constructor Details
-
FunctionSequenceGrammarMatcher
Create a FunctionGrammarMatcher- Parameters:
open- token representing an opening bracketclose- token representing a closing bracketseqOp- operator representing the sequence
-
-
Method Details
-
init
Description copied from interface:GrammarMatcherDelayed initialisation, this method is called whenever components of the jep instance are changed.- Specified by:
initin interfaceGrammarMatcher- Parameters:
jep- the current jep instance.
-
errorToken
Generate a token to use in GrammarExceptions- Parameters:
it- used to get current position- Returns:
- a TerminatorToken
-
match
Attempt to match a function, calls the GrammarParser.parseSubExpression() to match function arguments.- Specified by:
matchin interfaceGrammarMatcher- Parameters:
it- An iterator inspecting the inputparser- the parser to use when evaluating sub expressions- Returns:
- if matched returns a node representing the content, return null is does not match
- Throws:
ParseException- if there is a syntactical error in the input.
-
buildList
-