Revision 44738 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
18 18
import org.gvsig.expressionevaluator.impl.DefaultCodeBuilder.BaseConstant;
19 19
import org.gvsig.expressionevaluator.impl.function.operator.NegOperator;
20 20
import org.gvsig.expressionevaluator.impl.function.programming.CodeBlockFunction;
21
import org.gvsig.expressionevaluator.spi.AbstractLexicalAnalyzer;
22
import org.slf4j.Logger;
23
import org.slf4j.LoggerFactory;
21 24

  
22 25
public class DefaultCompiler implements Compiler {
23 26

  
27
    protected static final Logger LOGGER = LoggerFactory.getLogger(DefaultCompiler.class);
28
    
24 29
    class DefaultStatementContext implements StatementContext {
25 30

  
26 31
        private String codeClassifier;
......
89 94
            return DefaultCompiler.this.parse_expressions(separator);
90 95
        }
91 96
        
97
        @Override
92 98
        public boolean isReservedWord(String s) {
93 99
            return grammars.isReservedWord(s);
94 100
        }
101
        
102
        @Override
103
        public void trace(String msg) {
104
//          System.out.println(msg+". "+this.getLexicalAnalyzer().getSourceContext());
105
        } 
95 106
    }
96 107

  
97 108
    private boolean objectAccessSupported;
......
504 515
                Token next = lexer.look();
505 516
                if( next.getType() == Token.PARENTHESIS_OPEN ) {
506 517
                    lexer.next();
507
                    Codes args = parse_expressions(",");
518
                    Codes args = parse_arguments();
508 519
                    next = lexer.next();
509 520
                    switch(next.getType()) {
510 521
                        case Token.PARENTHESIS_CLOSE:
......
592 603
        }
593 604
    }
594 605

  
606
    public Codes parse_arguments() {
607
        String sep = ",";
608
        BaseCodes codes = null;
609
        while( true ) {
610
            ((AbstractLexicalAnalyzer)lexer).push_state();
611
            String argName = null;
612
            Token tok0 = lexer.next();
613
            Token tok1 = lexer.next();
614
            if( tok0.getType()==Token.IDENTIFIER && tok1.is(":") ) {
615
              argName = (String) tok0.getValue();
616
            } else {
617
              ((AbstractLexicalAnalyzer)lexer).pop_state();
618
            }
619
            Code code = parse_expression();
620
            if( code!=null ) {
621
                if( codes == null ) {
622
                    codes = (BaseCodes) codeBuilder.args();
623
                }
624
                codes.add(argName, code);
625
            }
626
            Token next = lexer.look();
627
            String literal = next.getLiteral();
628
            if( literal == null ) {
629
                return codes;
630
            }
631
            literal = literal.trim();
632
            if( sep.equals(literal) ) {
633
                lexer.next(); // Consume el ",".
634
            } else {
635
                return codes;
636
            }
637
        }
638
    }
639

  
595 640
    private Code parse_grammars() {
596 641
        StatementContext context = new DefaultStatementContext();
597 642
        Code code;

Also available in: Unified diff