Class LineNumberingShuntingYard

  • All Implemented Interfaces:
    GrammarParser

    public class LineNumberingShuntingYard
    extends ShuntingYard
    Version of the shunting yard algorithm which sets lines numbers in the parse tree. By convention numbering starts from line 1 column 1. Must be used with the ConfigurableParser and LineNumberingNodeFactory.
    Jep jep = new Jep(
      new StandardConfigurableParser(),
      new LineNumberingNodeFactory(),
      new LineNumberingShuntingYard.LineNumberGrammarParserFactory());
    
    Since:
    3.4.0
    Author:
    rich
    See Also:
    LineNumberingNodeFactory
    • Field Detail

      • posns

        protected java.util.Stack<com.singularsys.jep.misc.lineNumbering.LineNumberingShuntingYard.Position> posns
        Stack to track positions when pushing and popping operators
    • Constructor Detail

      • LineNumberingShuntingYard

        public LineNumberingShuntingYard​(Jep jep,
                                         java.util.List<GrammarMatcher> gm)
        Constructor
        Parameters:
        jep -
        gm -
    • Method Detail

      • popOp

        protected void popOp()
                      throws ParseException
        Description copied from class: ShuntingYard
        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.
        Overrides:
        popOp in class ShuntingYard
        Throws:
        ParseException
      • pushOp

        protected void pushOp​(Operator op,
                              Token tok)
                       throws ParseException
        Description copied from class: ShuntingYard
        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)]
        Overrides:
        pushOp in class ShuntingYard
        tok - Token operator came from
        Throws:
        ParseException