Annotation of capa/capa51/pProj/capaFormulaParser.c, revision 1.1.1.1

1.1       albertel    1: #ifndef lint
                      2: static char yysccsid[] = "@(#)yaccpar	1.9 (Berkeley) 02/21/93";
                      3: #endif
                      4: #define YYBYACC 1
                      5: #define YYMAJOR 1
                      6: #define YYMINOR 9
                      7: #define yyclearin (yychar=(-1))
                      8: #define yyerrok (yyerrflag=0)
                      9: #define YYRECOVERING (yyerrflag!=0)
                     10: #define yyparse fml_parse
                     11: #define yylex fml_lex
                     12: #define yyerror fml_error
                     13: #define yychar fml_char
                     14: #define yyval fml_val
                     15: #define yylval fml_lval
                     16: #define yydebug fml_debug
                     17: #define yynerrs fml_nerrs
                     18: #define yyerrflag fml_errflag
                     19: #define yyss fml_ss
                     20: #define yyssp fml_ssp
                     21: #define yyvs fml_vs
                     22: #define yyvsp fml_vsp
                     23: #define yylhs fml_lhs
                     24: #define yylen fml_len
                     25: #define yydefred fml_defred
                     26: #define yydgoto fml_dgoto
                     27: #define yysindex fml_sindex
                     28: #define yyrindex fml_rindex
                     29: #define yygindex fml_gindex
                     30: #define yytable fml_table
                     31: #define yycheck fml_check
                     32: #define yyname fml_name
                     33: #define yyrule fml_rule
                     34: #define YYPREFIX "fml_"
                     35: #line 8 "capaFormula.y"
                     36: #include <stdio.h>
                     37: #include <ctype.h>
                     38: #include <string.h>
                     39: #include <math.h>
                     40: #include "capaParser.h"   /* _symbol structure def */
                     41: #include "capaCommon.h"
                     42: #include "capaFunction.h"
                     43: #include "capaToken.h"
                     44: 
                     45: #ifdef __hpux
                     46: #include <stdlib.h>
                     47: #include <alloca.h>
                     48: #endif
                     49: 
                     50: #ifdef   FML_DBUG
                     51: #define  FMLDBUG_PR1(xx)        { printf(xx);    fflush(stdout); }
                     52: #define  FMLDBUG_PR2(xx,yy)     { printf(xx,yy); fflush(stdout); }
                     53: #define  FMLDBUG_PR3(xx,yy,zz)  { printf(xx,yy,zz); fflush(stdout); }
                     54: #else
                     55: #define  FMLDBUG_PR1(xx)        { }
                     56: #define  FMLDBUG_PR2(xx,yy)     { }
                     57: #define  FMLDBUG_PR3(xx,yy,zz)  { }
                     58: #endif
                     59: 
                     60: #define ADD_op          1
                     61: #define SUB_op          2
                     62: #define MUL_op          3
                     63: #define DIV_op          4
                     64: #define IDIV_op         5
                     65: #define NOT_DEFINED_op  9
                     66: 
                     67: #ifdef  YYSTYPE
                     68: #undef  YYSTYPE
                     69: #endif
                     70: #define YYSTYPE  Symbol_p
                     71: 
                     72: /* =============================================================== */
                     73: 
                     74: extern      int         Func_idx;
                     75: extern      Symbol      FuncStack[MAX_FUNC_NEST];
                     76: 
                     77: double      FormulaVal;
                     78: int         FormulaParseOK=1;
                     79: 
                     80: #line 81 "fma.tab.c"
                     81: #define F_NUMBER 257
                     82: #define V_ID 258
                     83: #define F_ID 259
                     84: #define EoI 260
                     85: #define F_ERROR 261
                     86: #define F_PLUS 262
                     87: #define F_MINUS 263
                     88: #define F_MULT 264
                     89: #define F_DIV 265
                     90: #define F_MOD 266
                     91: #define F_POW 267
                     92: #define F_LPAR 268
                     93: #define F_RPAR 269
                     94: #define F_COMMA 270
                     95: #define YYERRCODE 256
                     96: short fml_lhs[] = {                                        -1,
                     97:     0,    1,    1,    1,    1,    1,    2,    2,    2,    2,
                     98:     3,    3,    5,    5,    4,    4,    4,    4,    4,    4,
                     99:     4,
                    100: };
                    101: short fml_len[] = {                                         2,
                    102:     1,    3,    3,    1,    1,    1,    3,    3,    3,    1,
                    103:     3,    1,    3,    1,    3,    4,    1,    2,    2,    1,
                    104:     3,
                    105: };
                    106: short fml_defred[] = {                                      0,
                    107:     6,   20,   17,    0,    5,    0,    0,    0,    0,    0,
                    108:     0,    0,   12,    0,   19,   18,    0,    0,    0,    0,
                    109:     0,    0,    0,   15,    0,    0,   21,    0,    0,    0,
                    110:     0,    0,   11,   16,    0,    0,
                    111: };
                    112: short fml_dgoto[] = {                                       9,
                    113:    10,   11,   12,   13,   26,
                    114: };
                    115: short fml_sindex[] = {                                   -227,
                    116:     0,    0,    0, -266,    0, -219, -219, -227,    0, -241,
                    117:  -218, -262,    0, -245,    0,    0, -254, -219, -219, -219,
                    118:  -219, -219, -219,    0, -241, -244,    0, -218, -218, -262,
                    119:  -262, -262,    0,    0, -227, -241,
                    120: };
                    121: short fml_rindex[] = {                                      0,
                    122:     0,    0,    0,    0,    0,    0,    0,    0,    0,    7,
                    123:    33,    1,    0,    0,    0,    0,    0,    0,    0,    0,
                    124:     0,    0,    0,    0, -216,    0,    0,   37,   42,   10,
                    125:    19,   28,    0,    0,    0, -214,
                    126: };
                    127: short fml_gindex[] = {                                      0,
                    128:    -8,   39,   30,   -3,    0,
                    129: };
                    130: #define YYTABLESIZE 312
                    131: short fml_table[] = {                                      17,
                    132:    10,   14,   15,   16,   23,   25,    1,   18,   19,    7,
                    133:     1,    2,    3,    4,   27,    5,    6,    7,    8,   33,
                    134:    18,   19,    8,   24,   34,   35,   36,    9,    1,    2,
                    135:     3,    4,    4,    5,    6,    7,    2,    2,    3,    4,
                    136:     8,    3,    6,    7,    0,   20,   21,   22,    8,   30,
                    137:    31,   32,   14,   14,   13,   13,   28,   29,    0,    0,
                    138:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    139:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    140:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    141:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    142:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    143:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    144:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    145:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    146:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    147:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    148:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    149:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    150:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    151:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    152:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    153:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    154:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    155:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    156:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    157:     0,    0,    0,    0,    0,    0,    0,    0,    0,    0,
                    158:     0,    0,   10,   10,   10,   10,   10,    0,    0,   10,
                    159:    10,    7,    7,    7,    7,    7,    0,    0,    7,    7,
                    160:     8,    8,    8,    8,    8,    0,    0,    8,    8,    9,
                    161:     9,    9,    9,    9,    4,    4,    9,    9,    2,    2,
                    162:     0,    4,    4,    3,    3,    2,    2,    0,    0,    0,
                    163:     3,    3,
                    164: };
                    165: short fml_check[] = {                                       8,
                    166:     0,  268,    6,    7,  267,   14,    0,  262,  263,    0,
                    167:   256,  257,  258,  259,  269,  261,  262,  263,    0,   23,
                    168:   262,  263,  268,  269,  269,  270,   35,    0,  256,  257,
                    169:   258,  259,    0,  261,  262,  263,    0,  257,  258,  259,
                    170:   268,    0,  262,  263,   -1,  264,  265,  266,  268,   20,
                    171:    21,   22,  269,  270,  269,  270,   18,   19,   -1,   -1,
                    172:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    173:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    174:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    175:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    176:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    177:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    178:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    179:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    180:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    181:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    182:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    183:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    184:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    185:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    186:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    187:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    188:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    189:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    190:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    191:    -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,   -1,
                    192:    -1,   -1,  262,  263,  264,  265,  266,   -1,   -1,  269,
                    193:   270,  262,  263,  264,  265,  266,   -1,   -1,  269,  270,
                    194:   262,  263,  264,  265,  266,   -1,   -1,  269,  270,  262,
                    195:   263,  264,  265,  266,  262,  263,  269,  270,  262,  263,
                    196:    -1,  269,  270,  262,  263,  269,  270,   -1,   -1,   -1,
                    197:   269,  270,
                    198: };
                    199: #define YYFINAL 9
                    200: #ifndef YYDEBUG
                    201: #define YYDEBUG 0
                    202: #endif
                    203: #define YYMAXTOKEN 270
                    204: #if YYDEBUG
                    205: char *fml_name[] = {
                    206: "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    207: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    208: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    209: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    210: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    211: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                    212: 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"F_NUMBER","V_ID","F_ID","EoI",
                    213: "F_ERROR","F_PLUS","F_MINUS","F_MULT","F_DIV","F_MOD","F_POW","F_LPAR","F_RPAR",
                    214: "F_COMMA",
                    215: };
                    216: char *fml_rule[] = {
                    217: "$accept : f_expr",
                    218: "f_expr : block",
                    219: "block : block F_PLUS term",
                    220: "block : block F_MINUS term",
                    221: "block : term",
                    222: "block : F_ERROR",
                    223: "block : error",
                    224: "term : term F_MULT basic_constr",
                    225: "term : term F_DIV basic_constr",
                    226: "term : term F_MOD basic_constr",
                    227: "term : basic_constr",
                    228: "basic_constr : basic_constr F_POW basic_item",
                    229: "basic_constr : basic_item",
                    230: "arg_list : arg_list F_COMMA block",
                    231: "arg_list : block",
                    232: "basic_item : F_ID F_LPAR F_RPAR",
                    233: "basic_item : F_ID F_LPAR arg_list F_RPAR",
                    234: "basic_item : V_ID",
                    235: "basic_item : F_MINUS basic_item",
                    236: "basic_item : F_PLUS basic_item",
                    237: "basic_item : F_NUMBER",
                    238: "basic_item : F_LPAR block F_RPAR",
                    239: };
                    240: #endif
                    241: #ifndef YYSTYPE
                    242: typedef int YYSTYPE;
                    243: #endif
                    244: #ifdef YYSTACKSIZE
                    245: #undef YYMAXDEPTH
                    246: #define YYMAXDEPTH YYSTACKSIZE
                    247: #else
                    248: #ifdef YYMAXDEPTH
                    249: #define YYSTACKSIZE YYMAXDEPTH
                    250: #else
                    251: #define YYSTACKSIZE 500
                    252: #define YYMAXDEPTH 500
                    253: #endif
                    254: #endif
                    255: int yydebug;
                    256: int yynerrs;
                    257: int yyerrflag;
                    258: int yychar;
                    259: short *yyssp;
                    260: YYSTYPE *yyvsp;
                    261: YYSTYPE yyval;
                    262: YYSTYPE yylval;
                    263: short yyss[YYSTACKSIZE];
                    264: YYSTYPE yyvs[YYSTACKSIZE];
                    265: #define yystacksize YYSTACKSIZE
                    266: #line 155 "capaFormula.y"
                    267: void
                    268: fml_error(char *msg)
                    269: {
                    270:   FormulaParseOK=0;
                    271:   printf("Error Parsing: %s\n",msg);
                    272:   
                    273: }
                    274: /* ---------------------------------------------------- */
                    275: Symbol *
                    276: f_symbol_pow(ap,bp) Symbol *ap; Symbol *bp;
                    277: {
                    278:   Symbol *cp;
                    279:   double  a, b;
                    280:   int     error = 0;
                    281:   
                    282:   cp = NULL;
                    283:   switch(ap->s_type) {
                    284:      case I_VAR:      a = (double)(ap->s_int);
                    285:          break;
                    286:      case I_CONSTANT: a = (double)(ap->s_int); capa_mfree((char *)ap);
                    287:          break;
                    288:      case R_VAR:      a = ap->s_real;
                    289:          break;
                    290:      case R_CONSTANT: a = ap->s_real;   capa_mfree((char *)ap);
                    291:          break;
                    292:      case S_VAR:
                    293:      case S_CONSTANT: 
                    294:      default:         error = 1;  break;
                    295:   }
                    296:   switch(bp->s_type) {
                    297:      case I_VAR:      b = (double)(bp->s_int);
                    298:          break;
                    299:      case I_CONSTANT: b = (double)(bp->s_int);  capa_mfree((char *)bp);
                    300:          break;
                    301:      case R_VAR:      b = bp->s_real;
                    302:          break;
                    303:      case R_CONSTANT: b = bp->s_real;   capa_mfree((char *)bp);
                    304:          break;
                    305:      case S_VAR:
                    306:      case S_CONSTANT: 
                    307:      default:         error = 1; break;
                    308:   }
                    309:   if (!error) {
                    310:     cp = (Symbol *)capa_malloc(sizeof(Symbol),1);
                    311:     cp->s_type = R_CONSTANT;
                    312:     cp->s_real = pow(a,b);
                    313:     
                    314:   }
                    315:   return (cp);
                    316: }
                    317: 
                    318: /* ============================================================================= */
                    319: #line 320 "fma.tab.c"
                    320: #define YYABORT goto yyabort
                    321: #define YYREJECT goto yyabort
                    322: #define YYACCEPT goto yyaccept
                    323: #define YYERROR goto yyerrlab
                    324: int
                    325: yyparse()
                    326: {
                    327:     register int yym, yyn, yystate;
                    328: #if YYDEBUG
                    329:     register char *yys;
                    330:     extern char *getenv();
                    331: 
                    332:     if (yys = getenv("YYDEBUG"))
                    333:     {
                    334:         yyn = *yys;
                    335:         if (yyn >= '0' && yyn <= '9')
                    336:             yydebug = yyn - '0';
                    337:     }
                    338: #endif
                    339: 
                    340:     yynerrs = 0;
                    341:     yyerrflag = 0;
                    342:     yychar = (-1);
                    343: 
                    344:     yyssp = yyss;
                    345:     yyvsp = yyvs;
                    346:     *yyssp = yystate = 0;
                    347: 
                    348: yyloop:
                    349:     if (yyn = yydefred[yystate]) goto yyreduce;
                    350:     if (yychar < 0)
                    351:     {
                    352:         if ((yychar = yylex()) < 0) yychar = 0;
                    353: #if YYDEBUG
                    354:         if (yydebug)
                    355:         {
                    356:             yys = 0;
                    357:             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                    358:             if (!yys) yys = "illegal-symbol";
                    359:             printf("%sdebug: state %d, reading %d (%s)\n",
                    360:                     YYPREFIX, yystate, yychar, yys);
                    361:         }
                    362: #endif
                    363:     }
                    364:     if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
                    365:             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
                    366:     {
                    367: #if YYDEBUG
                    368:         if (yydebug)
                    369:             printf("%sdebug: state %d, shifting to state %d\n",
                    370:                     YYPREFIX, yystate, yytable[yyn]);
                    371: #endif
                    372:         if (yyssp >= yyss + yystacksize - 1)
                    373:         {
                    374:             goto yyoverflow;
                    375:         }
                    376:         *++yyssp = yystate = yytable[yyn];
                    377:         *++yyvsp = yylval;
                    378:         yychar = (-1);
                    379:         if (yyerrflag > 0)  --yyerrflag;
                    380:         goto yyloop;
                    381:     }
                    382:     if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
                    383:             yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
                    384:     {
                    385:         yyn = yytable[yyn];
                    386:         goto yyreduce;
                    387:     }
                    388:     if (yyerrflag) goto yyinrecovery;
                    389: #ifdef lint
                    390:     goto yynewerror;
                    391: #endif
                    392: yynewerror:
                    393:     yyerror("syntax error");
                    394: #ifdef lint
                    395:     goto yyerrlab;
                    396: #endif
                    397: yyerrlab:
                    398:     ++yynerrs;
                    399: yyinrecovery:
                    400:     if (yyerrflag < 3)
                    401:     {
                    402:         yyerrflag = 3;
                    403:         for (;;)
                    404:         {
                    405:             if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
                    406:                     yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
                    407:             {
                    408: #if YYDEBUG
                    409:                 if (yydebug)
                    410:                     printf("%sdebug: state %d, error recovery shifting\
                    411:  to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
                    412: #endif
                    413:                 if (yyssp >= yyss + yystacksize - 1)
                    414:                 {
                    415:                     goto yyoverflow;
                    416:                 }
                    417:                 *++yyssp = yystate = yytable[yyn];
                    418:                 *++yyvsp = yylval;
                    419:                 goto yyloop;
                    420:             }
                    421:             else
                    422:             {
                    423: #if YYDEBUG
                    424:                 if (yydebug)
                    425:                     printf("%sdebug: error recovery discarding state %d\n",
                    426:                             YYPREFIX, *yyssp);
                    427: #endif
                    428:                 if (yyssp <= yyss) goto yyabort;
                    429:                 --yyssp;
                    430:                 --yyvsp;
                    431:             }
                    432:         }
                    433:     }
                    434:     else
                    435:     {
                    436:         if (yychar == 0) goto yyabort;
                    437: #if YYDEBUG
                    438:         if (yydebug)
                    439:         {
                    440:             yys = 0;
                    441:             if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                    442:             if (!yys) yys = "illegal-symbol";
                    443:             printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
                    444:                     YYPREFIX, yystate, yychar, yys);
                    445:         }
                    446: #endif
                    447:         yychar = (-1);
                    448:         goto yyloop;
                    449:     }
                    450: yyreduce:
                    451: #if YYDEBUG
                    452:     if (yydebug)
                    453:         printf("%sdebug: state %d, reducing by rule %d (%s)\n",
                    454:                 YYPREFIX, yystate, yyn, yyrule[yyn]);
                    455: #endif
                    456:     yym = yylen[yyn];
                    457:     yyval = yyvsp[1-yym];
                    458:     switch (yyn)
                    459:     {
                    460: case 1:
                    461: #line 66 "capaFormula.y"
                    462: { switch(yyvsp[0]->s_type) {
                    463:                                                       case I_VAR:
                    464:                                                       case I_CONSTANT: FormulaVal = (double)(yyvsp[0]->s_int);
                    465:                                                           break;
                    466:                                                       case R_VAR: 
                    467:                                                       case R_CONSTANT: FormulaVal = yyvsp[0]->s_real;
                    468:                                                           break;
                    469:                                                       case S_VAR:
                    470:                                                       case S_CONSTANT: FormulaParseOK = 0;
                    471:                                                           break;
                    472:                                                       default:         FormulaParseOK = 0;
                    473:                                                           break;
                    474:                                                     }
                    475:                                                     capa_mfree((char *)yyvsp[0]);
                    476:                                                     FMLDBUG_PR1("[f_expr <= block ]\n");
                    477:                                                   }
                    478: break;
                    479: case 2:
                    480: #line 84 "capaFormula.y"
                    481: { yyval = symbols_op(yyvsp[-2], yyvsp[0], ADD_op);  }
                    482: break;
                    483: case 3:
                    484: #line 85 "capaFormula.y"
                    485: { yyval = symbols_op(yyvsp[-2], yyvsp[0], SUB_op);  }
                    486: break;
                    487: case 4:
                    488: #line 86 "capaFormula.y"
                    489: { yyval = yyvsp[0]; }
                    490: break;
                    491: case 5:
                    492: #line 87 "capaFormula.y"
                    493: { FormulaParseOK = 0; FMLDBUG_PR1("[F_ERROR]\n"); return 0;}
                    494: break;
                    495: case 6:
                    496: #line 88 "capaFormula.y"
                    497: { FormulaParseOK = 0; FMLDBUG_PR1("[ERROR]\n"); return 0;  }
                    498: break;
                    499: case 7:
                    500: #line 91 "capaFormula.y"
                    501: { yyval = symbols_op(yyvsp[-2], yyvsp[0], MUL_op);  }
                    502: break;
                    503: case 8:
                    504: #line 92 "capaFormula.y"
                    505: { yyval = symbols_op(yyvsp[-2], yyvsp[0], DIV_op);  }
                    506: break;
                    507: case 9:
                    508: #line 93 "capaFormula.y"
                    509: { yyval = symbols_op(yyvsp[-2], yyvsp[0], IDIV_op); }
                    510: break;
                    511: case 10:
                    512: #line 94 "capaFormula.y"
                    513: { yyval = yyvsp[0]; }
                    514: break;
                    515: case 11:
                    516: #line 97 "capaFormula.y"
                    517: { yyval = f_symbol_pow(yyvsp[-2],yyvsp[0]);
                    518:                                                     FMLDBUG_PR3("[%.16g ^ %.16g] ",yyvsp[-2]->s_real,yyvsp[0]->s_real);       }
                    519: break;
                    520: case 12:
                    521: #line 99 "capaFormula.y"
                    522: { yyval = yyvsp[0]; }
                    523: break;
                    524: case 13:
                    525: #line 102 "capaFormula.y"
                    526: { yyval = yyvsp[-2];
                    527:                                                     yyval->s_argc++;
                    528:                                                     yyval->s_argp = addto_arglist(yyvsp[-2]->s_argp, yyvsp[0]);
                    529:                                                   }
                    530: break;
                    531: case 14:
                    532: #line 106 "capaFormula.y"
                    533: { yyval = yyvsp[0];
                    534:                                                     yyval->s_argc = 1;
                    535:                                                     yyval->s_argp = new_arglist(yyvsp[0]);
                    536:                                                   }
                    537: break;
                    538: case 15:
                    539: #line 112 "capaFormula.y"
                    540: {  int tmp;
                    541:                                          
                    542:                                                      Func_idx--;
                    543:                                                      if(Func_idx >= 0 ) {
                    544:                                                        tmp = match_function(FuncStack[Func_idx].s_name,0);
                    545:                                                        yyval = do_function(tmp, 0, NULL );
                    546:                                                        capa_mfree(FuncStack[Func_idx].s_name);
                    547:                                                      }
                    548:                                                   }
                    549: break;
                    550: case 16:
                    551: #line 121 "capaFormula.y"
                    552: {  int  tmp;
                    553:                                          
                    554:                                                      Func_idx--;
                    555:                                                      if(Func_idx >= 0 ) {
                    556:                                                         tmp = match_function(FuncStack[Func_idx].s_name,yyvsp[-1]->s_argc);
                    557: 					                yyval = do_function(tmp, yyvsp[-1]->s_argc, yyvsp[-1]->s_argp);
                    558: 					                capa_mfree(FuncStack[Func_idx].s_name);
                    559: 					                free_arglist(yyvsp[-1]->s_argp);
                    560:                                                       }
                    561:                                                   }
                    562: break;
                    563: case 17:
                    564: #line 131 "capaFormula.y"
                    565: { FMLDBUG_PR3("[V %s = %.16g] ",yyvsp[0]->s_name, yyvsp[0]->s_real);
                    566:                                                     yyval = yyvsp[0];
                    567:                                                   }
                    568: break;
                    569: case 18:
                    570: #line 134 "capaFormula.y"
                    571: { yyval = yyvsp[0];
                    572:                                                     switch(yyvsp[0]->s_type) {
                    573:                                                       case I_VAR:      yyval = (Symbol *)capa_malloc(sizeof(Symbol),1);
                    574:                                                              yyval->s_type = I_CONSTANT;
                    575:                                                       case I_CONSTANT: yyval->s_int =    - yyvsp[0]->s_int; break;
                    576:                                                       case R_VAR: yyval = (Symbol *)capa_malloc(sizeof(Symbol),1);
                    577:                                                              yyval->s_type = R_CONSTANT;
                    578:                                                       case R_CONSTANT: yyval->s_real =   (-1.0)*(yyvsp[0]->s_real); 
                    579:                                                              break;
                    580:                                                       case S_VAR:
                    581:                                                       case S_CONSTANT: break;
                    582:                                                       default:         break;
                    583:                                                     }
                    584:                                                   }
                    585: break;
                    586: case 19:
                    587: #line 148 "capaFormula.y"
                    588: { yyval = yyvsp[0]; }
                    589: break;
                    590: case 20:
                    591: #line 149 "capaFormula.y"
                    592: { FMLDBUG_PR2("[F %.16g] ",yyvsp[0]->s_real);
                    593:                                                     yyval = yyvsp[0];
                    594:                                                   }
                    595: break;
                    596: case 21:
                    597: #line 152 "capaFormula.y"
                    598: { yyval = yyvsp[-1]; }
                    599: break;
                    600: #line 601 "fma.tab.c"
                    601:     }
                    602:     yyssp -= yym;
                    603:     yystate = *yyssp;
                    604:     yyvsp -= yym;
                    605:     yym = yylhs[yyn];
                    606:     if (yystate == 0 && yym == 0)
                    607:     {
                    608: #if YYDEBUG
                    609:         if (yydebug)
                    610:             printf("%sdebug: after reduction, shifting from state 0 to\
                    611:  state %d\n", YYPREFIX, YYFINAL);
                    612: #endif
                    613:         yystate = YYFINAL;
                    614:         *++yyssp = YYFINAL;
                    615:         *++yyvsp = yyval;
                    616:         if (yychar < 0)
                    617:         {
                    618:             if ((yychar = yylex()) < 0) yychar = 0;
                    619: #if YYDEBUG
                    620:             if (yydebug)
                    621:             {
                    622:                 yys = 0;
                    623:                 if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
                    624:                 if (!yys) yys = "illegal-symbol";
                    625:                 printf("%sdebug: state %d, reading %d (%s)\n",
                    626:                         YYPREFIX, YYFINAL, yychar, yys);
                    627:             }
                    628: #endif
                    629:         }
                    630:         if (yychar == 0) goto yyaccept;
                    631:         goto yyloop;
                    632:     }
                    633:     if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
                    634:             yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
                    635:         yystate = yytable[yyn];
                    636:     else
                    637:         yystate = yydgoto[yym];
                    638: #if YYDEBUG
                    639:     if (yydebug)
                    640:         printf("%sdebug: after reduction, shifting from state %d \
                    641: to state %d\n", YYPREFIX, *yyssp, yystate);
                    642: #endif
                    643:     if (yyssp >= yyss + yystacksize - 1)
                    644:     {
                    645:         goto yyoverflow;
                    646:     }
                    647:     *++yyssp = yystate;
                    648:     *++yyvsp = yyval;
                    649:     goto yyloop;
                    650: yyoverflow:
                    651:     yyerror("yacc stack overflow");
                    652: yyabort:
                    653:     return (1);
                    654: yyaccept:
                    655:     return (0);
                    656: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>