4 * (C) 1989 Saeko Hirabauashi & Kouichi Hirabayashi
6 * Absolutely no warranty. Use this software with your own risk.
8 * Permission to use, copy, modify and distribute this software for any
9 * purpose and without fee is hereby granted, provided that the above
10 * copyright and disclaimer notice.
12 * This program was written to fit into 64K+64K memory of the Minix 1.2.
15 /* lexical/parser tokens and executable statements */
48 #define ADD 300 /* + */
49 #define ADDEQ 301 /* += */
50 #define AND 302 /* && */
51 #define BEGIN 303 /* BEGIN */
52 #define BINAND 304 /* & */
53 #define BINOR 305 /* | */
54 #define BREAK 306 /* break */
55 #define CLOSE 307 /* close */
56 #define CONTIN 308 /* continue */
57 #define DEC 309 /* -- */
58 #define DIV 310 /* / */
59 #define DIVEQ 311 /* /= */
60 #define ELSE 312 /* else */
61 #define END 313 /* END */
62 #define EOL 314 /* ; or '\n' */
63 #define EQ 315 /* == */
64 #define EXIT 316 /* exit */
65 #define FUNC 317 /* function */
66 #define GE 318 /* >= */
67 #define GT 319 /* > */
68 #define IDENT 320 /* identifier */
69 #define INC 321 /* ++ */
70 #define LE 322 /* <= */
71 #define LT 323 /* < */
72 #define MATCH 324 /* ~ */
73 #define MOD 325 /* % */
74 #define MODEQ 326 /* %= */
75 #define MULT 327 /* * */
76 #define MULTEQ 328 /* *= */
77 #define NE 329 /* != */
78 #define NEXT 330 /* next */
79 #define NOMATCH 331 /* !~ */
80 #define NOT 332 /* ! */
81 #define NUMBER 333 /* integer or floating number */
82 #define OR 334 /* || */
83 #define POWEQ 335 /* ^= */
84 #define POWER 336 /* ^ */
85 #define PRINTF 337 /* printf */
86 #define REGEXP 338 /* /REG/ */
87 #define RETURN 339 /* return */
88 #define SHIFTL 340 /* << */
89 #define SHIFTR 341 /* >> */
90 #define SPRINT 342 /* sprint */
91 #define SPRINTF 343 /* sprintf */
92 #define STRING 344 /* ".." */
93 #define SUB 345 /* - */
94 #define SUBEQ 346 /* -= */
95 #define SYSTEM 347 /* system */
96 #define UMINUS 348 /* - */
98 /* tokens in parser */
100 #define VALUE 400 /* value node */
101 #define INCDEC 401 /* ++, -- */
102 #define PRE 402 /* pre incre/decre */
103 #define POST 403 /* post incre/decre */
105 /* redirect in print(f) statement */
107 #define R_OUT 410 /* > */
108 #define R_APD 411 /* >> */
109 #define R_PIPE 412 /* | */
110 #define R_IN 413 /* < */
111 #define R_PIN 414 /* | getline */
112 #define R_POUT 415 /* print | */
116 #define ATAN2 500 /* atan2 */
117 #define COS 501 /* cos */
118 #define EXP 502 /* exp */
119 #define INDEX 503 /* index */
120 #define INT 504 /* int */
121 #define LENGTH 505 /* length */
122 #define LOG 506 /* log */
123 #define RAND 507 /* rand */
124 #define RGSUB 508 /* gsub */
125 #define RMATCH 509 /* match */
126 #define RSUB 510 /* sub */
127 #define SIN 511 /* sin */
128 #define SPLIT 512 /* split */
129 #define SQRT 513 /* sqrt */
130 #define SRAND 514 /* srand */
131 #define SUBSTR 515 /* substr */
133 /* print(f) options */
135 #define FORMAT 1024 /* PRINTF, SPRINTF */
136 #define STROUT 2048 /* SPRINTF */
137 #define PRMASK 0x3ff /* ~(FORMAT|STROUT) */
139 /* node - used in parsed tree */
142 int n_type
; /* node type */
143 struct node
*n_next
; /* pointer to next node */
144 struct node
*n_arg
[1]; /* argument (variable length) */
147 typedef struct node NODE
;
152 int c_type
; /* cell type */
153 char *c_sval
; /* string value */
154 double c_fval
; /* floating value */
157 typedef struct cell CELL
;
161 #define UDF 0 /* pass parameter */
162 #define VAR 1 /* variable */
163 #define NUM 2 /* number */
164 #define ARR 4 /* array */
165 #define STR 8 /* string */
166 #define REC 16 /* record */
167 #define FLD 32 /* filed */
168 #define PAT 64 /* pattern (compiled REGEXPR) */
169 #define BRK 128 /* break */
170 #define CNT 256 /* continue */
171 #define NXT 512 /* next */
172 #define EXT 1024 /* exit */
173 #define RTN 2048 /* return */
174 #define TMP 4096 /* temp cell */
175 #define POS 8192 /* argument position */
176 #define FUN 16384 /* function */
178 /* symbol cell - linked to symbol table */
183 struct symbol
*s_next
;
186 typedef struct symbol SYMBOL
;