#include "spice.h"
#include "ftedefs.h"
#include "ftecmath.h"
Go to the source code of this file.
|
#define | G 1 /* Greater than. */ |
|
#define | L 2 /* Less than. */ |
|
#define | E 3 /* Equal. */ |
|
#define | R 4 /* Error. */ |
|
#define | STACKSIZE 200 |
|
#define G 1 /* Greater than. */ |
#define L 2 /* Less than. */ |
static bool checkvalid |
( |
| ) |
|
|
static |
Definition at line 102 of file parse.c.
112 "Error: %s: no matching vectors.\n",
116 "Error: %s: no such vector.\n",
134 "checkvalid: Internal Error: bad node\n");
Definition at line 44 of file parse.c.
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) ==
'-')
static char buf[MAXPROMPT]
static struct pnode * parse()
void inp_pnfree |
( |
struct pnode * |
p | ) |
|
Definition at line 872 of file parse.c.
void inp_pnfree(struct pnode *p)
Definition at line 146 of file parse.c.
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++)
317 if (el.e_token !=
END)
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);
static struct pnode* makepnode |
( |
| ) |
|
|
static |
Definition at line 602 of file parse.c.
613 tfree(elem->e_string);
616 return (
mknnode(elem->e_double));
618 return (elem->e_pnode);
static struct pnode * mknnode()
static struct pnode * mksnode()
static struct pnode* mkbnode |
( |
| ) |
|
|
static |
static struct pnode* mkbnode |
( |
opnum |
, |
|
|
struct pnode * |
arg1, |
|
|
struct pnode * |
arg2 |
|
) |
| |
|
static |
Definition at line 703 of file parse.c.
714 fprintf(
cp_err,
"mkbnode: Internal Error: no such op num %d\n",
static struct pnode* mkfnode |
( |
| ) |
|
|
static |
static struct pnode* mkfnode |
( |
char * |
func, |
|
|
struct pnode * |
arg |
|
) |
| |
|
static |
Definition at line 758 of file parse.c.
769 for (s = buf; *s; s++)
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",
static char buf[MAXPROMPT]
struct pnode * ft_substdef()
static struct pnode * mksnode()
static struct pnode* mknnode |
( |
| ) |
|
|
static |
static struct pnode* mknnode |
( |
double |
number | ) |
|
|
static |
Definition at line 807 of file parse.c.
827 (void) sprintf(buf,
"%d", (
int) number);
829 (
void) sprintf(buf,
"%G", number);
static char buf[MAXPROMPT]
static struct pnode* mksnode |
( |
| ) |
|
|
static |
static struct pnode* mksnode |
( |
char * |
string | ) |
|
|
static |
static struct pnode* mkunode |
( |
| ) |
|
|
static |
static struct pnode* mkunode |
( |
opnum |
, |
|
|
struct pnode * |
arg |
|
) |
| |
|
static |
Definition at line 727 of file parse.c.
738 fprintf(
cp_err,
"mkunode: Internal Error: no such op num %d\n",
static struct pnode * parse |
( |
| ) |
|
|
static |
Definition at line 479 of file parse.c.
484 struct pnode *pn, *lpn, *rpn;
487 stack[0].e_token =
END;
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,
581 stack[sp].e_token =
VALUE;
582 stack[sp].e_type =
PNODE;
583 stack[sp].e_pnode = pn;
591 fprintf(
cp_err,
"Syntax error.\n");
static struct element * lexer()
static struct pnode * makepnode()
static struct pnode * mkbnode()
static char prectable[23][23]
void bcopy(char *from, char *to, int num)
static struct pnode * mkfnode()
static struct pnode * mkunode()
struct func func_not = { "not", cx_not } |
struct func func_uminus = { "minus", cx_uminus } |
Initial value:= {
}
struct dvec * op_divide()
Definition at line 628 of file parse.c.
Initial value:= {
{
R,
L,
L,
L,
L,
L,
L,
L,
L,
R,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L, L },
{
G,
G,
G,
L,
L,
L,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
L,
L,
L,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
G,
G,
G,
L,
L,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
G,
G,
G,
G,
G,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
R,
L,
L,
L,
L,
L,
L,
L,
L,
E,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L,
L, L },
{
G,
G,
G,
G,
G,
G,
G,
G,
R,
G,
G,
R,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, G },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G,
R,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, G },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L, L },
{
G,
L,
L,
L,
L,
L,
L,
L,
L,
G,
L,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
L, L },
{
G,
G,
G,
G,
G,
G,
G,
G,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, L },
{
G,
G,
G,
G,
G,
G,
G,
G,
L,
G,
G,
L,
G,
G,
G,
G,
G,
G,
G,
G,
G,
G, G }
}
Definition at line 448 of file parse.c.
Initial value:= {
}
struct dvec * op_uminus()
Definition at line 650 of file parse.c.