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
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