[Mathlib-commitlog] SF.net SVN: mathlib:[830] JMathLib/trunk/src/jmathlib/core/interpreter/ Parser.
Status: Beta
Brought to you by:
st_mueller
|
From: <st_...@us...> - 2009-02-04 18:36:07
|
Revision: 830
http://mathlib.svn.sourceforge.net/mathlib/?rev=830&view=rev
Author: st_mueller
Date: 2009-02-04 18:35:59 +0000 (Wed, 04 Feb 2009)
Log Message:
-----------
bugfix for a++ and a--
Modified Paths:
--------------
JMathLib/trunk/src/jmathlib/core/interpreter/Parser.java
Modified: JMathLib/trunk/src/jmathlib/core/interpreter/Parser.java
===================================================================
--- JMathLib/trunk/src/jmathlib/core/interpreter/Parser.java 2009-02-03 22:15:48 UTC (rev 829)
+++ JMathLib/trunk/src/jmathlib/core/interpreter/Parser.java 2009-02-04 18:35:59 UTC (rev 830)
@@ -398,10 +398,19 @@
{
// += or -=
ErrorLogger.debugLine("Parser: += or -=");
- nextToken = getNextToken(deliTyp);
- retToken = parseAssignmentOperator(nextToken, operandStack);
+ getNextToken(deliTyp);
+ retToken = parseAssignmentOperator(nextToken, operandStack);
}
+ else if((nextToken instanceof MulDivOperatorToken) &&
+ (pToken instanceof AssignmentOperatorToken))
+ {
+ // *= or /=
+ ErrorLogger.debugLine("Parser: *= or /=");
+ getNextToken(deliTyp);
+ retToken = parseAssignmentOperator(nextToken, operandStack);
+
+ }
else if( (nextToken instanceof AddSubOperatorToken)
|| (nextToken instanceof MulDivOperatorToken)
|| (nextToken instanceof PowerOperatorToken)
@@ -641,6 +650,7 @@
private OperandToken parseAssignmentOperator(Token currentToken, Stack operandStack)
{
// operator (this should be a "=" or ("+" for +=) or ("-" for -=))
+ // or "*" for *= or "/" for /=
OperatorToken operator = (OperatorToken)currentToken;
//parse right parameter
@@ -658,11 +668,20 @@
}
else if (currentToken instanceof AddSubOperatorToken)
{
- // e.g. a+=8
- tree = new Expression(operator, rightSide, new DoubleNumberToken(1.0));
+ // e.g. a+=8 -> a=a+8
+ // e.g. a-=7 -> a=a-7
+ ErrorLogger.debugLine("Parser: += or -=");
+ tree = new Expression(operator, leftSide, rightSide);
tree = new Expression(new AssignmentOperatorToken(), leftSide, tree);
- // ???????
}
+ else if (currentToken instanceof MulDivOperatorToken)
+ {
+ // e.g. a*=8 -> a=a*8
+ // e.g. a/=9 -> a=a/9
+ ErrorLogger.debugLine("Parser: *= or /=");
+ tree = new Expression(operator, leftSide, rightSide);
+ tree = new Expression(new AssignmentOperatorToken(), leftSide, tree);
+ }
return tree;
} // end parseAssignmentOperator
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|