Class ShuntingYard

    • Constructor Detail

      • ShuntingYard

        public ShuntingYard​(Jep jep,
                            java.util.List<GrammarMatcher> gm)
        Normal constructor, itterator set in parse(Iterator)
        Parameters:
        jep - Jep instance
        gm - list of grammar rules
    • Method Detail

      • parse

        public Node parse​(java.util.Iterator<Token> input)
                   throws ParseException
        Main entry point, construct tree from sequence of tokens.
        Specified by:
        parse in interface GrammarParser
        Parameters:
        input - stream of tokens
        Returns:
        constructed tree
        Throws:
        ParseException - if the input cannot be parsed
      • expression

        protected void expression()
                           throws ParseException
        Match prefixSuffix() optionally followed by a binary or ternary operator or an implicit multiplication. Consumes tokens and pushes operators found onto to the stack.
        Throws:
        ParseException
      • parsePrefixSuffix

        public Node parsePrefixSuffix()
                               throws ParseException
        Callback function used by GrammerMatchers where the matcher expects a simple number, variable, or function call with optional, prefix or suffix operator.
        Specified by:
        parsePrefixSuffix in interface GrammarParser
        Returns:
        node tree or null if parsing failed to match
        Throws:
        ParseException - if the input cannot be parsed
      • prefixSuffix

        protected void prefixSuffix()
                             throws ParseException
        A prefix() optionally followed by suffix operators.
        Throws:
        ParseException
      • prefixSuffixUnchecked

        protected ShuntingYard.PrefixRes prefixSuffixUnchecked()
                                                        throws ParseException
        Attempt to match a prefix optionally followed by suffix operators.
        Returns:
        code indicating state of parsing
        Throws:
        ParseException - if node construction fails
        Since:
        3.5
      • prefixUnchecked

        protected ShuntingYard.PrefixRes prefixUnchecked()
                                                  throws ParseException
        Matches identifies, numbers, prefix operators and plugged in grammar matchers.
        Returns:
        code indicating state of parsing
        Throws:
        ParseException - if node construction fails
        Since:
        3.5
      • prefix

        protected void prefix()
                       throws ParseException
        Matches identifies, numbers, prefix operators and plugged in grammar matchers. Wrapper function around the prefixUnchecked()
        Throws:
        ParseException - if input fails to match or error construction node tree
      • pushOp

        protected void pushOp​(Operator op,
                              Token tok)
                       throws ParseException
        The pushOp function is worth some explanation Say 1+2*3 is parsed. First + is pushed onto the stack, then * is pushed. For 1*2+3. * is pushed, when + is encountered * has tighter precedence so it and the top two elements from the node stack are popped, the result computed and pushed on the node stack. Special cases -1+2 [uminus,+],[1] -> [+],[-1] -> [+],[-1,2] -> [],[(-1)+2] -1^2 [uminus,^],[1] -> [uminus,^],[1] -> [uminus,^],[1,2] -> [uminus],[1^2] -> [],[-(1^2)] 1^-2 [^],[1] -> [^,uminus],[1] ->[^,uminus],[1,2] -> [^],[1,(-2)] ->[],[1^(-2)]
        Parameters:
        op -
        tok - Token operator came from
        Throws:
        ParseException
      • compareOps

        protected boolean compareOps​(Operator op1,
                                     Operator op2)
        Compare operators based on their precedence and associativity.
        Parameters:
        op1 -
        op2 -
        Returns:
        true if op1 has a lower precedence than op2, or equal precedence and a left assoc op, etc.
      • popOp

        protected void popOp()
                      throws ParseException
        Pops an operator off the Operator stack, and creates a new node. The children of the node are poped off the node stack and the result is pushed onto the node stack.
        Throws:
        ParseException
      • dumpState

        protected void dumpState​(java.lang.String msg)