use of org.matheclipse.parser.client.SyntaxError in project symja_android_library by axkr.
the class SymjaInterpreter method interpreter.
/**
* Parse the <code>codeString</code> into an <code>IExpr</code> and if
* <code>function</code> unequals <code>null</code>, replace all occurences
* of slot <code>#</code> in the function with the parsed expression. After
* that evaluate the given expression.
*
* @param function
* @return
*/
public String interpreter(IAST function) {
String evalStr = codeString;
IExpr expr;
EvalEngine engine = EvalEngine.get();
try {
ExprParser p = new ExprParser(engine, true);
// throws SyntaxError exception, if syntax isn't valid
expr = p.parse(evalStr);
} catch (SyntaxError e1) {
try {
ExprParser p = new ExprParser(engine);
// throws SyntaxError exception, if syntax isn't valid
expr = p.parse(evalStr);
} catch (Exception e2) {
outStream.println(e2.getMessage());
return "";
}
}
IExpr result;
final StringBuilder buf = new StringBuilder();
try {
if (function != null) {
expr = function.replaceAll(F.Rule(F.Slot1, expr));
}
if (expr.isPresent()) {
result = evaluate(expr);
if (result.isPresent()) {
if (result.equals(F.Null)) {
return buf.toString();
}
OutputFormFactory.get(true).convert(buf, result);
}
return buf.toString();
}
} catch (final RuntimeException re) {
Throwable me = re.getCause();
if (me instanceof MathException) {
Validate.printException(buf, me);
} else {
Validate.printException(buf, re);
}
} catch (final Exception e) {
Validate.printException(buf, e);
}
return buf.toString();
}
use of org.matheclipse.parser.client.SyntaxError in project symja_android_library by axkr.
the class ExprParser method test.
public static boolean test(final String str) {
try {
ExprParser fParser = new ExprParser(EvalEngine.get());
final IExpr parsedExpression = fParser.parse(str);
// final IExpr parsedExpression = AST2Expr.CONST.convert(parsedAST);
if (parsedExpression != null) {
return true;
}
} catch (final SyntaxError e) {
}
return false;
}
use of org.matheclipse.parser.client.SyntaxError in project symja_android_library by axkr.
the class SymbolicSO43739728 method main.
public static void main(String[] args) {
try {
ExprEvaluator util = new ExprEvaluator();
// (3/4)*(4/3)*Sqrt(2)*I
IExpr formula = F.Times(F.QQ(3, 4), F.QQ(4, 3), F.Sqrt(F.ZZ(2)), F.CI);
// symbolic evaluation
IExpr result = util.evaluate(formula);
// print: I*Sqrt(2)
System.out.println(result.toString());
// numerical evaluations
result = util.evaluate(F.N(formula));
// I*1.4142135623730951
System.out.println(result.toString());
} catch (SyntaxError e) {
// catch Symja parser errors here
System.out.println(e.getMessage());
} catch (MathException me) {
// catch Symja math errors here
System.out.println(me.getMessage());
} catch (Exception e) {
e.printStackTrace();
} catch (final StackOverflowError soe) {
System.out.println(soe.getMessage());
} catch (final OutOfMemoryError oome) {
System.out.println(oome.getMessage());
}
}
use of org.matheclipse.parser.client.SyntaxError in project symja_android_library by axkr.
the class CalculusExample method main.
public static void main(String[] args) {
try {
// don't distinguish between lower- and uppercase identifiers
Config.PARSER_USE_LOWERCASE_SYMBOLS = true;
ExprEvaluator util = new ExprEvaluator(false, 100);
// Show an expression in the Java form:
// Note: single character identifiers are case sensistive
// (the "D()" function input must be written as upper case
// character)
String javaForm = util.toJavaForm("D(sin(x)*cos(x),x)");
// prints: D(Times(Sin(x),Cos(x)),x)
System.out.println(javaForm.toString());
// Use the Java form to create an expression with F.* static
// methods:
IAST function = D(Times(Sin(x), Cos(x)), x);
IExpr result = util.evaluate(function);
// print: Cos(x)^2-Sin(x)^2
System.out.println(result.toString());
// Note "diff" is an alias for the "D" function
result = util.evaluate("diff(sin(x)*cos(x),x)");
// print: Cos(x)^2-Sin(x)^2
System.out.println(result.toString());
// evaluate the last result ($ans contains "last answer")
result = util.evaluate("$ans+cos(x)^2");
// print: 2*Cos(x)^2-Sin(x)^2
System.out.println(result.toString());
// evaluate an Integrate[] expression
result = util.evaluate("integrate(sin(x)^5,x)");
// print: 2/3*Cos(x)^3-1/5*Cos(x)^5-Cos(x)
System.out.println(result.toString());
// set the value of a variable "a" to 10
// Note: in server mode the variable name must have a preceding '$'
// character
result = util.evaluate("a=10");
// print: 10
System.out.println(result.toString());
// do a calculation with variable "a"
result = util.evaluate("a*3+b");
// print: 30+b
System.out.println(result.toString());
// Do a calculation in "numeric mode" with the N() function
// Note: single character identifiers are case sensistive
// (the "N()" function input must be written as upper case
// character)
result = util.evaluate("N(sinh(5))");
// print: 74.20321057778875
System.out.println(result.toString());
// define a function with a recursive factorial function definition.
// Note: fac(0) is the stop condition.
result = util.evaluate("fac(x_IntegerQ):=x*fac(x-1);fac(0)=1");
// now calculate factorial of 10:
result = util.evaluate("fac(10)");
// print: 3628800
System.out.println(result.toString());
} catch (SyntaxError e) {
// catch Symja parser errors here
System.out.println(e.getMessage());
} catch (MathException me) {
// catch Symja math errors here
System.out.println(me.getMessage());
} catch (final Exception ex) {
System.out.println(ex.getMessage());
} catch (final StackOverflowError soe) {
System.out.println(soe.getMessage());
} catch (final OutOfMemoryError oome) {
System.out.println(oome.getMessage());
}
}
use of org.matheclipse.parser.client.SyntaxError in project symja_android_library by axkr.
the class Console method prettyPrinter3Lines.
private String[] prettyPrinter3Lines(final String inputExpression) {
IExpr result;
final StringWriter buf = new StringWriter();
try {
if (fSeconds <= 0) {
result = fEvaluator.evaluate(inputExpression);
} else {
result = fEvaluator.evaluateWithTimeout(inputExpression, fSeconds, TimeUnit.SECONDS, true);
}
if (result != null) {
if (result.equals(F.Null)) {
return null;
}
ASCIIPrettyPrinter3 strBuffer = new ASCIIPrettyPrinter3();
strBuffer.convert(result);
return strBuffer.toStringBuilder();
}
} catch (final SyntaxError se) {
String msg = se.getMessage();
System.err.println();
System.err.println(msg);
return null;
} catch (final RuntimeException re) {
Throwable me = re.getCause();
if (me instanceof MathException) {
Validate.printException(buf, me);
} else {
Validate.printException(buf, re);
}
return null;
} catch (final Exception e) {
Validate.printException(buf, e);
return null;
} catch (final OutOfMemoryError e) {
Validate.printException(buf, e);
return null;
} catch (final StackOverflowError e) {
Validate.printException(buf, e);
return null;
}
String[] strArray = new String[3];
strArray[0] = "";
strArray[1] = buf.toString();
strArray[3] = "";
return strArray;
}
Aggregations