Index: src/java/main/org/jaxen/saxpath/base/XPathReader.java =================================================================== RCS file: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/saxpath/base/XPathReader.java,v retrieving revision 1.17 diff -u -r1.17 XPathReader.java --- src/java/main/org/jaxen/saxpath/base/XPathReader.java 20 May 2005 12:01:17 -0000 1.17 +++ src/java/main/org/jaxen/saxpath/base/XPathReader.java 14 Jun 2005 00:21:30 -0000 @@ -63,6 +63,7 @@ package org.jaxen.saxpath.base; import java.util.LinkedList; +import java.util.Stack; import org.jaxen.saxpath.Axis; import org.jaxen.saxpath.Operator; @@ -989,125 +990,71 @@ void additiveExpr() throws org.jaxen.saxpath.SAXPathException { - getXPathHandler().startAdditiveExpr(); - getXPathHandler().startAdditiveExpr(); - multiplicativeExpr(); - int operator = Operator.NO_OP; - - switch ( LA(1) ) + int la = LA(1); + while (la == PLUS || la == MINUS) { - case PLUS: - { - match( PLUS ); - operator = Operator.ADD; - multiplicativeExpr(); - break; - } - case MINUS: + switch ( la ) { - match( MINUS ); - operator = Operator.SUBTRACT; - multiplicativeExpr(); - break; - } - } - - getXPathHandler().endAdditiveExpr( operator ); - - - operator = Operator.NO_OP; - switch ( LA(1) ) - { - case PLUS: - { - match( PLUS ); - operator = Operator.ADD; - additiveExpr(); - break; - } - case MINUS: - { - match( MINUS ); - operator = Operator.SUBTRACT; - additiveExpr(); - break; - } - default: - { - operator = Operator.NO_OP; - break; + case PLUS: + { + match( PLUS ); + getXPathHandler().startAdditiveExpr(); + multiplicativeExpr(); + getXPathHandler().endAdditiveExpr( Operator.ADD ); + break; + } + case MINUS: + { + match( MINUS ); + getXPathHandler().startAdditiveExpr(); + multiplicativeExpr(); + getXPathHandler().endAdditiveExpr( Operator.SUBTRACT ); + break; + } } + la = LA(1); } - - getXPathHandler().endAdditiveExpr( operator ); } void multiplicativeExpr() throws org.jaxen.saxpath.SAXPathException { - getXPathHandler().startMultiplicativeExpr(); - getXPathHandler().startMultiplicativeExpr(); - unaryExpr(); - int operator = Operator.NO_OP; - - switch ( LA(1) ) - { - case STAR: - { - match( STAR ); - unaryExpr(); - operator = Operator.MULTIPLY; - break; - } - case DIV: - { - match( DIV ); - unaryExpr(); - operator = Operator.DIV; - break; - } - case MOD: - { - match( MOD ); - unaryExpr(); - operator = Operator.MOD; - break; - } - } - - getXPathHandler().endMultiplicativeExpr( operator ); - - operator = Operator.NO_OP; - - switch ( LA(1) ) + int la = LA(1); + while (la == STAR || la == DIV || la == MOD) { - case STAR: - { - match( STAR ); - multiplicativeExpr(); - operator = Operator.MULTIPLY; - break; - } - case DIV: - { - match( DIV ); - multiplicativeExpr(); - operator = Operator.DIV; - break; - } - case MOD: + switch ( LA(1) ) { - match( MOD ); - multiplicativeExpr(); - operator = Operator.MOD; - break; + case STAR: + { + match( STAR ); + getXPathHandler().startMultiplicativeExpr(); + unaryExpr(); + getXPathHandler().endMultiplicativeExpr( Operator.MULTIPLY ); + break; + } + case DIV: + { + match( DIV ); + getXPathHandler().startMultiplicativeExpr(); + unaryExpr(); + getXPathHandler().endMultiplicativeExpr( Operator.DIV ); + break; + } + case MOD: + { + match( MOD ); + getXPathHandler().startMultiplicativeExpr(); + unaryExpr(); + getXPathHandler().endMultiplicativeExpr( Operator.MOD ); + break; + } } + la = LA(1); } - getXPathHandler().endMultiplicativeExpr( operator ); } void unaryExpr() throws org.jaxen.saxpath.SAXPathException