Class BracketedRangeSequenceGrammarMatcher
- java.lang.Object
-
- com.singularsys.extensions.lambda.BracketedRangeSequenceGrammarMatcher
-
- All Implemented Interfaces:
GrammarMatcher,java.io.Serializable
public class BracketedRangeSequenceGrammarMatcher extends java.lang.Object implements GrammarMatcher
A GrammarMatcher which matches lists of items with the syntax[a..b], or a simple list[1,2,3,4]. Differs fromListOrRangeGrammarMatcheras both the sequence operator and range operator are parsed using the standard parser. So1,2,3,4is parsed as a single subexpression rather than as four subexpressions.The precedence of operator should be:
...; Or "||"; Range ".."; Ternary "?:"; Lambda "=>"; Equals "="; Sequence ","A typical setup might be:
OperatorTable2 ot = new StandardOperatorTable2(); Operator rangeOp = new RangeOperator("..", "[", "]", new Range(), Operator.BINARY); Operator seqOp = new Operator(",", null, Operator.BINARY+Operator.RIGHT); Operator lambdaOp = new Operator("=>", new LambdaFunGenerator(), Operator.BINARY); TernaryOperator ternOp = new TernaryOperator("cond", "?", ":", new TernaryConditional(), Operator.TERNARY+Operator.NARY+Operator.LEFT); ot.insertOperator(new OperatorKey() {}, rangeOp, ot.getAssign()); ot.insertOperator(new OperatorKey() {}, ternOp,ot.getAssign()); ot.insertOperator(new OperatorKey() {}, lambdaOp, ot.getAssign()); ot.appendOperator(new OperatorKey() {}, seqOp, ot.getAssign()); 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("(",")"); cp.addGrammarMatcher(new FunctionSequenceGrammarMatcher( cp.getSymbolToken("("), cp.getSymbolToken(")"), seqOp)); cp.addGrammarMatcher(new BracketedRangeSequenceGrammarMatcher( cp.getSymbolToken("["), cp.getSymbolToken("]"), rangeOp,seqOp )); cp.addArrayAccessMatcher("[","]"); //$NON-NLS-1$ //$NON-NLS-2$ lp = new StandardListProcessor(); jep = new Jep(ot,cp, lp);- See Also:
LambdaFunSeqTest, Serialized Form
-
-
Constructor Summary
Constructors Constructor Description BracketedRangeSequenceGrammarMatcher(Token open, Token close, Operator rangeOp, Operator seqOp)Create a ListGrammarMatcher
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidinit(Jep jep)Delayed initialisation, this methods is called whenever components of the jep instance are changed.Nodematch(Lookahead2Iterator<Token> it, GrammarParser parser)Test whether the input matches this pattern.
-
-
-
Constructor Detail
-
BracketedRangeSequenceGrammarMatcher
public BracketedRangeSequenceGrammarMatcher(Token open, Token close, Operator rangeOp, Operator seqOp)
Create a ListGrammarMatcher- Parameters:
open- token representing an opening bracketclose- token representing a closing bracketrangeOp- operator representing the rangeseqOp- operator representing sequences
-
-
Method Detail
-
init
public void init(Jep jep)
Description copied from interface:GrammarMatcherDelayed initialisation, this methods is called whenever components of the jep instance are changed.- Specified by:
initin interfaceGrammarMatcher- Parameters:
jep- the current jep instance.
-
match
public Node match(Lookahead2Iterator<Token> it, GrammarParser parser) throws ParseException
Description copied from interface:GrammarMatcherTest whether the input matches this pattern.- 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.
-
-