recognize expressions

This commit is contained in:
ceriel
1990-09-07 14:56:24 +00:00
parent 2c9fbebe4e
commit 24920dfa75
15 changed files with 527 additions and 84 deletions

View File

@@ -44,6 +44,12 @@ mknode(va_alist)
case OP_INTEGER:
p->t_ival = va_arg(ap, long);
break;
case OP_STRING:
p->t_sval = va_arg(ap, char *);
break;
case OP_REAL:
p->t_fval = va_arg(ap, double);
break;
case OP_AT:
p->t_lino = va_arg(ap, long);
p->t_filename = va_arg(ap, char *);
@@ -74,23 +80,10 @@ freenode(p)
register int na, i;
if (! p) return;
switch(p->t_oper) {
case OP_NAME:
case OP_INTEGER:
case OP_AT:
case OP_CONT:
case OP_NEXT:
case OP_STEP:
case OP_REGS:
case OP_DELETE:
break;
default:
na = nargs(p->t_oper);
assert(na <= MAXARGS);
for (i = 0; i < na; i++) {
freenode(p->t_args[i]);
}
break;
na = nargs(p->t_oper);
assert(na <= MAXARGS);
for (i = 0; i < na; i++) {
freenode(p->t_args[i]);
}
free_tree(p);
}
@@ -219,6 +212,12 @@ print_node(p, top_level)
case OP_INTEGER:
fprintf(db_out, "%d", p->t_ival);
break;
case OP_STRING:
fprintf(db_out, "%s", p->t_sval);
break;
case OP_REAL:
fprintf(db_out, "%.14g", p->t_fval);
break;
}
if (top_level) fputs("\n", db_out);
}
@@ -548,7 +547,7 @@ do_print(p)
break;
case OP_NAME:
case OP_SELECT:
sym = identify(p, VAR|REGVAR|LOCVAR|VARPAR);
sym = identify(p, VAR|REGVAR|LOCVAR|VARPAR|CONST);
if (! sym) return;
print_node(p, 0);
if (! print_sym(sym)) {