* Input grammar definition for ginsh.
* This file must be processed with yacc/bison.
*
- * GiNaC Copyright (C) 1999 Johannes Gutenberg University Mainz, Germany
+ * GiNaC Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
%token T_NUMBER T_SYMBOL T_LITERAL T_DIGITS T_QUOTE T_QUOTE2 T_QUOTE3
%token T_EQUAL T_NOTEQ T_LESSEQ T_GREATEREQ T_MATRIX_BEGIN T_MATRIX_END
-%token T_QUIT T_PRINT T_TIME T_XYZZY T_INVENTORY T_LOOK T_SCORE
+%token T_QUIT T_PRINT T_READ T_WRITE T_TIME T_XYZZY T_INVENTORY T_LOOK T_SCORE
/* Operator precedence and associativity */
%right '='
* Built-in functions
*/
-static ex f_beta(const exprseq &e) {return gamma(e[0])*gamma(e[1])/gamma(e[0]+e[1]);}
static ex f_denom(const exprseq &e) {return e[0].denom();}
static ex f_eval1(const exprseq &e) {return e[0].eval();}
static ex f_evalf1(const exprseq &e) {return e[0].evalf();}
static ex f_nops(const exprseq &e) {return e[0].nops();}
static ex f_normal1(const exprseq &e) {return e[0].normal();}
static ex f_numer(const exprseq &e) {return e[0].numer();}
-static ex f_power(const exprseq &e) {return power(e[0], e[1]);}
+static ex f_pow(const exprseq &e) {return pow(e[0], e[1]);}
static ex f_sqrt(const exprseq &e) {return sqrt(e[0]);}
static ex f_subs2(const exprseq &e) {return e[0].subs(e[1]);}
static ex f_diag(const exprseq &e)
{
- int dim = e.nops();
+ unsigned dim = e.nops();
matrix &m = *new matrix(dim, dim);
- for (int i=0; i<dim; i++)
+ for (unsigned i=0; i<dim; i++)
m.set(i, i, e.op(i));
return m;
}
static ex f_has(const exprseq &e)
{
- return e[0].has(e[1]) ? exONE() : exZERO();
+ return e[0].has(e[1]) ? ex(1) : ex(0);
}
static ex f_inverse(const exprseq &e)
static ex f_is(const exprseq &e)
{
CHECK_ARG(0, relational, is);
- return (bool)ex_to_relational(e[0]) ? exONE() : exZERO();
+ return (bool)ex_to_relational(e[0]) ? ex(1) : ex(0);
}
static ex f_lcoeff(const exprseq &e)
{
CHECK_ARG(1, numeric, op);
int n = ex_to_numeric(e[1]).to_int();
- if (n < 0 || n >= e[0].nops())
+ if (n < 0 || n >= (int)e[0].nops())
throw(std::out_of_range("second argument to op() is out of range"));
return e[0].op(n);
}
static ex f_series2(const exprseq &e)
{
CHECK_ARG(1, symbol, series);
- return e[0].series(ex_to_symbol(e[1]), exZERO());
+ return e[0].series(ex_to_symbol(e[1]), ex(0));
}
static ex f_series3(const exprseq &e)
// Table for initializing the "fcns" map
struct fcn_init {
const char *name;
- const fcn_desc &desc;
+ const fcn_desc desc;
};
static const fcn_init builtin_fcns[] = {
- {"beta", fcn_desc(f_beta, 2)},
{"charpoly", fcn_desc(f_charpoly, 2)},
{"coeff", fcn_desc(f_coeff, 3)},
{"collect", fcn_desc(f_collect, 2)},
{"normal", fcn_desc(f_normal2, 2)},
{"numer", fcn_desc(f_numer, 1)},
{"op", fcn_desc(f_op, 2)},
- {"power", fcn_desc(f_power, 2)},
+ {"pow", fcn_desc(f_pow, 2)},
{"prem", fcn_desc(f_prem, 3)},
{"primpart", fcn_desc(f_primpart, 2)},
{"quo", fcn_desc(f_quo, 3)},
{"transpose", fcn_desc(f_transpose, 1)},
{"unassign", fcn_desc(f_unassign, 1)},
{"unit", fcn_desc(f_unit, 2)},
- {NULL, fcn_desc(f_unit, 0)} // End marker
+ {NULL, fcn_desc(f_dummy, 0)} // End marker
};
}
// All registered GiNaC functions
+#ifndef NO_GINAC_NAMESPACE
void GiNaC::ginsh_get_ginac_functions(void)
+#else // ndef NO_GINAC_NAMESPACE
+void ginsh_get_ginac_functions(void)
+#endif // ndef NO_GINAC_NAMESPACE
{
vector<registered_function_info>::const_iterator i = function::registered_functions().begin(), end = function::registered_functions().end();
unsigned serial = 0;
throw(std::logic_error("internal error: argument to lst2matrix() is not a list"));
// Find number of rows and columns
- int rows = l.nops(), cols = 0, i, j;
+ unsigned rows = l.nops(), cols = 0, i, j;
for (i=0; i<rows; i++)
if (l.op(i).nops() > cols)
cols = l.op(i).nops();
if (l.op(i).nops() > j)
m.set(i, j, l.op(i).op(j));
else
- m.set(i, j, exZERO());
+ m.set(i, j, ex(0));
return m;
}
// For shell commands, revert back to filename completion
rl_completion_append_character = orig_completion_append_character;
rl_basic_word_break_characters = orig_basic_word_break_characters;
- return completion_matches(text, filename_completion_function);
+ return completion_matches(text, (CPFunction *)filename_completion_function);
} else {
// Otherwise, complete function names
rl_completion_append_character = '(';
rl_basic_word_break_characters = " \t\n\"#$%&'()*+,-./:;<=>?@[\\]^`{|}~";
- return completion_matches(text, fcn_generator);
+ return completion_matches(text, (CPFunction *)fcn_generator);
}
}
// Print banner in interactive mode
if (isatty(0)) {
cout << "ginsh - GiNaC Interactive Shell (" << PACKAGE << " " << VERSION << ")\n";
- cout << "Copyright (C) 1999 Johannes Gutenberg Universitaet Mainz, Germany\n";
- cout << "This is free software, and you are welcome to redistribute it\n";
- cout << "under certain conditions; see the file COPYING for details.\n";
+ cout << "Copyright (C) 1999-2000 Johannes Gutenberg University Mainz, Germany\n";
+ cout << "This is free software with ABSOLUTELY NO WARRANTY. You are welcome to\n";
+ cout << "redistribute it under certain conditions; see the file COPYING for details.\n";
cout << "Type ?? for a list of help topics.\n";
}
insert_fcn_help("atan", "inverse tangent function");
insert_fcn_help("atan2", "inverse tangent function with two arguments");
insert_fcn_help("atanh", "inverse hyperbolic tangent function");
+ insert_fcn_help("beta", "beta function");
+ insert_fcn_help("binomial", "binomial function");
insert_fcn_help("cos", "cosine function");
insert_fcn_help("cosh", "hyperbolic cosine function");
+ insert_fcn_help("exp", "exponential function");
+ insert_fcn_help("factorial", "factorial function");
+ insert_fcn_help("gamma", "gamma function");
+ insert_fcn_help("log", "natural logarithm");
+ insert_fcn_help("psi", "psi function\npsi(x) is the digamma function, psi(n,x) the nth polygamma function");
insert_fcn_help("sin", "sine function");
insert_fcn_help("sinh", "hyperbolic sine function");
insert_fcn_help("tan", "tangent function");
insert_fcn_help("tanh", "hyperbolic tangent function");
- insert_fcn_help("exp", "exponential function");
- insert_fcn_help("log", "natural logarithm");
+ insert_fcn_help("zeta", "zeta function\nzeta(x) is Riemann's zeta function, zeta(n,x) its nth derivative");
insert_fcn_help("Li2", "dilogarithm");
insert_fcn_help("Li3", "trilogarithm");
- insert_fcn_help("binomial", "binomial function");
- insert_fcn_help("factorial", "factorial function");
- insert_fcn_help("gamma", "gamma function");
insert_fcn_help("Order", "order term function (for truncated power series)");
// Init readline completer