Revision 44361 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; |
|
7 | 6 |
import org.gvsig.expressionevaluator.Compiler; |
8 | 7 |
import org.gvsig.expressionevaluator.LexicalAnalyzer; |
9 | 8 |
import org.gvsig.expressionevaluator.LexicalAnalyzer.Token; |
10 | 9 |
import org.gvsig.expressionevaluator.Code; |
11 |
import org.gvsig.expressionevaluator.Code.Constant; |
|
12 | 10 |
import org.gvsig.expressionevaluator.CodeBuilder; |
13 | 11 |
import org.gvsig.expressionevaluator.Codes; |
14 |
import org.gvsig.expressionevaluator.ExpressionBuilder; |
|
15 | 12 |
import org.gvsig.expressionevaluator.ExpressionSyntaxException; |
16 | 13 |
import org.gvsig.expressionevaluator.GrammarSet; |
17 | 14 |
import org.gvsig.expressionevaluator.Statement; |
... | ... | |
277 | 274 |
case Token.PRED_IS: { |
278 | 275 |
lexer.next(); |
279 | 276 |
Token next = lexer.look(); |
280 |
if( next.getType() == Token.NOTNULL ) { |
|
281 |
op1 = codeBuilder.is(op1, codeBuilder.constant(null)); |
|
282 |
op1 = codeBuilder.not(op1); |
|
283 |
} else { |
|
284 |
op2 = parse_sum(); |
|
285 |
if( op2==null ) { |
|
286 |
throw new ExpressionSyntaxException(I18N.Cant_recognize_the_second_operand_of_IS_operator(),lexer); |
|
287 |
} |
|
288 |
op1 = codeBuilder.is(op1, op2); |
|
277 |
switch(next.getType()) { |
|
278 |
case Token.NOTNULL: |
|
279 |
lexer.next(); |
|
280 |
op1 = codeBuilder.is(op1, codeBuilder.constant(null)); |
|
281 |
op1 = codeBuilder.not(op1); |
|
282 |
break; |
|
283 |
case Token.OP_NOT: |
|
284 |
lexer.next(); |
|
285 |
next = lexer.look(); |
|
286 |
if( next.getType() == Token.NULL ) { |
|
287 |
lexer.next(); |
|
288 |
op1 = codeBuilder.is(op1, codeBuilder.constant(null)); |
|
289 |
} else { |
|
290 |
op2 = parse_sum(); |
|
291 |
if( op2==null ) { |
|
292 |
throw new ExpressionSyntaxException(I18N.Cant_recognize_the_second_operand_of_IS_operator(),lexer); |
|
293 |
} |
|
294 |
op1 = codeBuilder.is(op1, op2); |
|
295 |
} |
|
296 |
op1 = codeBuilder.not(op1); |
|
297 |
break; |
|
298 |
case Token.NULL: |
|
299 |
lexer.next(); |
|
300 |
op1 = codeBuilder.is(op1, codeBuilder.constant(null)); |
|
301 |
break; |
|
302 |
default: |
|
303 |
op2 = parse_sum(); |
|
304 |
if( op2==null ) { |
|
305 |
throw new ExpressionSyntaxException(I18N.Cant_recognize_the_second_operand_of_IS_operator(),lexer); |
|
306 |
} |
|
307 |
op1 = codeBuilder.is(op1, op2); |
|
289 | 308 |
} |
290 | 309 |
} |
291 | 310 |
break; |
Also available in: Unified diff