patches R. Larice
This commit is contained in:
parent
486ae1b66e
commit
288e0b7214
|
|
@ -1,3 +1,7 @@
|
|||
2010-03-08 Holger Vogt
|
||||
* parse.c, inpptree.c, inpptree-parser.y, inpptree-parser.c, inpptree-parser.h:
|
||||
patches by R. Larice
|
||||
|
||||
2010-03-07 Holger Vogt
|
||||
* inpcom.c: test for .end improved (comments are now allowed in .end line)
|
||||
* xpressn.c: adding fcn sgn() to numparam function lib
|
||||
|
|
|
|||
|
|
@ -52,21 +52,23 @@ ft_getpnames(wordlist *wl, bool check)
|
|||
thisone = sbuf;
|
||||
while (*sbuf != '\0') {
|
||||
if (!(p = parse())) {
|
||||
tfree(xsbuf);
|
||||
return (NULL);
|
||||
}
|
||||
tfree(xsbuf);
|
||||
return (NULL);
|
||||
}
|
||||
|
||||
/* Now snag the name... Much trouble... */
|
||||
while (isspace(*thisone))
|
||||
thisone++;
|
||||
for (s = buf; thisone < sbuf; s++, thisone++)
|
||||
*s = *thisone;
|
||||
*s = '\0';
|
||||
while(--s>=buf && isspace(*s))
|
||||
;
|
||||
s[1] = '\0';
|
||||
p->pn_name = copy(buf);
|
||||
|
||||
if (pn) {
|
||||
lpn->pn_next = p;
|
||||
pn->pn_next->pn_use++;
|
||||
p->pn_use++;
|
||||
lpn = p;
|
||||
} else
|
||||
pn = lpn = p;
|
||||
|
|
|
|||
|
|
@ -80,6 +80,7 @@
|
|||
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "inpptree-parser.h"
|
||||
|
||||
extern int PTlex (YYSTYPE *lvalp, char **line);
|
||||
|
|
@ -91,10 +92,11 @@
|
|||
# define __func__ __FUNCTION__ /* __func__ is C99, but MSC can't */
|
||||
#endif
|
||||
|
||||
#define U(x) (void)x
|
||||
|
||||
|
||||
/* Line 189 of yacc.c */
|
||||
#line 98 "inpptree-parser.c"
|
||||
#line 100 "inpptree-parser.c"
|
||||
|
||||
/* Enabling traces. */
|
||||
#ifndef YYDEBUG
|
||||
|
|
@ -142,7 +144,7 @@ typedef union YYSTYPE
|
|||
{
|
||||
|
||||
/* Line 222 of yacc.c */
|
||||
#line 30 "inpptree-parser.y"
|
||||
#line 32 "inpptree-parser.y"
|
||||
|
||||
double num;
|
||||
const char *str;
|
||||
|
|
@ -151,7 +153,7 @@ typedef union YYSTYPE
|
|||
|
||||
|
||||
/* Line 222 of yacc.c */
|
||||
#line 155 "inpptree-parser.c"
|
||||
#line 157 "inpptree-parser.c"
|
||||
} YYSTYPE;
|
||||
# define YYSTYPE_IS_TRIVIAL 1
|
||||
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
|
||||
|
|
@ -163,7 +165,7 @@ typedef union YYSTYPE
|
|||
|
||||
|
||||
/* Line 264 of yacc.c */
|
||||
#line 167 "inpptree-parser.c"
|
||||
#line 169 "inpptree-parser.c"
|
||||
|
||||
#ifdef short
|
||||
# undef short
|
||||
|
|
@ -455,9 +457,9 @@ static const yytype_int8 yyrhs[] =
|
|||
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
|
||||
static const yytype_uint8 yyrline[] =
|
||||
{
|
||||
0, 58, 58, 62, 63, 65, 66, 67, 68, 69,
|
||||
71, 73, 75, 77, 82, 83, 84, 85, 86, 87,
|
||||
89, 93, 97, 102, 103
|
||||
0, 60, 60, 64, 65, 67, 68, 69, 70, 71,
|
||||
73, 75, 77, 79, 84, 85, 86, 87, 88, 89,
|
||||
91, 95, 99, 104, 105
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
@ -1418,84 +1420,84 @@ yyreduce:
|
|||
case 2:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 58 "inpptree-parser.y"
|
||||
#line 60 "inpptree-parser.y"
|
||||
{ *retval = (yyvsp[(1) - (1)].pnode); ;}
|
||||
break;
|
||||
|
||||
case 3:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 62 "inpptree-parser.y"
|
||||
#line 64 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mknnode((yyvsp[(1) - (1)].num)); ;}
|
||||
break;
|
||||
|
||||
case 4:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 63 "inpptree-parser.y"
|
||||
#line 65 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mksnode((yyvsp[(1) - (1)].str), ckt); ;}
|
||||
break;
|
||||
|
||||
case 5:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 65 "inpptree-parser.y"
|
||||
#line 67 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkbnode("+", (yyvsp[(1) - (3)].pnode), (yyvsp[(3) - (3)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 6:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 66 "inpptree-parser.y"
|
||||
#line 68 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkbnode("-", (yyvsp[(1) - (3)].pnode), (yyvsp[(3) - (3)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 7:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 67 "inpptree-parser.y"
|
||||
#line 69 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkbnode("*", (yyvsp[(1) - (3)].pnode), (yyvsp[(3) - (3)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 8:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 68 "inpptree-parser.y"
|
||||
#line 70 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkbnode("/", (yyvsp[(1) - (3)].pnode), (yyvsp[(3) - (3)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 9:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 69 "inpptree-parser.y"
|
||||
#line 71 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkbnode("^", (yyvsp[(1) - (3)].pnode), (yyvsp[(3) - (3)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 10:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 71 "inpptree-parser.y"
|
||||
#line 73 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = (yyvsp[(2) - (3)].pnode); ;}
|
||||
break;
|
||||
|
||||
case 11:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 73 "inpptree-parser.y"
|
||||
#line 75 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("-",(yyvsp[(2) - (2)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 12:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 75 "inpptree-parser.y"
|
||||
#line 77 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode((yyvsp[(1) - (4)].str), (yyvsp[(3) - (4)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 13:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 77 "inpptree-parser.y"
|
||||
#line 79 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("ternary_fcn",
|
||||
mkbnode(",",
|
||||
mkbnode(",", (yyvsp[(1) - (5)].pnode), (yyvsp[(3) - (5)].pnode)),
|
||||
|
|
@ -1505,49 +1507,49 @@ yyreduce:
|
|||
case 14:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 82 "inpptree-parser.y"
|
||||
#line 84 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("eq0", mkbnode("-",(yyvsp[(1) - (3)].pnode),(yyvsp[(3) - (3)].pnode))); ;}
|
||||
break;
|
||||
|
||||
case 15:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 83 "inpptree-parser.y"
|
||||
#line 85 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("ne0", mkbnode("-",(yyvsp[(1) - (3)].pnode),(yyvsp[(3) - (3)].pnode))); ;}
|
||||
break;
|
||||
|
||||
case 16:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 84 "inpptree-parser.y"
|
||||
#line 86 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("gt0", mkbnode("-",(yyvsp[(1) - (3)].pnode),(yyvsp[(3) - (3)].pnode))); ;}
|
||||
break;
|
||||
|
||||
case 17:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 85 "inpptree-parser.y"
|
||||
#line 87 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("lt0", mkbnode("-",(yyvsp[(1) - (3)].pnode),(yyvsp[(3) - (3)].pnode))); ;}
|
||||
break;
|
||||
|
||||
case 18:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 86 "inpptree-parser.y"
|
||||
#line 88 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("ge0", mkbnode("-",(yyvsp[(1) - (3)].pnode),(yyvsp[(3) - (3)].pnode))); ;}
|
||||
break;
|
||||
|
||||
case 19:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 87 "inpptree-parser.y"
|
||||
#line 89 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("le0", mkbnode("-",(yyvsp[(1) - (3)].pnode),(yyvsp[(3) - (3)].pnode))); ;}
|
||||
break;
|
||||
|
||||
case 20:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 89 "inpptree-parser.y"
|
||||
#line 91 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("ne0",
|
||||
mkbnode("+",
|
||||
mkfnode("ne0", (yyvsp[(1) - (3)].pnode)),
|
||||
|
|
@ -1557,7 +1559,7 @@ yyreduce:
|
|||
case 21:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 93 "inpptree-parser.y"
|
||||
#line 95 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("eq0",
|
||||
mkbnode("+",
|
||||
mkfnode("eq0", (yyvsp[(1) - (3)].pnode)),
|
||||
|
|
@ -1567,21 +1569,21 @@ yyreduce:
|
|||
case 22:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 97 "inpptree-parser.y"
|
||||
#line 99 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkfnode("eq0", (yyvsp[(2) - (2)].pnode)); ;}
|
||||
break;
|
||||
|
||||
case 24:
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 103 "inpptree-parser.y"
|
||||
#line 105 "inpptree-parser.y"
|
||||
{ (yyval.pnode) = mkbnode(",", (yyvsp[(1) - (3)].pnode), (yyvsp[(3) - (3)].pnode)); ;}
|
||||
break;
|
||||
|
||||
|
||||
|
||||
/* Line 1455 of yacc.c */
|
||||
#line 1585 "inpptree-parser.c"
|
||||
#line 1587 "inpptree-parser.c"
|
||||
default: break;
|
||||
}
|
||||
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
|
||||
|
|
@ -1793,7 +1795,7 @@ yyreturn:
|
|||
|
||||
|
||||
/* Line 1675 of yacc.c */
|
||||
#line 105 "inpptree-parser.y"
|
||||
#line 107 "inpptree-parser.y"
|
||||
|
||||
|
||||
|
||||
|
|
@ -1801,6 +1803,7 @@ yyreturn:
|
|||
static void
|
||||
PTerror (char **line, struct INPparseNode **retval, void *ckt, char const *s)
|
||||
{
|
||||
U(line); U(retval); U(ckt);
|
||||
fprintf (stderr, "%s: %s\n", __func__, s);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ typedef union YYSTYPE
|
|||
{
|
||||
|
||||
/* Line 1740 of yacc.c */
|
||||
#line 30 "inpptree-parser.y"
|
||||
#line 32 "inpptree-parser.y"
|
||||
|
||||
double num;
|
||||
const char *str;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
%{
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include "inpptree-parser.h"
|
||||
|
||||
extern int PTlex (YYSTYPE *lvalp, char **line);
|
||||
|
|
@ -12,6 +13,7 @@
|
|||
# define __func__ __FUNCTION__ /* __func__ is C99, but MSC can't */
|
||||
#endif
|
||||
|
||||
#define U(x) (void)x
|
||||
%}
|
||||
|
||||
%name-prefix="PT"
|
||||
|
|
@ -109,5 +111,6 @@ nonempty_arglist:
|
|||
static void
|
||||
PTerror (char **line, struct INPparseNode **retval, void *ckt, char const *s)
|
||||
{
|
||||
U(line); U(retval); U(ckt);
|
||||
fprintf (stderr, "%s: %s\n", __func__, s);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ static struct op {
|
|||
PT_POWER, "^", PTpower}
|
||||
};
|
||||
|
||||
#define NUM_OPS (sizeof (ops) / sizeof (struct op))
|
||||
#define NUM_OPS (int)(sizeof (ops) / sizeof (struct op))
|
||||
|
||||
static struct func {
|
||||
char *name;
|
||||
|
|
@ -93,7 +93,7 @@ static struct func {
|
|||
{ "le0", PTF_LE0, PTle0},
|
||||
} ;
|
||||
|
||||
#define NUM_FUNCS (sizeof (funcs) / sizeof (struct func))
|
||||
#define NUM_FUNCS (int)(sizeof (funcs) / sizeof (struct func))
|
||||
|
||||
/* These are all the constants any sane person needs. */
|
||||
|
||||
|
|
@ -106,7 +106,7 @@ static struct constant {
|
|||
"pi", M_PI}
|
||||
};
|
||||
|
||||
#define NUM_CONSTANTS (sizeof (constants) / sizeof (struct constant))
|
||||
#define NUM_CONSTANTS (int)(sizeof (constants) / sizeof (struct constant))
|
||||
|
||||
/* Parse the expression in *line as far as possible, and return the parse
|
||||
* tree obtained. If there is an error, *pt will be set to NULL and an error
|
||||
|
|
@ -754,7 +754,7 @@ static INPparseNode *mkfnode(const char *fname, INPparseNode * arg)
|
|||
int i;
|
||||
INPparseNode *p;
|
||||
char buf[128], *name, *s;
|
||||
IFvalue temp;
|
||||
IFnode temp;
|
||||
|
||||
/* Make sure the case is ok. */
|
||||
(void) strcpy(buf, fname);
|
||||
|
|
@ -780,10 +780,10 @@ static INPparseNode *mkfnode(const char *fname, INPparseNode * arg)
|
|||
p = mkb(PT_MINUS, mkfnode(fname, arg->left),
|
||||
mkfnode(fname, arg->right));
|
||||
} else {
|
||||
INPtermInsert(circuit, &name, tables, &(temp.nValue));
|
||||
INPtermInsert(circuit, &name, tables, &temp);
|
||||
for (i = 0; i < numvalues; i++)
|
||||
if ((types[i] == IF_NODE) && (values[i].nValue ==
|
||||
temp.nValue)) break;
|
||||
if ((types[i] == IF_NODE) && (values[i].nValue == temp))
|
||||
break;
|
||||
if (i == numvalues) {
|
||||
if (numvalues) {
|
||||
values = (IFvalue *)
|
||||
|
|
@ -796,7 +796,7 @@ static INPparseNode *mkfnode(const char *fname, INPparseNode * arg)
|
|||
values = (IFvalue *) MALLOC(sizeof(IFvalue));
|
||||
types = (int *) MALLOC(sizeof(int));
|
||||
}
|
||||
values[i] = temp;
|
||||
values[i].nValue = temp;
|
||||
types[i] = IF_NODE;
|
||||
numvalues++;
|
||||
}
|
||||
|
|
@ -815,8 +815,8 @@ static INPparseNode *mkfnode(const char *fname, INPparseNode * arg)
|
|||
}
|
||||
INPinsert(&name, tables);
|
||||
for (i = 0; i < numvalues; i++)
|
||||
if ((types[i] == IF_INSTANCE) && (values[i].uValue ==
|
||||
temp.uValue)) break;
|
||||
if ((types[i] == IF_INSTANCE) && (values[i].uValue == name))
|
||||
break;
|
||||
if (i == numvalues) {
|
||||
if (numvalues) {
|
||||
values = (IFvalue *)
|
||||
|
|
|
|||
Loading…
Reference in New Issue