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

View differences:

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