Class BracketedSequenceGrammarMatcher

  • All Implemented Interfaces:
    GrammarMatcher, java.io.Serializable

    public class BracketedSequenceGrammarMatcher
    extends java.lang.Object
    implements GrammarMatcher
    A GrammarMatcher which matches lists of items with the syntax or a simple list [1,2,3,4]. This differs from the ListGrammarMatcher in that the comma operator is treated like a normal operator and parsed using the ShuntingYard. So 1,2,3,4 is parsed as a single subexpression rather than as four subexpressions.

    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("(",")","[","]"); // "," not include in symbols
     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);
     
    See Also:
    FunctionSequenceGrammarMatcher, CPSeqOpTest, Serialized Form
    • Constructor Detail

      • BracketedSequenceGrammarMatcher

        public BracketedSequenceGrammarMatcher​(Token open,
                                               Token close,
                                               Operator seqOp)
        Constructor. The operator for the list is found in the init() method
        Parameters:
        open - token representing an opening bracket
        close - token representing a closing bracket
        seqOp - operator representing the sequence
    • Method Detail

      • init

        public void init​(Jep jep)
        Description copied from interface: GrammarMatcher
        Delayed initialisation, this methods is called whenever components of the jep instance are changed.
        Specified by:
        init in interface GrammarMatcher
        Parameters:
        jep - the current jep instance.
      • match

        public Node match​(Lookahead2Iterator<Token> it,
                          GrammarParser parser)
                   throws ParseException
        Description copied from interface: GrammarMatcher
        Test whether the input matches this pattern.
        Specified by:
        match in interface GrammarMatcher
        Parameters:
        it - An iterator inspecting the input
        parser - 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.