File:  [LON-CAPA] / capa / capa51 / pProj / capaParser.h
Revision 1.13: download - view: text, annotated - select for diffs
Tue Feb 15 22:15:05 2005 UTC (19 years, 2 months ago) by albertel
Branches: MAIN
CVS tags: version_2_1_X, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, HEAD
- BUG#3952, the instructor's unit was being parsed by the stupid, but fast unit parser, swapping it out so that the instructor's parser is the same as the one used to parse the students's answer

/* definitions of all parser constants/structs
   Copyright (C) 1992-2000 Michigan State University

   The CAPA system is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of the
   License, or (at your option) any later version.

   The CAPA system 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
   General Public License for more details.

   You should have received a copy of the GNU General Public
   License along with the CAPA system; see the file COPYING.  If not,
   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
   Boston, MA 02111-1307, USA.

   As a special exception, you have permission to link this program
   with the TtH/TtM library and distribute executables, as long as you
   follow the requirements of the GNU GPL in regard to all of the
   software in the executable aside from TtH/TtM.
*/

/* <==================================================================> */
/*  by Isaac Tsai @ 1994                                                */

#ifndef _CAPA_PARSER_H_
#define _CAPA_PARSER_H_

#include  <stdio.h>    /* for FILE *  */
#ifdef DMALLOC
#include <dmalloc.h>
#endif
#ifdef __STDC__   /* sun ansi cc compiler use this flag */
#define  CAPA_ARG(x)  x
#else
#define  CAPA_ARG(x)  ()
#endif

#define  CAPA_ERROR(xx)   {             }
#define  CAPA_WARNING(xx) {             }
#define  MESSAGE_WARN 1
#define  MESSAGE_ERROR 2


#ifdef   SYMBOL_DBUG
#define  SSDBUG_PR1(xx)        { printf(xx);       fflush(stdout); }
#define  SSDBUG_PR2(xx,yy)     { printf(xx,yy);    fflush(stdout); }
#define  SSDBUG_PR3(xx,yy,zz)  { printf(xx,yy,zz); fflush(stdout); }
#else
#define  SSDBUG_PR1(xx)        { }
#define  SSDBUG_PR2(xx,yy)     { }
#define  SSDBUG_PR3(xx,yy,zz)  { }

#endif



/* Some useful numbers */

/*#define  EIGHT                8*/
/*#define  SIXTEEN             16*/
/*#define  THIRTY_TWO          32*/
/*#define  SIXTY_FOUR          64*/
#define  ONE_TWO_EIGHT      128
#define  QUARTER_K          256
#define  HALF_K             512
#define  ONE_K             1024
#define  TWO_K             2048
#define  FOUR_K            4096



#define    ANSWER_STRING_LENG       81
#define  MAX_OPENED_FILE   4096    /* maximum number of files opened */
#define  MAX_SYMB_COUNT    4096    /* symbol table size    */
#define  MAX_FUNC_NAME      256    /* function name length */
#define  MAX_FUNC_NEST     1024    /* sin(cos(tan(...)))   */
/*#define  MAX_QTEXT_LEN     4096     overall question text in a set *NO LONGER NEEDED */
#define  WARN_MSG_LENGTH   1024    /* for warning messages */


#define  ASCII_MODE           1
#define  TeX_MODE             2
#define  HTML_MODE            3
#define  BUBBLE_MODE          4

#define  ANSWER_STRING_MODE   5   /* used in answers_string() */


/* parameters used in array_sorted_index() */

#define  ASCEND_SORT          1
#define  DESCEND_SORT         2
#define  NUMERICAL_SORT       3



typedef struct _symbol {
  char              *s_name;           /* IDENTIFIER or FUNCTION_ID  or ARRAY_ID name */
  int                s_type;
  int                s_array_cnt;
  int                s_argc;
  struct _argNode   *s_argp;
  struct _treeNode  *s_treep;
  struct _symbol    *s_nextp;
  struct _symbol    *s_prevp;
  struct _symbol    *s_arrayp;
  struct _pts_list  *s_ptslist;
  int                s_access_cnt;
  int                s_distype;
  char              *s_format;
  union {  char      *s_sval;
           long       s_ival;
           double     s_rval;
        } s_val;
} Symbol;

typedef Symbol *Symbol_p;

#define s_int   s_val.s_ival
#define s_real  s_val.s_rval
#define s_str   s_val.s_sval

#define  E_FORMAT             1
#define  F_FORMAT             3
#define  DEFAULT_FORMAT       9

typedef struct _argNode {
    Symbol          *a_sp;
    int              a_idx; 
    struct _argNode *a_next;
    struct _argNode *a_prev;
 } ArgNode_t;
 
#define   FIRST_SYMBOLP(aaa)      (aaa->a_sp)
#define   SECOND_SYMBOLP(aaa)   ( (aaa->a_next)->a_sp )
#define   THIRD_SYMBOLP(aaa)    ( ((aaa->a_next)->a_next)->a_sp )
#define   FOURTH_SYMBOLP(aaa)   ( (((aaa->a_next)->a_next)->a_next)->a_sp )
#define   FIFTH_SYMBOLP(aaa)    ( ((((aaa->a_next)->a_next)->a_next)->a_next)->a_sp )
#define   SIXTH_SYMBOLP(aaa)    ( (((((aaa->a_next)->a_next)->a_next)->a_next)->a_next)->a_sp )
#define   FIRST_ARGNAME(aaa)    ( FIRST_SYMBOLP(aaa)->s_name )
#define   FIRST_ARGTYPE(aaa)    ( FIRST_SYMBOLP(aaa)->s_type )
#define   FIRST_ARGINT(aaa)     ( FIRST_SYMBOLP(aaa)->s_int )
#define   FIRST_ARGREAL(aaa)    ( FIRST_SYMBOLP(aaa)->s_real )
#define   FIRST_ARGSTR(aaa)     ( FIRST_SYMBOLP(aaa)->s_str )
#define   SECOND_ARGNAME(aaa)   ( SECOND_SYMBOLP(aaa)->s_name )
#define   SECOND_ARGTYPE(aaa)   ( SECOND_SYMBOLP(aaa)->s_type)
#define   SECOND_ARGINT(aaa)    ( SECOND_SYMBOLP(aaa)->s_int)
#define   SECOND_ARGREAL(aaa)   ( SECOND_SYMBOLP(aaa)->s_real)
#define   SECOND_ARGSTR(aaa)    ( SECOND_SYMBOLP(aaa)->s_str)
#define   THIRD_ARGNAME(aaa)    ( THIRD_SYMBOLP(aaa)->s_name )
#define   THIRD_ARGTYPE(aaa)    ( THIRD_SYMBOLP(aaa)->s_type)
#define   THIRD_ARGINT(aaa)     ( THIRD_SYMBOLP(aaa)->s_int)
#define   THIRD_ARGREAL(aaa)    ( THIRD_SYMBOLP(aaa)->s_real)
#define   THIRD_ARGSTR(aaa)     ( THIRD_SYMBOLP(aaa)->s_str)
#define   FOURTH_ARGTYPE(aaa)   ( FOURTH_SYMBOLP(aaa)->s_type)
#define   FOURTH_ARGNAME(aaa)   ( FOURTH_SYMBOLP(aaa)->s_name )
#define   FOURTH_ARGINT(aaa)    ( FOURTH_SYMBOLP(aaa)->s_int)
#define   FOURTH_ARGREAL(aaa)   ( FOURTH_SYMBOLP(aaa)->s_real)
#define   FOURTH_ARGSTR(aaa)    ( FOURTH_SYMBOLP(aaa)->s_str)
#define   FIFTH_ARGTYPE(aaa)    ( FIFTH_SYMBOLP(aaa)->s_type)
#define   FIFTH_ARGNAME(aaa)    ( FIFTH_SYMBOLP(aaa)->s_name )
#define   FIFTH_ARGINT(aaa)     ( FIFTH_SYMBOLP(aaa)->s_int)
#define   FIFTH_ARGREAL(aaa)    ( FIFTH_SYMBOLP(aaa)->s_real)
#define   FIFTH_ARGSTR(aaa)     ( FIFTH_SYMBOLP(aaa)->s_str)
#define   SIXTH_ARGTYPE(aaa)    ( SIXTH_SYMBOLP(aaa)->s_type)
#define   SIXTH_ARGNAME(aaa)    ( SIXTH_SYMBOLP(aaa)->s_name )
#define   SIXTH_ARGINT(aaa)     ( SIXTH_SYMBOLP(aaa)->s_int)
#define   SIXTH_ARGREAL(aaa)    ( SIXTH_SYMBOLP(aaa)->s_real)
#define   SIXTH_ARGSTR(aaa)     ( SIXTH_SYMBOLP(aaa)->s_str)




typedef struct _treeNode {
    Symbol           *t_sp;
    int               t_idx;
    struct _treeNode *t_left;
    struct _treeNode *t_right;
 } TreeNode_t;

typedef struct _expNode {
    int              e_type;
    struct _expNode *e_parentp;
    struct _expNode *e_lsibp;
    struct _expNode *e_rsibp;
    Symbol          *e_sp;
 } ExpNode;
 
typedef ExpNode  *ExpNode_p;

/* ================================================================ */
/*   While loop data structure */

typedef struct _WhileLoop {
    int             input_idx; /* stores Input_idx */
    int             line_idx;  /* stores Current_line[Input_idx] */
    long int        pos_idx;   /* stores next line position in the input stream */
 } WhileLoop_t;


/* ================================================================ */
/*    Warning message data structure */

typedef  struct  _WarnMsg {
    int              warn_type;
    char            *warn_str;
    struct _WarnMsg *warn_next;
  } WarnMsg_t;






/* ================================================================ */

#define    SYMBOL_MAXLEN     16      /* unit symbol name length */
#define    NAME_MAXLEN       48      /* unit name length */
#define    BASEUNIT_LIMIT    32      /* maximum number of base units */
#define    ONE_K_SIZE        1024 

/* ================================================================ */

typedef  struct  _unit_elem {
  struct  _unit_elem  *ue_nextp;
  char    ue_symbol[SYMBOL_MAXLEN];
  int     ue_index;   /* -1 means this is composite */
#define          UE_COMPOSITE     -1
  double  ue_scale;
  double  ue_exp;
} Unit_E;

typedef struct  _unit_t {
  char       u_symbol[SYMBOL_MAXLEN];
  char       u_name[NAME_MAXLEN];
  char      *u_comment;
  int        u_index;
  struct _unit_t  *u_left;
  struct _unit_t  *u_right;
  int        u_type;
#define          U_BASE            1
#define          U_DERIVED         2
#define          U_PREFIX          3
#define          U_CONSTANT        4
#define          U_OP_POWER        5
#define          U_OP_TIMES        6
#define          U_OP_PLUS         7
#define          U_OP_MINUS        8
#define          U_OP_DIVIDE       9
#define          U_UNKNOWN         10
#define          U_DEFAULT         11
  double     u_scale;
  double     u_offset;
  int        u_count;
  Unit_E    *u_list;
}  Unit_t;

#define   U_LEFT(x)   ((x)->u_left)
#define   U_RIGHT(x)  ((x)->u_right)
#define   U_SYMB(x)   ((x)->u_symbol)
#define   U_NAME(x)   ((x)->u_name)
#define   U_COUNT(x)  ((x)->u_count)
#define   U_TYPE(x)   ((x)->u_type)
#define   U_SCALE(x)  ((x)->u_scale)

/* ==================================================================== */
/* Answer    tolerance    sig     string   */
/*  int        abs/rel                     */
/*  real       abs/rel    [l,u]            */
/*  string                         cs/ci   */
/*                                 mc      */

typedef struct _problem {
   char               *question;    /* Question text                   */
   char               *answer;      /* Answer string                   */
   char               *hint;        /* Hint text                       */
   char               *explain;     /* Explain text                    */
   char               *capaidplus;  /* Quizzes extra unique identifier 
                                       Only set in the first problem   */
   int                 ans_cnt;     
   int                 weight;
   int                 tol_type;
   double              tolerance;
   int                 ans_type;    /* Type of answer expecting        */
   int                 sig_ubound;
   int                 sig_lbound;
   int                 partial_cdt;
   
   int                 calc;         /* calculate correct answers based on 
                                       formated/unformated exact answer */
   int                 tries;       /* Number of tries allowed         */
   int                 show_hint;
   int                 show_explain;
   int                 show_br;      /* web only, <BR> on is by default */
   int                 show_ans_box; /* web only, answer box is shown by default */
   int                 verbatim; /* do verbatim protection around answers */
   int                 ans_op;   /* ANS_AND or ANS_OR */
   char               *id_list;
   struct   _pts_list *pts_list;
   char                ans_fmt[ANSWER_STRING_LENG];
   char                unit_str[ANSWER_STRING_LENG];
   Unit_t              *ans_unit;
   struct _answer_info *ans_list;
   struct _answer_info *ans_list_last;
   struct _problem     *next;        /* Pointer to next problem         */
} Problem_t;

#define   P_TOLTYPE(p)  ((p)->tol_type)


typedef struct _pts_list {
   char     *pts_str;
   int       pts_idx;
   struct   _pts_list *pts_next;
} PointsList_t;



/* Answer related data structure */
/* 
   char     *ans_str
   int       ans_type
   int       ans_calc
   int       ans_tol_type
   double    ans_tol
   int       ans_sig_ub
   int       ans_sig_lb
   char     *ans_id_list;
   struct   _pts_list *ans_pts_list;
   char      ans_fmt
   char      ans_unit_str
   
*/
/* 
    some information in the answer specification should be 
    problem-wise, such as problem weight, problem tries
    
*/

typedef struct _answer_info {
   char     *ans_str;           /* correct answer in string form */
   int       ans_type;          /* answer type */
   int       ans_calc;
   int       ans_tol_type;      /* answer tolerence type */
   double    ans_tol;           /* the tolerence itself */
   int       ans_sig_ub;
   int       ans_sig_lb;
   char     *ans_id_list;
   struct   _pts_list *ans_pts_list;
   char      ans_fmt[ANSWER_STRING_LENG];
   char      ans_unit_str[ANSWER_STRING_LENG];
   Unit_t   *ans_unit;
   struct   _answer_info *ans_next;
} AnswerInfo_t;



/******************************************************************************/
/* STRUCTURE FOR A PROBLEM                                                    */
/******************************************************************************/

#define    SPEC_TOLERANCE       1
#define    SPEC_SIG             2
#define    SPEC_WEIGHT          4
#define    SPEC_TYPE            8
#define    SPEC_PCREDIT         16
#define    SPEC_TRY             32
#define    SPEC_UNIT            64

/* ---------------------------- tol_type -------------------------- */
#define    TOL_ABSOLUTE         1
#define    TOL_PERCENTAGE       2

/* ------------------------------------------ */
#define    CALC_UNFORMATED      1
#define    CALC_FORMATED        2

#define    CALC_DEFAULT         CALC_UNFORMATED  /* for answer calculation */

/* ----------------------------------------  web option only */
#define    DO_SHOW              1
#define    DONOT_SHOW           0

#define    DO_VERBATIM          1
#define    DONOT_VERBATIM       0

#define    SHOW_BR_DEFAULT      DO_SHOW
#define    VERBATIM_DEFAULT     DO_VERBATIM
#define    SHOW_ANSBOX_DEFAULT  DO_SHOW

#define    SIG_LB_DEFAULT       0        /* ---- sig_lbound ------- */
#define    SIG_UB_DEFAULT       15       /* ---- sig_ubound ------- */
#define    PCREDIT_DEFAULT      0        /* ---- partial_cdt ------ */
#define    TOL_DEFAULT          (0.0)    /* ---- tolerance  ------- */
#define    WEIGHT_DEFAULT       1        /* ---- weight     ------- */
#define    NO_LIMIT_TRY         (0)      /* ---- tries      ------- */
#define    MAX_TRIES            99       /* ---- tries ------------ */
#define    SHOW_HINT_DEFAULT    1        /* show hints immediately */

/* ---------------------------  ans_type -------------------------- */
#define    ANSWER_IS_INTEGER       1
#define    ANSWER_IS_FLOAT         2
#define    ANSWER_IS_STRING_CI     3
#define    ANSWER_IS_STRING_CS     4
#define    ANSWER_IS_CHOICE        5
#define    ANSWER_IS_ARITH         6
#define    ANSWER_IS_SUBJECTIVE    7
#define    ANSWER_IS_FORMULA       8
#define    ANSWER_IS_EXTERNAL      9

#define    YAK                     1
#define    NAY                     0

/* -------- results given by capa_check_answer() and capa_check_answers() */

#define    EXACT_ANS           1
#define    APPROX_ANS          2 
#define    SIG_FAIL            3
#define    UNIT_FAIL           4
#define    NO_UNIT             5
#define    UNIT_OK             6
#define    INCORRECT           7
#define    UNIT_NOTNEEDED      8
#define    ANS_CNT_NOT_MATCH   9
#define    SUB_RECORDED        10
#define    BAD_FORMULA         11
#define    WANTED_NUMERIC      12
#define    UNIT_INVALID_INSTRUCTOR  13
#define    UNIT_INVALID_STUDENT1    141
#define    UNIT_INVALID_STUDENT2    142
#define    UNIT_INVALID_STUDENT3    143
#define    UNIT_IRRECONCIBLE        15

/* =============================================================== */

#define    T_SPACE           9
#define    T_PREFIX          8
#define    T_NUMBER          7
#define    T_BASIC_UNIT      6
#define    T_DERIVED_UNIT    5
#define    T_LP              4
#define    T_RP              3
#define    T_MULTIPLY        2
#define    T_POWER           1
#define    T_END             0

/* for IFstatus[] */

#define    IF_FALSE          0
#define    IF_TRUE           1
#define    IF_DONT_CARE      2

/* for IFcurrent[] */
#define    RUN_IF_PORTION    1
#define    RUN_ELSE_PORTION  2

/* ================================================================ */
/********************** for random(), /MAP(), capa_PIN() */
/* BETA_DIS is used for genbet() */
/* CHI_DIS  is for genchi() */
/* EXPONENTIAL_DIS    genexp() */
/* GAMMA_DIS    gengam() */
/* MULTI_NORM_DIS    genmn() */
/* NONCEN_CHI_DIS    gennch() */
/* NORMAL_DIS        gennor() */
/* POISSON_DIS       long ignpoi(float mu) */

#define    RANDOM_G            1L
#define    PERMUTATION_G       2L
#define    PIN_G               3L

#define    NORMAL_DIS          10 
#define    POISSON_DIS         11
#define    EXPONENTIAL_DIS     12 
#define    BETA_DIS            13
#define    GAMMA_DIS           14
#define    CHI_DIS             15
#define    NONCENTRAL_CHI_DIS  16
#define    FORMULA_PICK_POINTS 17
#define    MULTIVARIATE_NORMAL_DIS  18

#define    GET_GENERATOR        0L
#define    SET_GENERATOR        1L

#define    FORWARD_MAP           0
#define    REVERSE_MAP           1



/* ---------------------------------------------- capaLexerDef.flex */ 
void        begin_if_skip      CAPA_ARG(());
void        begin_while_skip   CAPA_ARG(());
void        begin_next_line    CAPA_ARG(());
void        begin_var          CAPA_ARG(());
void        begin_let          CAPA_ARG(());
void        begin_def          CAPA_ARG(()); 
void        begin_ans          CAPA_ARG(());     
void        begin_map          CAPA_ARG(()); 
void        begin_ignore       CAPA_ARG(());    
void        begin_text         CAPA_ARG(());    
void        begin_question     CAPA_ARG(());
void        end_problemset     CAPA_ARG(());
int         match_keyword      CAPA_ARG((char *key));
int         match_functionid   CAPA_ARG((char *key));    
void        init_funcstack     CAPA_ARG(()); 

#ifdef DMALLOC
#define strsave(s) strcpy(capa_malloc(strlen(s)+1,1),s)
#define capa_malloc(num,sz) memset(calloc(num,sz),'\0',num*sz)
#define capa_mfree(p) free(p);
#else
char       *strsave             CAPA_ARG((char *s));          
char       *capa_malloc         CAPA_ARG((unsigned int num, unsigned int sz));
void        capa_mfree          CAPA_ARG((char *p));
#endif
void        capa_msg            CAPA_ARG((int type, char *p));
void        capa_warn_header    CAPA_ARG(()); 
void        parse_filename      CAPA_ARG((char *line));
void        parse_import_id     CAPA_ARG((char *line));
char       *parse_endinput      CAPA_ARG((char *line));
void        append_dynamic_buf  CAPA_ARG((char *new_str));
char*       parser_status       CAPA_ARG((void));
/*------------------------------------------------- capaGrammarDef.y */

ExpNode_p   mk_node             CAPA_ARG((int op, ExpNode_p left, ExpNode_p right));
ExpNode_p   mk_leaf             CAPA_ARG((int type, Symbol_p valp));
void        append_text         CAPA_ARG((char *str));
void        append_hint         CAPA_ARG((char *str));
void        append_explain      CAPA_ARG((char *str));
void        append_error        CAPA_ARG((char *str));
void        append_warn         CAPA_ARG((int type, char *str));
Symbol     *symbols_op          CAPA_ARG((Symbol *a, Symbol *b, int op));
char       *format_toTeX        CAPA_ARG((char *real));
char       *format_toHTML       CAPA_ARG((char *real));
void        init_answerinfo     CAPA_ARG(());
void        display_var         CAPA_ARG((Symbol *s));
void        assign_answer       CAPA_ARG((Symbol *s));
void        assign_tolerance    CAPA_ARG((int tol_type, Symbol *s));
void        assign_weight       CAPA_ARG((Symbol *s));
void        assign_try_limits   CAPA_ARG((Symbol *s));
void        assign_hint         CAPA_ARG((Symbol *s));
void        assign_units        CAPA_ARG((Symbol *s));
void        assign_sigs         CAPA_ARG((int lb, int ub));
void        assign_id_list      CAPA_ARG((Symbol *s));
void        init_new_prob       CAPA_ARG(());
void        add_answer_cnt      CAPA_ARG((int op));
void        finish_answer_info  CAPA_ARG(());
void        start_question_over CAPA_ARG(());

Symbol*     get_array_symbol    CAPA_ARG((Symbol* name,Symbol* index,int free_symbols));
Symbol*     build_array_list    CAPA_ARG((Symbol* ar_name,int num_elem)); 
/*---------------------------------------------------- capaParserUtils.c */ 
Symbol*     negate              CAPA_ARG((Symbol* symb));
void        problem_default     CAPA_ARG((Problem_t  *p));
int         comp_name           CAPA_ARG((char *a,char *b));
int         comp_namesymbol     CAPA_ARG((char *a, Symbol *b));
int         itis_empty          CAPA_ARG((TreeNode_t *root_p));
void        print_symb_stat     CAPA_ARG(());
int         preorder_tree       CAPA_ARG((TreeNode_t *node_p));
int         inorder_tree        CAPA_ARG((TreeNode_t *node_p));
int         postorder_tree      CAPA_ARG((TreeNode_t *node_p));
int         destroy_tree        CAPA_ARG((TreeNode_t *node_p));
int         free_symtree        CAPA_ARG(());
char       *btree_search        CAPA_ARG((char *key,TreeNode_t  **root_pp,int  (*compar)()));
Symbol     *find_identifier     CAPA_ARG((register char *name));  

ArgNode_t  *new_arglist         CAPA_ARG((Symbol *sp));
ArgNode_t  *addto_arglist       CAPA_ARG((ArgNode_t *argp, Symbol *sp));
void        walk_arglist        CAPA_ARG((ArgNode_t *argp));
void        free_arglist        CAPA_ARG((ArgNode_t *argp));
int         purge_tree          CAPA_ARG((TreeNode_t  **root_pp));
int         calc_sig            CAPA_ARG((char *a_num ));
int         endian              CAPA_ARG(());
TreeNode_t *new_treenode        CAPA_ARG((char *name_p, int type));
TreeNode_t *new_formulanode     CAPA_ARG((char *name_p, double val));

TreeNode_t *t_splay             CAPA_ARG((char *name, TreeNode_t *t));
void        print_array_element CAPA_ARG((Symbol *array_p));
Symbol     *find_arrayid        CAPA_ARG((char *name_p));
Symbol     *find_array_by_index CAPA_ARG((Symbol *array_p,char *idx_p));
int         free_array          CAPA_ARG((char *name_p));
Symbol     *array_min_max       CAPA_ARG((char *name_p,int min));
Symbol     *array_moments       CAPA_ARG((char *result_p,char *name_p));
Symbol     *gen_multivariate_normal  CAPA_ARG((char *output_p,char *seed,int
item_cnt,int dimen,char *m_vec_str,char *c_vec_str));
Symbol     *gen_random_by_selector  CAPA_ARG((char *output_p,int sel,char *seed,int item_cnt,float p1,float p2));
int         setup_formula_id    CAPA_ARG((char *v_str, char *pt_str));
void        free_formula_tree   CAPA_ARG(());

Symbol     *find_formula_id     CAPA_ARG((char *name_p));
int         f_eval_formula      CAPA_ARG((double *f_val,char *f_str,char *v_str, char *pt_str));

int         f_u_parse_formula   CAPA_ARG((char *f_str));
int         f_str_to_numbers    CAPA_ARG((double **f_ar, char *n_str));
int         f_str_to_ids        CAPA_ARG((char ***v_ar, char *n_str));

PointsList_t *f_gen_pts         CAPA_ARG((char *ap, char *bp, int n));
PointsList_t *gen_ptslist_str   CAPA_ARG((char *range_str ));
char   *eval_formula_range_str  CAPA_ARG((char *f_str,char *var_list,char *range_str));

PointsList_t *gen_ptslist       CAPA_ARG((Symbol *ap,Symbol *bp,Symbol *np));
PointsList_t *new_ptslist       CAPA_ARG((Symbol *sp ));
void          free_ptslist      CAPA_ARG((PointsList_t *pts_p)) ;
/* ====================================== capaUnit.c */

void        c_ignorewhite       CAPA_ARG((FILE *f));
double      c_getdouble         CAPA_ARG((FILE *f));
int         c_getint            CAPA_ARG((FILE *f));
int         c_getsec_range      CAPA_ARG((FILE *f,int *low,int *high));
char       *c_getword           CAPA_ARG((FILE *f));
char       *c_getstring         CAPA_ARG((FILE *f));
char       *c_getcomment        CAPA_ARG((FILE *f));
int         c_gettype           CAPA_ARG((FILE *f));

Unit_t     *u_find_symb         CAPA_ARG((char *name, Unit_t *t, int *result));
void        u_find_name         CAPA_ARG((Unit_t *t));
void        print_matches       CAPA_ARG((Unit_t *t));
double      u_squared_diff      CAPA_ARG((Unit_t *a, Unit_t *b));
double      u_sq_diff           CAPA_ARG((Unit_t *b));

void        print_unit_tree     CAPA_ARG(());
int         alphaorder_utree    CAPA_ARG((Unit_t *node_p));
int         inorder_diff        CAPA_ARG((Unit_t *node_p));
int         inorder_utree       CAPA_ARG((Unit_t *node_p));
int         postorder_utree     CAPA_ARG((Unit_t *node_p));
int         postwalk_utree      CAPA_ARG((Unit_t *n_p));
void        process_op          CAPA_ARG((int op));
Unit_t*     process_utree       CAPA_ARG((Unit_t *t));
int         check_correct_unit  CAPA_ARG((char *u_symb,Unit_t *t,double *scale));
int         free_utree          CAPA_ARG((Unit_t *t));
int         u_postfree          CAPA_ARG((Unit_t *t));
void        print_unit_t        CAPA_ARG((Unit_t *t));
void        u_copy_unit         CAPA_ARG((Unit_t *a_p,Unit_t *b_p,double exp_scale));
int         u_pm_op             CAPA_ARG((Unit_t *a_p, Unit_t *b_p, int op));

int         u_parsepower        CAPA_ARG((char *unit_str));
double      s_scan_number       CAPA_ARG((char *buf, int idx, int *r_idx));
double      s_scan_symbol       CAPA_ARG((char *buf,char *symb_p,int idx,int *r_idx));
int         s_process_symb      CAPA_ARG((char *symb_str, Unit_t  *cu_p,double exp));
Unit_t     *u_parse_unit        CAPA_ARG((char *unit_str));
int         comp_unit_symb      CAPA_ARG((char *a,char *b));
Unit_t     *u_splay             CAPA_ARG((char *name, Unit_t *t));
int         u_insert_baseunit   CAPA_ARG((char *n_p,char *s_p,char *c_p));
int         u_insert_derived    CAPA_ARG((char *n_p,char *s_p,char *c_p,char *u_p));
void        u_getunit           CAPA_ARG((FILE *f));
void        simplify_unit       CAPA_ARG((Unit_t *u_p));
void        freelist_unit_e     CAPA_ARG((Unit_E *ue_p));
int         is_units_equal      CAPA_ARG((Unit_t *u1_p, Unit_t *u2_p));
double      units_ratio         CAPA_ARG((Unit_t *u1_p, Unit_t *u2_p));
Unit_t     *p_new_op            CAPA_ARG((Unit_t *left_p, int op, Unit_t *right_p));
Unit_t     *p_new_num           CAPA_ARG((Unit_t *left_p, double num, Unit_t *right_p));
Unit_t     *p_new_unit          CAPA_ARG((Unit_t *left_p, Unit_t *right_p));
int         s_getnext           CAPA_ARG(());
int         s_peeknext          CAPA_ARG(());
double      scan_FLOAT          CAPA_ARG(());
Unit_t     *scan_num_item       CAPA_ARG(());
Unit_t     *scan_unit_item      CAPA_ARG(());
Unit_t     *scan_basic_term     CAPA_ARG(());
Unit_t     *scan_num_term       CAPA_ARG(());
Unit_t     *scan_basic_block    CAPA_ARG(());
Unit_t     *scan_num_block      CAPA_ARG(());
Unit_t     *scan_unit_expr      CAPA_ARG(());
Unit_t     *scan_num_expr       CAPA_ARG(());
Unit_t     *parse_unit_expr     CAPA_ARG((char *symb_str));
void        print_remains       CAPA_ARG(());
/* =================================================  capaMapExpr.c */

int         do_map             CAPA_ARG((char *seed,ArgNode_t *varp,ArgNode_t *argp,int argc, int dir));

/* ===============================================  capaFormulaLexer.c -- */
double      f_get_float         CAPA_ARG(());
char       *f_get_id            CAPA_ARG(());
int         f_peek_next_token   CAPA_ARG(());
int         fml_lex             CAPA_ARG(());

/* ===============================================  capaFormula.y      == */
int         fml_parse           CAPA_ARG(()); 
Symbol     *f_symbol_pow        CAPA_ARG((Symbol *ap, Symbol *bp));
/* ====================================================================== */

#ifdef  __sun
#define index(xx,cc)  strchr(xx,cc)
#define rindex(xx,cc) strrchr(xx,cc)
#endif

#endif  /* _CAPA_PARSER_H_ */


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>