/*
* The Spar Library - modular math parser
* Copyright (C) 2000,2001 Davide Angelocola <davide178@inwind.it>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*
*/
/**
* @file sl_parser.h
* @brief Parser interface
*
* This file contains all definitions to deal with the parser, however is
* still incomplete.
*
* @todo Add a function that print the result to a string
*/
#ifndef _sl_parser_h_
#define _sl_parser_h_
#include <spar/sl_error.h>
#include <spar/sl_conf.h>
typedef enum
{
SL_FUNCTION_WITH_ONE_ARG = 1,
SL_FUNCTION_WITH_TWO_ARG,
SL_FUNCTION_WITH_VAR_ARG,
SL_FUNCTION_WITH_COUNTER
}
sl_function_args_t;
typedef enum
{
SL_FUNCTION_CLASS_TRIG,
SL_FUNCTION_CLASS_ITRIG,
SL_FUNCTION_CLASS_EXP,
SL_FUNCTION_CLASS_LOG,
SL_FUNCTION_CLASS_HYPER,
SL_FUNCTION_CLASS_SPECIAL,
SL_FUNCTION_CLASS_USER,
SL_FUNCTION_CLASS_COUNTER
}
sl_function_class_t;
typedef double (*sl_function_p) (double);
typedef double (*sl_function_tp) (double, double);
struct sl_function_s
{
sl_identifier (name);
sl_message (math);
sl_function_args_t args;
sl_function_class_t type;
sl_function_p func;
sl_function_tp func2;
};
typedef struct sl_function_s sl_function;
struct sl_function_help_s
{
sl_identifier (name);
sl_message (math);
sl_message (type);
sl_function_args_t args;
};
typedef struct sl_function_help_s sl_function_help;
/**
* Constant structure
*/
struct sl_constant_s
{
sl_identifier (name);
double value;
sl_message (msg);
};
typedef struct sl_constant_s sl_constant;
struct variable_s
{
sl_identifier (name); /* variable name */
sl_message (comment); /* comment */
double value; /* value */
double old_value; /* old_value */
struct variable_s *l;
struct variable_s *r;
};
typedef struct variable_s sl_variable;
__BEGIN_DECLS
/**
* @fn double sl_evaluate_to_double (const char *str)
* @brief Evaluate the string str
* @param str The string to evaluate
* @return Returns the string's value on success
*
* This function returns directly the string value and should be used
* is the most of cases. If there are any error, returns an intermediate
* result and prints an error message (@see parser_throw_error())
*/
double sl_parser_evaluate_to_double (const char *str);
/**
* @fn sl_error sl_parser_evaluate (const char *str)
* @brief Evaluate the string str
* @param str The string to evaluate
* @return Returns the value NO_ERROR on success, otherwise the error code
*
* Evaluate a string and returns the error code (@see sl_error)
* If there are any error, returns an intermediate
* result and prints an error message (@see sl_error_throw())
*/
sl_error sl_parser_evaluate (const char *str);
/**
* Gets the constant "name" and puts his value into "*value".
* Returns SL_SUCCESS on success, otherwise SL_ERROR.
*/
int sl_constant_get (const char *name, double *value);
/**
* Prints the constants table using the table sublibs.
*/
void sl_constant_print_all (void);
/**
* Sort the constants table to make possible a binary search.
* Returns SL_SUCCESS on success, otherwise SL_ERROR.
*/
int sl_constant_init (void);
/*
* Variable table
*/
void sl_variable_edit_comment (sl_variable * entry, const char *comment);
void sl_variable_edit_name (sl_variable * entry, const char *name);
void sl_variable_edit_value (sl_variable * entry, double value);
void sl_variable_old_value (sl_variable * entry);
int sl_variable_comment (const char name[], const char comment[]);
int sl_variable_init (void);
int sl_variable_remove_all (void);
int sl_variable_remove (const char name[]);
int sl_variable_old (const char name[]);
int sl_variable_get (const char name[], double *r);
int sl_variable_set (const char name[], double value);
void sl_variable_print_all (void);
/*
* Function table
*
*/
int sl_function_init (void);
double sl_function_run (const char *name, double argv[]);
sl_function_args_t sl_function_get_argc (int);
const char *sl_function_get_name (int code);
int sl_function_check (const char *name);
void sl_function_print_all (void);
int sl_function_make_help (const char *name, sl_function_help * tmp);
__END_DECLS
#endif /* _parser_h_ */
syntax highlighted by Code2HTML, v. 0.9.1