Revision 44211 trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/main/java/org/gvsig/expressionevaluator/impl/DefaultCompiler.java
DefaultCompiler.java | ||
---|---|---|
3 | 3 |
import java.util.HashMap; |
4 | 4 |
import java.util.Map; |
5 | 5 |
import org.apache.commons.lang3.StringUtils; |
6 |
import org.apache.commons.lang3.math.NumberUtils; |
|
6 | 7 |
import org.gvsig.expressionevaluator.Compiler; |
7 | 8 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
8 | 9 |
import org.gvsig.expressionevaluator.LexicalAnalyzer.Token; |
9 | 10 |
import org.gvsig.expressionevaluator.Code; |
11 |
import org.gvsig.expressionevaluator.Code.Constant; |
|
10 | 12 |
import org.gvsig.expressionevaluator.CodeBuilder; |
11 | 13 |
import org.gvsig.expressionevaluator.Codes; |
14 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
12 | 15 |
import org.gvsig.expressionevaluator.ExpressionSyntaxException; |
13 | 16 |
import org.gvsig.expressionevaluator.GrammarSet; |
14 | 17 |
import org.gvsig.expressionevaluator.Statement; |
15 | 18 |
import org.gvsig.expressionevaluator.Statement.StatementContext; |
16 | 19 |
import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.BaseCodes; |
20 |
import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.BaseConstant; |
|
21 |
import org.gvsig.expressionevaluator.impl.function.operator.NegOperator; |
|
17 | 22 |
|
18 | 23 |
public class DefaultCompiler implements Compiler { |
19 | 24 |
|
... | ... | |
513 | 518 |
case Token.OP_SUBST: |
514 | 519 |
lexer.next(); |
515 | 520 |
Code code = parse_termino(); |
521 |
if( code.code()==Code.CONSTANT ) { |
|
522 |
BaseConstant c = (BaseConstant)code; |
|
523 |
if( c.value() instanceof Number ) { |
|
524 |
c.value(NegOperator.negate((Number) c.value())); |
|
525 |
return code; |
|
526 |
} |
|
527 |
// Aqui no tengo claro si deberia lanzarse una excepcion |
|
528 |
// Ya que se esta intentando aplicar el operador unario de |
|
529 |
// negacion a algo que no es un numero. Lo normal es que falle |
|
530 |
// en tiempo de ejecucion. |
|
531 |
} |
|
516 | 532 |
return codeBuilder.negate(code); |
517 | 533 |
case Token.EOF: |
518 | 534 |
throw new ExpressionSyntaxException(I18N.unexpected_end_of_source(),lexer); |
Also available in: Unified diff