package com.kreative.paint.material.shape;
import java.util.HashMap;
import java.util.Map;
public class PSCalc {
public static void main(String[] args) {
Bindings bindings = new Bindings() {
private Map<String,Double> map = new HashMap<String,Double>();
@Override
public double get(String key) {
return map.containsKey(key) ? map.get(key) : Double.NaN;
}
@Override
public void set(String key, double value) {
map.put(key, value);
}
@Override
public void remove(String key) {
map.remove(key);
}
};
StringBuffer s = new StringBuffer();
for (String arg : args) {
if (arg.startsWith("-D")) {
if (s.length() > 0) {
parseEvalPrint(s.toString(), bindings);
s = new StringBuffer();
}
arg = arg.substring(2);
int i = arg.indexOf('=');
if (i < 0) {
bindings.remove(arg);
} else {
String key = arg.substring(0, i);
String valueString = arg.substring(i + 1);
try {
double value = Double.parseDouble(valueString);
bindings.set(key, value);
} catch (NumberFormatException e) {
bindings.remove(key);
}
}
} else {
if (s.length() > 0) s.append(" ");
s.append(arg);
}
}
if (s.length() > 0) parseEvalPrint(s.toString(), bindings);
}
private static void parseEvalPrint(String s, Bindings bindings) {
ExpressionLexer lexer = new ExpressionLexer(s);
ExpressionParser parser = new ExpressionParser(lexer);
while (lexer.hasNext()) {
try {
Expression e = parser.parseExpression();
double v = e.eval(bindings);
System.out.println(v);
} catch (ExpressionParserException e) {
System.err.println("Error: " + e.getMessage());
}
}
}
}