Revision 46081
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.impl/src/test/java/org/gvsig/expresionevaluator/impl/TestCompiler.java | ||
---|---|---|
574 | 574 |
code.link(this.createSymbolTable()); |
575 | 575 |
assertEquals( "list(1, 2, 3).set(1, 20)", code.toString()); |
576 | 576 |
} |
577 |
|
|
578 |
public void testColon1() { |
|
579 |
String source = ":a+b"; |
|
580 |
|
|
581 |
Compiler compiler = createCompiler(); |
|
582 |
|
|
583 |
Code code = compiler.compileExpression(source); |
|
584 |
code.link(this.createSymbolTable()); |
|
585 |
assertEquals( "($EVAL(\"a\") + \"b\")", code.toString()); |
|
586 |
} |
|
577 | 587 |
|
588 |
public void testColon2() { |
|
589 |
String source = ":(a+b)+c"; |
|
590 |
|
|
591 |
Compiler compiler = createCompiler(); |
|
592 |
|
|
593 |
Code code = compiler.compileExpression(source); |
|
594 |
code.link(this.createSymbolTable()); |
|
595 |
assertEquals( "($EVAL((\"a\" + \"b\")) + \"c\")", code.toString()); |
|
596 |
} |
|
597 |
|
|
598 |
|
|
599 |
public void testColon3() { |
|
600 |
String source = ":a.c"; |
|
601 |
|
|
602 |
Compiler compiler = createCompiler(); |
|
603 |
|
|
604 |
Code code = compiler.compileExpression(source); |
|
605 |
code.link(this.createSymbolTable()); |
|
606 |
assertEquals( "GETATTR($EVAL(\"a\"), 'c')", code.toString()); |
|
607 |
} |
|
608 |
|
|
609 |
public void testColon4() { |
|
610 |
String source = ":IN a.c"; |
|
611 |
|
|
612 |
Compiler compiler = createCompiler(); |
|
613 |
|
|
614 |
Code code = compiler.compileExpression(source); |
|
615 |
code.link(this.createSymbolTable()); |
|
616 |
assertEquals( "GETATTR($EVAL(\"a\"), 'c')", code.toString()); |
|
617 |
} |
|
618 |
|
|
619 |
|
|
620 |
|
|
578 | 621 |
} |
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/function/programming/$EvalFunction.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl.function.programming; |
|
2 |
|
|
3 |
import org.apache.commons.lang3.Range; |
|
4 |
import static org.gvsig.expressionevaluator.ExpressionBuilder.FUNCTION_$EVAL; |
|
5 |
import org.gvsig.expressionevaluator.Function; |
|
6 |
import org.gvsig.expressionevaluator.Interpreter; |
|
7 |
import org.gvsig.expressionevaluator.spi.AbstractFunction; |
|
8 |
|
|
9 |
public class $EvalFunction extends AbstractFunction { |
|
10 |
|
|
11 |
public $EvalFunction() { |
|
12 |
super(Function.GROUP_PROGRAMMING, |
|
13 |
FUNCTION_$EVAL, |
|
14 |
Range.is(1), |
|
15 |
"Returns the value passed as a parameter.\n", |
|
16 |
FUNCTION_$EVAL+"({{expression}})", |
|
17 |
null, |
|
18 |
"Object", |
|
19 |
false |
|
20 |
); |
|
21 |
} |
|
22 |
|
|
23 |
@Override |
|
24 |
public boolean allowConstantFolding() { |
|
25 |
return false; |
|
26 |
} |
|
27 |
|
|
28 |
@Override |
|
29 |
public Object call(Interpreter interpreter, final Object[] args) throws Exception { |
|
30 |
return args[0]; |
|
31 |
} |
|
32 |
|
|
33 |
|
|
34 |
} |
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/SQLLexicalAnalyzer.java | ||
---|---|---|
98 | 98 |
return token; |
99 | 99 |
} |
100 | 100 |
ungetch(); |
101 |
token.set(Token.CHAR, ":");
|
|
101 |
token.set(Token.COLON, ":");
|
|
102 | 102 |
return token; |
103 | 103 |
|
104 | 104 |
case '<': |
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/I18N.java | ||
---|---|---|
172 | 172 |
return "non-keyword arg after keyword arg"; |
173 | 173 |
} |
174 | 174 |
|
175 |
static String invalid_mode_specifier_in_host_expression() { |
|
176 |
return "Invalid mode specifier in host expression"; |
|
177 |
} |
|
178 |
|
|
175 | 179 |
} |
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 | ||
---|---|---|
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: |
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/DefaultCodeBuilder.java | ||
---|---|---|
988 | 988 |
return function(FUNCTION_DICT, args); |
989 | 989 |
} |
990 | 990 |
|
991 |
@Override |
|
992 |
public Code $eval(Code obj) { |
|
993 |
BaseCodes args = args(); |
|
994 |
args.add(obj); |
|
995 |
return function(ExpressionBuilder.FUNCTION_$EVAL, args); |
|
996 |
} |
|
997 |
|
|
991 | 998 |
} |
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/symboltable/ProgrammingSymbolTable.java | ||
---|---|---|
2 | 2 |
|
3 | 3 |
import org.gvsig.expressionevaluator.Function; |
4 | 4 |
import org.gvsig.expressionevaluator.impl.function.programming.$ConstantFunction; |
5 |
import org.gvsig.expressionevaluator.impl.function.programming.$EvalFunction; |
|
5 | 6 |
import org.gvsig.expressionevaluator.impl.function.programming.$IdentifierFunction; |
6 | 7 |
import org.gvsig.expressionevaluator.impl.function.programming.CallFunction; |
7 | 8 |
import org.gvsig.expressionevaluator.impl.function.programming.CallMethodFunction; |
... | ... | |
91 | 92 |
this.addFunction(new ShowWindowFunction()); |
92 | 93 |
this.addFunction(new CreateHtmlPanelFunction()); |
93 | 94 |
this.addFunction(new SwingBlockFunction()); |
95 |
this.addFunction(new $EvalFunction()); |
|
94 | 96 |
} |
95 | 97 |
|
96 | 98 |
private void addOperator(Function operator) { |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/CodeBuilder.java | ||
---|---|---|
79 | 79 |
Code method(Code obj, String methodname, Codes args); |
80 | 80 |
|
81 | 81 |
Code let(String identifier, Code value); |
82 |
|
|
83 |
Code $eval(Code value); |
|
82 | 84 |
} |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/ExpressionBuilder.java | ||
---|---|---|
125 | 125 |
public static final String FUNCTION_DICT = "DICT"; |
126 | 126 |
public static final String FUNCTION_$CONSTANT = "$CONSTANT"; |
127 | 127 |
public static final String FUNCTION_$IDENTIFIER = "$IDENTIFIER"; |
128 |
public static final String FUNCTION_$EVAL = "$EVAL"; |
|
128 | 129 |
|
129 | 130 |
public static final String FUNCTION_GETATTR = "GETATTR"; |
130 | 131 |
public static final String FUNCTION_GETITEM = "GETITEM"; |
trunk/org.gvsig.desktop/org.gvsig.desktop.library/org.gvsig.expressionevaluator/org.gvsig.expressionevaluator.lib/org.gvsig.expressionevaluator.lib.api/src/main/java/org/gvsig/expressionevaluator/LexicalAnalyzer.java | ||
---|---|---|
47 | 47 |
public static final int CLOSED_BRACKET = 37; |
48 | 48 |
public static final int ASSIGNMENT = 38; |
49 | 49 |
public static final int ARGUMENT_ASSIGNMENT = 39; |
50 |
public static final int COLON = 40; |
|
50 | 51 |
|
51 | 52 |
@Override |
52 | 53 |
public Token clone() throws CloneNotSupportedException; |
Also available in: Unified diff