102 lines
1.9 KiB
C
Executable File
102 lines
1.9 KiB
C
Executable File
#ident "@(#)streval.h 1.6 93/06/08 SMI" /* From AT&T Toolchest */
|
|
|
|
/*
|
|
* G. S. Fowler
|
|
* D. G. Korn
|
|
* AT&T Bell Laboratories
|
|
*
|
|
* long integer arithmetic expression evaluator
|
|
*/
|
|
|
|
/* The following only is needed for const */
|
|
#include "sh_config.h"
|
|
|
|
struct lval
|
|
{
|
|
char *value;
|
|
int flag;
|
|
};
|
|
|
|
#ifdef FLOAT
|
|
typedef double number;
|
|
#else
|
|
typedef long number;
|
|
#endif /* FLOAT */
|
|
|
|
#define MAXPREC 15 /* maximum precision level */
|
|
#define SEQPOINT 0200 /* sequence point */
|
|
#define NOASSIGN 0100 /* assignment legal with this operator */
|
|
#define RASSOC 040 /* right associative */
|
|
#define NOFLOAT 020 /* illegal with floating point */
|
|
#define PRECMASK 017 /* precision bit mask */
|
|
|
|
#define DEFAULT 0
|
|
#define LPAREN 1
|
|
#define RPAREN 2
|
|
#define COMMA 3
|
|
#define ASSIGNMENT 4
|
|
#define MOD 5
|
|
#define LSHIFT 6
|
|
#define RSHIFT 7
|
|
#define PLUS 8
|
|
#define MINUS 9
|
|
#define DIVIDE 10
|
|
#define EQ 11
|
|
#define NEQ 12
|
|
#define LT 13
|
|
#define GT 14
|
|
#define LE 15
|
|
#define GE 16
|
|
#define AND 17
|
|
#define OR 18
|
|
#define XOR 19
|
|
#define ANDAND 20
|
|
#define OROR 21
|
|
#define DONE 22
|
|
#define NOT 23
|
|
#define QUEST 24
|
|
#define QCOLON 25
|
|
#define TIMES 26
|
|
#define ARROW 27
|
|
#define DOT 28
|
|
#define LBRACKET 29
|
|
#define RBRACKET 30
|
|
#define PLUSPLUS 31
|
|
#define MINUSMINUS 32
|
|
#define COLON 33
|
|
|
|
|
|
struct Optable
|
|
{
|
|
unsigned char opcode;
|
|
unsigned char precedence;
|
|
char name[2];
|
|
};
|
|
|
|
|
|
/* define error messages */
|
|
extern const char e_moretokens[];
|
|
extern const char e_paren[];
|
|
extern const char e_number[];
|
|
extern const char e_badcolon[];
|
|
extern const char e_recursive[];
|
|
extern const char e_divzero[];
|
|
extern const char e_synbad[];
|
|
extern const char e_notlvalue[];
|
|
#ifdef FLOAT
|
|
extern const char e_incompatible[];
|
|
#endif /* FLOAT */
|
|
|
|
/* function code for the convert function */
|
|
|
|
#define LOOKUP 0
|
|
#define ASSIGN 1
|
|
#define VALUE 2
|
|
#define ERRMSG 3
|
|
|
|
#ifdef PROTO
|
|
extern number streval(char*,char**,number(*)());
|
|
#else
|
|
extern number streval();
|
|
#endif /* PROTO */
|