Revision 46081 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 | ||
---|---|---|
517 | 517 |
} |
518 | 518 |
|
519 | 519 |
public Code parse_getattr() { |
520 |
Code op1 = parse_termino();
|
|
520 |
Code op1 = parse_colon();
|
|
521 | 521 |
if( !isObjectAccessSupported() ) { |
522 | 522 |
return op1; |
523 | 523 |
} |
... | ... | |
557 | 557 |
} |
558 | 558 |
} |
559 | 559 |
|
560 |
public Code parse_colon() { |
|
561 |
Token token = lexer.look(); |
|
562 |
if( token.getType() == Token.COLON ) { |
|
563 |
// Con esto pretendemos simular el uso de los ":" de SQLJ. |
|
564 |
// |
|
565 |
// https://docs.oracle.com/cd/A87860_01/doc/java.817/a83723/blangfe3.htm |
|
566 |
// Basic Host Expression Syntax |
|
567 |
// |
|
568 |
// Solo estamos dando soporte al especificador de modo "IN". |
|
569 |
lexer.next(); |
|
570 |
token = lexer.look(); |
|
571 |
if( token.getType() == Token.IDENTIFIER ) { |
|
572 |
switch(token.getLiteral().trim().toUpperCase()) { |
|
573 |
case "IN": |
|
574 |
lexer.next(); |
|
575 |
break; |
|
576 |
case "OUT": |
|
577 |
case "INOUT": |
|
578 |
// Invalid mode specifier in host expression |
|
579 |
throw new ExpressionSyntaxException( |
|
580 |
I18N.invalid_mode_specifier_in_host_expression(), |
|
581 |
lexer |
|
582 |
); |
|
583 |
} |
|
584 |
} |
|
585 |
Code op = parse_termino(); |
|
586 |
return codeBuilder.$eval(op); |
|
587 |
} |
|
588 |
return parse_termino(); |
|
589 |
} |
|
590 |
|
|
560 | 591 |
@SuppressWarnings("UnusedAssignment") |
561 | 592 |
public Code parse_termino() { |
562 | 593 |
|
... | ... | |
630 | 661 |
return codeBuilder.identifier(id); |
631 | 662 |
} |
632 | 663 |
} |
633 |
case Token.STRING_LITERAL: |
|
664 |
case Token.STRING_LITERAL:
|
|
634 | 665 |
lexer.next(); |
635 | 666 |
return codeBuilder.constant(token.getValue()); |
636 | 667 |
case Token.INTEGER_LITERAL: |
Also available in: Unified diff