Revision 44215 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/DefaultExpression.java
DefaultExpression.java | ||
---|---|---|
6 | 6 |
import java.util.List; |
7 | 7 |
import org.apache.commons.lang3.StringUtils; |
8 | 8 |
import org.gvsig.expressionevaluator.Code; |
9 |
import org.gvsig.expressionevaluator.Compiler; |
|
9 | 10 |
import org.gvsig.expressionevaluator.Expression; |
10 | 11 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorLocator; |
11 | 12 |
import org.gvsig.expressionevaluator.ExpressionEvaluatorManager; |
13 |
import org.gvsig.expressionevaluator.ExpressionUtils; |
|
12 | 14 |
import org.gvsig.expressionevaluator.Interpreter; |
13 | 15 |
import org.gvsig.expressionevaluator.Optimizer; |
14 | 16 |
import org.gvsig.expressionevaluator.SymbolTable; |
... | ... | |
38 | 40 |
private Code code = null; |
39 | 41 |
private Interpreter interpreter; |
40 | 42 |
private boolean hasNotBeenOptimized = true; |
43 |
private SymbolTable mySymbolTable = null; |
|
44 |
private boolean useBracketsForIdentifiers = false; |
|
41 | 45 |
|
42 | 46 |
public DefaultExpression() { |
43 | 47 |
|
44 | 48 |
} |
49 |
|
|
50 |
@Override |
|
51 |
public SymbolTable getSymbolTable() { |
|
52 |
if( this.mySymbolTable==null ) { |
|
53 |
this.mySymbolTable = ExpressionUtils.createSymbolTable(); |
|
54 |
} |
|
55 |
return this.mySymbolTable; |
|
56 |
} |
|
45 | 57 |
|
46 | 58 |
@Override |
47 | 59 |
public String getPhrase() { |
... | ... | |
147 | 159 |
public Code getCode() { |
148 | 160 |
if (this.code == null) { |
149 | 161 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
150 |
this.code = manager.compile(this.phrase); |
|
162 |
Compiler compiler = manager.createCompiler(); |
|
163 |
compiler.getLexicalAnalyzer().setUseBracketsForIdentifiers( |
|
164 |
this.useBracketsForIdentifiers |
|
165 |
); |
|
166 |
this.code = compiler.compileExpression(this.phrase); |
|
151 | 167 |
} |
152 | 168 |
return code; |
153 | 169 |
} |
... | ... | |
176 | 192 |
ExpressionEvaluatorManager manager = ExpressionEvaluatorLocator.getManager(); |
177 | 193 |
this.interpreter = manager.createInterpreter(); |
178 | 194 |
} |
179 |
this.interpreter.setSymbolTable(symbolTable); |
|
180 |
if( this.hasNotBeenOptimized ) { |
|
181 |
Optimizer optimizer = new DefaultOptimizer(symbolTable); |
|
182 |
this.code = optimizer.optimize(this.getCode()); |
|
183 |
this.hasNotBeenOptimized = false; |
|
195 |
boolean added = this.getSymbolTable().addSymbolTable(symbolTable); |
|
196 |
try { |
|
197 |
this.interpreter.setSymbolTable(this.mySymbolTable); |
|
198 |
if( this.hasNotBeenOptimized ) { |
|
199 |
Optimizer optimizer = new DefaultOptimizer(symbolTable); |
|
200 |
this.code = optimizer.optimize(this.getCode()); |
|
201 |
this.hasNotBeenOptimized = false; |
|
202 |
} |
|
203 |
Object x = this.interpreter.run(this.getCode()); |
|
204 |
|
|
205 |
return x; |
|
206 |
} finally { |
|
207 |
if( added ) { |
|
208 |
this.getSymbolTable().removeSymbolTable(symbolTable); |
|
209 |
} |
|
184 | 210 |
} |
185 |
Object x = this.interpreter.run(this.getCode()); |
|
186 |
return x; |
|
187 | 211 |
} |
188 | 212 |
|
189 | 213 |
@Override |
... | ... | |
341 | 365 |
return other; |
342 | 366 |
} |
343 | 367 |
|
368 |
@Override |
|
369 |
public void setUseBracketsForIdentifiers(boolean useBracketsForIdentifiers) { |
|
370 |
this.useBracketsForIdentifiers = useBracketsForIdentifiers; |
|
371 |
} |
|
372 |
|
|
373 |
@Override |
|
374 |
public boolean getUseBracketsForIdentifiers() { |
|
375 |
return this.useBracketsForIdentifiers; |
|
376 |
} |
|
377 |
|
|
344 | 378 |
} |
Also available in: Unified diff