Revision 44446
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/spi/AbstractLexicalAnalyzer.java | ||
---|---|---|
409 | 409 |
} |
410 | 410 |
while (true) { |
411 | 411 |
if (ch == EOF) { |
412 |
throw new ExpressionSyntaxException(I18N.End_of_string_was_expected_and_end_of_source_was_found(), this); |
|
412 |
// throw new ExpressionSyntaxException(I18N.End_of_string_was_expected_and_end_of_source_was_found(), this); |
|
413 |
break; |
|
413 | 414 |
} |
414 | 415 |
if( !Character.isDigit(ch) ) { |
415 | 416 |
break; |
... | ... | |
422 | 423 |
} else { |
423 | 424 |
s_d = 0; |
424 | 425 |
} |
425 |
if( !StringUtils.contains(" \"", ch) ) { |
|
426 |
if( ch!=EOF && !StringUtils.contains(" \"", ch) ) {
|
|
426 | 427 |
throw new ExpressionSyntaxException(I18N.Expected_XexpectedX_and_found_XfoundX(" ", String.valueOf(ch)), this); |
427 | 428 |
} |
428 | 429 |
|
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/ExpressionEvaluatorManager.java | ||
---|---|---|
31 | 31 |
|
32 | 32 |
public MutableSymbolTable createSymbolTable(); |
33 | 33 |
|
34 |
public SymbolTable getInmutableSymbolTable(); |
|
35 |
|
|
34 | 36 |
public SymbolTable getSymbolTable(String name); |
35 | 37 |
|
36 | 38 |
public Collection<SymbolTableFactory> getSymbolTableFactories(); |
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/ExpressionUtils.java | ||
---|---|---|
104 | 104 |
if( StringUtils.isBlank(expression) ) { |
105 | 105 |
return null; |
106 | 106 |
} |
107 |
if( symbolTable==null ) { |
|
108 |
symbolTable = createSymbolTable(); |
|
109 |
} |
|
110 | 107 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
111 | 108 |
Object x = manager.evaluate(symbolTable, expression); |
112 | 109 |
return x; |
... | ... | |
229 | 226 |
if( StringUtils.isBlank(s) ) { |
230 | 227 |
throw new NumberFormatException("Can't get integer from a blank string."); |
231 | 228 |
} |
232 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
233 | 229 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
230 |
SymbolTable symbolTable = null; //manager.getInmutableSymbolTable(); |
|
234 | 231 |
Object x; |
235 | 232 |
try { |
236 | 233 |
x = manager.evaluate(symbolTable, s); |
... | ... | |
252 | 249 |
if( StringUtils.isBlank(s) ) { |
253 | 250 |
throw new NumberFormatException("Can't get long from a blank string."); |
254 | 251 |
} |
255 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
256 | 252 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
253 |
SymbolTable symbolTable = null; //manager.getInmutableSymbolTable(); |
|
257 | 254 |
Object x; |
258 | 255 |
try { |
259 | 256 |
x = manager.evaluate(symbolTable, s); |
... | ... | |
275 | 272 |
if( StringUtils.isBlank(s) ) { |
276 | 273 |
throw new NumberFormatException("Can't get double from a blank string."); |
277 | 274 |
} |
278 |
MutableSymbolTable symbolTable = createSymbolTable(); |
|
279 | 275 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
276 |
SymbolTable symbolTable = null; //manager.getInmutableSymbolTable(); |
|
280 | 277 |
Object x; |
281 | 278 |
try { |
282 | 279 |
x = manager.evaluate(symbolTable, s); |
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/InmutableSymbolTable.java | ||
---|---|---|
1 |
package org.gvsig.expressionevaluator.impl; |
|
2 |
|
|
3 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
|
4 |
import org.gvsig.expressionevaluator.SymbolTable; |
|
5 |
import org.gvsig.expressionevaluator.spi.AbstractSymbolTable; |
|
6 |
|
|
7 |
/** |
|
8 |
* |
|
9 |
* @author jjdelcerro |
|
10 |
*/ |
|
11 |
public class InmutableSymbolTable |
|
12 |
extends AbstractSymbolTable |
|
13 |
implements SymbolTable { |
|
14 |
|
|
15 |
private boolean locked; |
|
16 |
public InmutableSymbolTable() { |
|
17 |
this.locked = false; |
|
18 |
this.init(); |
|
19 |
} |
|
20 |
|
|
21 |
private void init() { |
|
22 |
DefaultExpressionEvaluatorManager manager = (DefaultExpressionEvaluatorManager) ExpressionEvaluatorLocator.getManager(); |
|
23 |
manager.populateSymbolTable(this); |
|
24 |
this.locked = true; |
|
25 |
} |
|
26 |
|
|
27 |
@Override |
|
28 |
public boolean addSymbolTable(SymbolTable symbolTable) { |
|
29 |
if( this.locked ) { |
|
30 |
throw new UnsupportedOperationException(); |
|
31 |
} |
|
32 |
return super.addSymbolTable(symbolTable); |
|
33 |
} |
|
34 |
|
|
35 |
@Override |
|
36 |
public boolean removeSymbolTable(SymbolTable symbolTable) { |
|
37 |
throw new UnsupportedOperationException(); |
|
38 |
} |
|
39 |
|
|
40 |
|
|
41 |
} |
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/DefaultExpressionEvaluatorManager.java | ||
---|---|---|
47 | 47 |
private final Map<String,GrammarFactory> grammarFactories; |
48 | 48 |
private Bookmarks<Expression> bookmarks; |
49 | 49 |
private History<Expression> history; |
50 |
private SymbolTable inmutableSymbolTable; |
|
50 | 51 |
|
51 | 52 |
public DefaultExpressionEvaluatorManager() { |
52 | 53 |
this.symbolTableFactories = new HashMap<>(); |
... | ... | |
76 | 77 |
throw new IllegalArgumentException("factory can't be null"); |
77 | 78 |
} |
78 | 79 |
this.symbolTableFactories.put(factory.getName().toUpperCase(),factory); |
80 |
this.inmutableSymbolTable = null; |
|
79 | 81 |
} |
80 | 82 |
|
81 | 83 |
@Override |
84 |
public SymbolTable getInmutableSymbolTable() { |
|
85 |
if( this.inmutableSymbolTable==null ) { |
|
86 |
this.inmutableSymbolTable = new InmutableSymbolTable(); |
|
87 |
} |
|
88 |
return this.inmutableSymbolTable; |
|
89 |
} |
|
90 |
|
|
91 |
@Override |
|
82 | 92 |
public Object evaluate(String source) { |
83 | 93 |
DefaultInterpreter interpreter = new DefaultInterpreter(); |
84 | 94 |
DefaultCompiler compiler = new DefaultCompiler(); |
... | ... | |
91 | 101 |
DefaultInterpreter interpreter = new DefaultInterpreter(); |
92 | 102 |
DefaultCompiler compiler = new DefaultCompiler(); |
93 | 103 |
Code code = compiler.compileExpression(source); |
94 |
interpreter.setSymbolTable(symbolTable); |
|
104 |
if( symbolTable!=null ) { |
|
105 |
interpreter.setSymbolTable(symbolTable); |
|
106 |
} |
|
95 | 107 |
return interpreter.run(code); |
96 | 108 |
} |
97 | 109 |
|
98 | 110 |
@Override |
99 | 111 |
public Object evaluate(SymbolTable symbolTable, Code code) { |
100 | 112 |
DefaultInterpreter interpreter = new DefaultInterpreter(); |
101 |
interpreter.setSymbolTable(symbolTable); |
|
113 |
if( symbolTable!=null ) { |
|
114 |
interpreter.setSymbolTable(symbolTable); |
|
115 |
} |
|
102 | 116 |
return interpreter.run(code); |
103 | 117 |
} |
104 | 118 |
|
Also available in: Unified diff