54 fprintf(
cp_err,
"Warning: NULL arithmetic expression\n");
61 while (*
sbuf !=
'\0') {
63 fprintf(
cp_err,
"%s\n",xsbuf);
69 while (isspace(*thisone))
71 for (s = buf; thisone <
sbuf; s++, thisone++)
74 while (isspace(*s) && s != buf);
78 if (*s ==
'-' && *(s+1) ==
'-')
108 if ((pn->pn_value->v_length == 0) &&
109 !
eq(pn->pn_value->v_name,
"list")) {
110 if (
eq(pn->pn_value->v_name,
"all"))
112 "Error: %s: no matching vectors.\n",
113 pn->pn_value->v_name);
116 "Error: %s: no such vector.\n",
117 pn->pn_value->v_name);
121 else if (pn->pn_func ||
122 (pn->pn_op && (pn->pn_op->op_arity == 1))) {
126 else if (pn->pn_op && (pn->pn_op->op_arity == 2)) {
134 "checkvalid: Internal Error: bad node\n");
152 static char *specials =
" \t%()-^+*,/|&<>~=";
153 static bool bracflag =
false;
163 while ((*
sbuf ==
' ') || (*
sbuf ==
'\t'))
171 if (*(
sbuf+1) ==
'-') {
220 if (
sbuf[1] ==
'[') {
263 for (j = 1; isspace(
sbuf[j]); j++)
265 if (((
sbuf[j] ==
'<') || (
sbuf[j] ==
'>')) &&
271 else if (
sbuf[1] ==
'=') {
310 for (s = el.e_string; *s && (*s !=
'"'); s++,
sbuf++)
332 fprintf(stderr,
"lexer: double %G\n",
337 if ((
sbuf[0] ==
'g') && (
sbuf[1] ==
't') &&
338 strchr(specials,
sbuf[2])) {
342 else if ((
sbuf[0] ==
'l') && (
sbuf[1] ==
't') &&
343 strchr(specials,
sbuf[2])) {
347 else if ((
sbuf[0] ==
'g') && (
sbuf[1] ==
'e') &&
348 strchr(specials,
sbuf[2])) {
352 else if ((
sbuf[0] ==
'l') && (
sbuf[1] ==
'e') &&
353 strchr(specials,
sbuf[2])) {
357 else if ((
sbuf[0] ==
'n') && (
sbuf[1] ==
'e') &&
358 strchr(specials,
sbuf[2])) {
362 else if ((
sbuf[0] ==
'e') && (
sbuf[1] ==
'q') &&
363 strchr(specials,
sbuf[2])) {
367 else if ((
sbuf[0] ==
'o') && (
sbuf[1] ==
'r') &&
368 strchr(specials,
sbuf[2])) {
372 else if ((
sbuf[0] ==
'a') && (
sbuf[1] ==
'n') &&
373 (
sbuf[2] ==
'd') && strchr(specials,
sbuf[3])) {
377 else if ((
sbuf[0] ==
'n') && (
sbuf[1] ==
'o') &&
378 (
sbuf[2] ==
't') && strchr(specials,
sbuf[3])) {
396 for (s = el.e_string; *s && *s !=
')'; s++,
sbuf++) ;
409 for (s = el.e_string;
410 *s && !strchr(specials, *s) && *s !=
']'; s++,
sbuf++)
412 if ((*s ==
'[') && (*el.e_string !=
'@'))
426 fprintf(stderr,
"lexer: string %s\n",
434 fprintf(stderr,
"lexer: token %d\n", el.
e_token);
446 #define STACKSIZE 200 450 {
R,
L,
L,
L,
L,
L,
L,
L,
L,
R,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L, L },
451 {
G,
G,
G,
L,
L,
L,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
452 {
G,
G,
G,
L,
L,
L,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
453 {
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
454 {
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
455 {
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
456 {
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
457 {
G,
G,
G,
G,
G,
G,
G,
G,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
458 {
R,
L,
L,
L,
L,
L,
L,
L,
L,
E,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L, L },
459 {
G,
G,
G,
G,
G,
G,
G,
G,
R,
G,
G,
R,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, G },
460 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
461 {
G,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G,
R,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, G },
462 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
463 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
464 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
465 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
466 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
467 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
468 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
G,
L,
L, L },
469 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L, L },
470 {
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
471 {
G,
G,
G,
G,
G,
G,
G,
G,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, L },
472 {
G,
G,
G,
G,
G,
G,
G,
G,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, G }
478 static struct pnode *
481 struct element stack[STACKSIZE];
484 struct pnode *pn, *lpn, *rpn;
501 if (sp == (STACKSIZE - 1)) {
502 fprintf(
cp_err,
"Error: stack overflow\n");
505 bcopy((
char *) next, (
char *) &stack[++sp],
511 fprintf(
cp_err,
"Syntax error.\n");
521 if (stack[sp].e_token ==
VALUE)
524 if (stack[sp - 1].e_token ==
VALUE)
529 [stack[sp].e_token] ==
L)
534 if (stack[sp - 1].e_token ==
VALUE)
549 else if (((stack[sp].e_token ==
UMINUS) ||
550 (stack[sp].e_token ==
NOT)) &&
555 pn =
mkunode(stack[sp].e_token, lpn);
557 else if ((stack[sp].e_token ==
LPAREN) &&
558 (stack[st].e_token ==
RPAREN)) {
563 else if ((stack[sp + 1].e_token ==
LPAREN) &&
564 (stack[st].e_token ==
RPAREN)) {
566 if ((lpn ==
NULL) || (stack[sp].e_type !=
571 tfree(stack[sp].e_string);
578 pn =
mkbnode(stack[sp + 1].e_token,
583 stack[sp].e_pnode = pn;
591 fprintf(
cp_err,
"Syntax error.\n");
601 static struct pnode *
608 if (elem->e_token !=
VALUE)
610 switch (elem->e_type) {
613 tfree(elem->e_string);
616 return (
mknnode(elem->e_double));
618 return (elem->e_pnode);
702 static struct pnode *
705 struct
pnode *arg1, *arg2;
710 for (o = &ops[0]; o->
op_name; o++)
714 fprintf(
cp_err,
"mkbnode: Internal Error: no such op num %d\n",
726 static struct pnode *
734 for (o = uops; o->
op_name; o++)
738 fprintf(
cp_err,
"mkunode: Internal Error: no such op num %d\n",
757 static struct pnode *
769 for (s = buf; *s; s++)
772 for (f = &ft_funcs[0]; f->
fu_name; f++)
787 fprintf(
cp_err,
"Error: no such function as %s.\n",func);
793 fprintf(
cp_err,
"Error: no function as %s with that arity.\n",
806 static struct pnode *
827 (void) sprintf(buf,
"%d", (
int) number);
829 (
void) sprintf(buf,
"%G", number);
843 static struct pnode *
876 if (p->pn_name)
txfree(p->pn_name);
static char buf[MAXPROMPT]
static struct element * lexer()
static struct pnode * makepnode()
struct pnode * ft_substdef()
static struct pnode * mkbnode()
struct pnode * ft_getpnames(wordlist *wl, bool check)
static struct pnode * parse()
static struct pnode * mknnode()
static char prectable[23][23]
void inp_pnfree(struct pnode *p)
void bcopy(char *from, char *to, int num)
static struct pnode * mkfnode()
static struct pnode * mkunode()
struct dvec * op_uminus()
static struct pnode * mksnode()
struct dvec * op_divide()