00001 
00002 # line 2 "AtomParser.y"
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 #include <stdio.h>
00027 #include <string.h>
00028 #include "AtomParser.h"
00029 #include "Inform.h"
00030 
00031 #if !defined(_MSC_VER)
00032 extern "C" int yyparse();
00033 #endif
00034 extern "C" void yyerror(const char *s);
00035 extern "C" int yylex();
00036 
00037 atomparser_node *atomparser_result;
00038 
00039 # line 39 "AtomParser.y"
00040 typedef union
00041 #ifdef __cplusplus
00042         YYSTYPE
00043 #endif
00044  {
00045         int ival;
00046         double dval;
00047         atomparser_node *node;
00048 } YYSTYPE;
00049 # define KEY 257
00050 # define WITHIN 258
00051 # define EXWITHIN 259
00052 # define PBWITHIN 260
00053 # define WITHINBONDS 261
00054 # define MAXRINGSIZE 262
00055 # define RINGSIZE 263
00056 # define WHERE 264
00057 # define FUNC 265
00058 # define STRFCTN 266
00059 # define SAME 267
00060 # define NEAREST 268
00061 # define SINGLE 269
00062 # define FROM 270
00063 # define OF 271
00064 # define AS 272
00065 # define THROUGH 273
00066 # define PARSEERROR 274
00067 # define RANGE 275
00068 # define FLOATVAL 276
00069 # define INTVAL 277
00070 # define STRWORD 278
00071 # define COMPARE 279
00072 # define OR 280
00073 # define AND 281
00074 # define LT 282
00075 # define LE 283
00076 # define EQ 284
00077 # define GE 285
00078 # define GT 286
00079 # define NE 287
00080 # define NLT 288
00081 # define NLE 289
00082 # define NEQ 290
00083 # define NGE 291
00084 # define NGT 292
00085 # define NNE 293
00086 # define SLT 294
00087 # define SLE 295
00088 # define SEQ 296
00089 # define SGE 297
00090 # define SGT 298
00091 # define SNE 299
00092 # define MATCH 300
00093 # define ADD 301
00094 # define SUB 302
00095 # define MULT 303
00096 # define DIV 304
00097 # define MOD 305
00098 # define EXP 306
00099 # define nonassoc 307
00100 # define NOT 308
00101 # define UMINUS 309
00102 
00103 #if !defined(_MSC_VER) && !defined(ARCH_TRU64)
00104 #include <inttypes.h>
00105 #endif
00106 
00107 #if 1
00108 
00109 #include <stdlib.h>
00110 #include <string.h>
00111 #define YYCONST const
00112 #else
00113 #include <malloc.h>
00114 #include <memory.h>
00115 #define YYCONST
00116 #endif
00117 
00118 #if !defined(_MSC_VER) && !defined(__APPLE__) && !defined(ARCH_FREEBSD) && !defined(ARCH_FREEBSDAMD64) && !defined(ARCH_ANDROIDARMV7A)
00119 #include <values.h>
00120 #endif
00121 
00122 #if defined(__cplusplus) || defined(__STDC__)
00123 
00124 #if defined(__cplusplus) && defined(__EXTERN_C__)
00125 extern "C" {
00126 #endif
00127 #ifndef yyerror
00128 #if defined(__cplusplus)
00129         void yyerror(YYCONST char *);
00130 #endif
00131 #endif
00132 #ifndef yylex
00133         int yylex(void);
00134 #endif
00135         int yyparse(void);
00136 #if defined(__cplusplus) && defined(__EXTERN_C__)
00137 }
00138 #endif
00139 
00140 #endif
00141 
00142 #define yyclearin yychar = -1
00143 #define yyerrok yyerrflag = 0
00144 extern int yychar;
00145 extern int yyerrflag;
00146 YYSTYPE yylval;
00147 YYSTYPE yyval;
00148 typedef int yytabelem;
00149 #ifndef YYMAXDEPTH
00150 #define YYMAXDEPTH 150
00151 #endif
00152 #if YYMAXDEPTH > 0
00153 int yy_yys[YYMAXDEPTH], *yys = yy_yys;
00154 YYSTYPE yy_yyv[YYMAXDEPTH], *yyv = yy_yyv;
00155 #else   
00156 int *yys;
00157 YYSTYPE *yyv;
00158 #endif
00159 static int yymaxdepth = YYMAXDEPTH;
00160 # define YYERRCODE 256
00161 
00162 # line 279 "AtomParser.y"
00163 
00164 
00165 extern "C" void yyerror(const char *s) {
00166   msgErr << s << sendmsg;
00167 }
00168 
00169 
00170 
00171 extern "C" int yywrap(void) {
00172   return 1;
00173 }
00174 
00175 static YYCONST yytabelem yyexca[] ={
00176 -1, 0,
00177         0, 1,
00178         -2, 0,
00179 -1, 1,
00180         0, -1,
00181         -2, 0,
00182         };
00183 # define YYNPROD 59
00184 # define YYLAST 368
00185 static YYCONST yytabelem yyact[]={
00186 
00187      4,    49,    50,    51,    52,    53,    54,    55,    56,    57,
00188     58,    59,    60,    61,    43,    44,    47,    48,    45,    46,
00189     46,    26,     4,    43,    44,    47,    48,    45,    46,    47,
00190     48,    45,    46,    76,    27,    26,    67,    66,    65,    33,
00191     34,    40,    39,    38,    77,    37,    94,    82,    85,    81,
00192    106,    80,    79,    78,    84,    83,    77,    41,     2,    64,
00193     73,    63,    62,    28,    30,    31,    32,     1,     8,     7,
00194     42,     0,     0,     0,    17,     0,     0,    35,    36,    29,
00195      0,     0,    68,     0,     0,    74,    75,     0,     0,     0,
00196      0,     0,     0,     0,     0,     0,     0,     0,    69,    72,
00197      0,     0,     0,     0,     0,    70,     0,     0,     0,     0,
00198      0,     0,     0,     0,     0,     0,     0,    86,    87,    88,
00199     89,    90,    91,    92,    93,     0,     0,     0,     0,     0,
00200     93,     0,     0,     0,     0,     0,     0,    97,    98,    99,
00201    100,   101,   102,   103,   104,    95,     0,     0,    96,     0,
00202      0,     0,     0,     0,   105,     0,     0,     0,     0,     0,
00203      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00204      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00205      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00206      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00207      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00208      0,     0,     0,     0,     0,     0,     3,    18,     9,    10,
00209     11,    12,    14,    15,     0,    25,    19,    16,    13,     6,
00210      0,     0,     0,     0,     0,     0,    20,    21,    22,    18,
00211      9,    10,    11,    12,    14,    15,     0,    25,    19,    16,
00212     13,     6,     0,     0,     0,     0,     0,     0,    20,    21,
00213     22,    24,    23,     0,     0,     0,     0,     0,     5,     0,
00214      0,     0,    27,    26,     0,     0,     0,     0,     0,     0,
00215      0,     0,     0,    24,    23,     0,     0,     0,     0,     0,
00216      5,    49,    50,    51,    52,    53,    54,    55,    56,    57,
00217     58,    59,    60,    61,    43,    44,    47,    48,    45,    46,
00218     43,    44,    47,    48,    45,    46,    43,    44,    47,    48,
00219     45,    46,    71,     0,     0,     0,     0,     0,     0,     0,
00220     25,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00221      0,    20,    21,    22,     0,     0,     0,     0,     0,     0,
00222      0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
00223      0,     0,     0,     0,     0,     0,    24,    23 };
00224 static YYCONST yytabelem yypact[]={
00225 
00226    -40,-10000000,  -246,-10000000,   -18,   -18,   -18,-10000000,-10000000,  -237,
00227   -237,  -237,  -232,  -234,  -235,  -236,  -200,  -287,  -240,  -240,
00228 -10000000,-10000000,-10000000,    65,    65,    20,   -18,   -18,    -8,     3,
00229 -10000000,  -246,  -218,-10000000,-10000000,  -219,  -220,  -222,  -226,  -215,
00230   -216,  -224,    65,    65,    65,    65,    65,    65,    65,-10000000,
00231 -10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,-10000000,
00232 -10000000,-10000000,  -240,-10000000,  -227,-10000000,-10000000,-10000000,  -240,-10000000,
00233     65,-10000000,-10000000,    65,-10000000,  -260,-10000000,-10000000,   -18,   -18,
00234    -18,   -18,   -18,   -18,   -18,   -18,  -278,  -274,  -274,  -286,
00235 -10000000,  -286,  -286,-10000000,  -240,    15,     9,  -246,  -246,  -246,
00236   -246,  -246,  -246,  -246,  -246,-10000000,-10000000 };
00237 static YYCONST yytabelem yypgo[]={
00238 
00239      0,    70,    58,    74,    69,    62,    59,    61,    68,    66,
00240     67 };
00241 static YYCONST yytabelem yyr1[]={
00242 
00243      0,    10,    10,    10,     2,     2,     2,     2,     2,     2,
00244      2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
00245      2,     4,     8,     6,     6,     6,     7,     7,     5,     5,
00246      9,     9,     3,     3,     3,     3,     3,     3,     3,     3,
00247      3,     3,     3,     3,     3,     3,     1,     1,     1,     1,
00248      1,     1,     1,     1,     1,     1,     1,     1,     1 };
00249 static YYCONST yytabelem yyr2[]={
00250 
00251      0,     1,     3,     3,     7,     5,     3,     5,     7,     7,
00252      3,     3,     9,     9,     9,     9,     9,     9,     9,     9,
00253      7,     5,     5,     3,     3,     3,     3,     7,     3,     5,
00254      3,     3,     3,     3,     3,     7,     7,     7,     5,     5,
00255      7,     7,     7,     7,     3,     9,     3,     3,     3,     3,
00256      3,     3,     3,     3,     3,     3,     3,     3,     3 };
00257 static YYCONST yytabelem yychk[]={
00258 
00259 -10000000,   -10,    -2,   256,    40,   308,   269,    -4,    -8,   258,
00260    259,   260,   261,   268,   262,   263,   267,    -3,   257,   266,
00261    276,   277,   278,   302,   301,   265,   281,   280,    -2,    -3,
00262     -2,    -2,    -9,   276,   277,    -9,    -9,   277,   277,   277,
00263    277,   257,    -1,   301,   302,   305,   306,   303,   304,   288,
00264    289,   290,   291,   292,   293,   294,   295,   296,   297,   298,
00265    299,   300,    -5,    -7,    -6,   278,   277,   276,    -5,    -3,
00266     40,   257,    -3,    40,    -2,    -2,    41,    41,   271,   271,
00267    271,   271,   273,   270,   270,   272,    -3,    -3,    -3,    -3,
00268     -3,    -3,    -3,    -7,   273,    -3,    -3,    -2,    -2,    -2,
00269     -2,    -2,    -2,    -2,    -2,    -6,    41 };
00270 static YYCONST yytabelem yydef[]={
00271 
00272     -2,    -2,     2,     3,     0,     0,     6,    10,    11,     0,
00273      0,     0,     0,     0,     0,     0,     0,     0,    44,     0,
00274     32,    33,    34,     0,     0,     0,     0,     0,     0,     0,
00275      5,     7,     0,    30,    31,     0,     0,     0,     0,     0,
00276      0,     0,     0,     0,     0,     0,     0,     0,     0,    46,
00277     47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
00278     57,    58,    21,    28,    26,    23,    24,    25,    22,    38,
00279      0,    44,    39,     0,     8,     9,     4,    35,     0,     0,
00280      0,     0,     0,     0,     0,     0,    20,    36,    37,    40,
00281     41,    42,    43,    29,     0,     0,     0,    12,    13,    14,
00282     15,    16,    17,    18,    19,    27,    45 };
00283 typedef struct
00284 #ifdef __cplusplus
00285         yytoktype
00286 #endif
00287 {
00288 #ifdef __cplusplus
00289 const
00290 #endif
00291 char *t_name; int t_val; } yytoktype;
00292 #ifndef YYDEBUG
00293 #       define YYDEBUG  0       
00294 #endif
00295 
00296 #if YYDEBUG
00297 
00298 yytoktype yytoks[] =
00299 {
00300         "KEY",  257,
00301         "WITHIN",       258,
00302         "EXWITHIN",     259,
00303         "PBWITHIN",     260,
00304         "WITHINBONDS",  261,
00305         "MAXRINGSIZE",  262,
00306         "RINGSIZE",     263,
00307         "WHERE",        264,
00308         "FUNC", 265,
00309         "STRFCTN",      266,
00310         "SAME", 267,
00311         "NEAREST",      268,
00312         "SINGLE",       269,
00313         "FROM", 270,
00314         "OF",   271,
00315         "AS",   272,
00316         "THROUGH",      273,
00317         "PARSEERROR",   274,
00318         "RANGE",        275,
00319         "FLOATVAL",     276,
00320         "INTVAL",       277,
00321         "STRWORD",      278,
00322         "COMPARE",      279,
00323         "OR",   280,
00324         "AND",  281,
00325         "LT",   282,
00326         "LE",   283,
00327         "EQ",   284,
00328         "GE",   285,
00329         "GT",   286,
00330         "NE",   287,
00331         "NLT",  288,
00332         "NLE",  289,
00333         "NEQ",  290,
00334         "NGE",  291,
00335         "NGT",  292,
00336         "NNE",  293,
00337         "SLT",  294,
00338         "SLE",  295,
00339         "SEQ",  296,
00340         "SGE",  297,
00341         "SGT",  298,
00342         "SNE",  299,
00343         "MATCH",        300,
00344         "ADD",  301,
00345         "SUB",  302,
00346         "MULT", 303,
00347         "DIV",  304,
00348         "MOD",  305,
00349         "EXP",  306,
00350         "nonassoc",     307,
00351         "NOT",  308,
00352         "UMINUS",       309,
00353         "-unknown-",    -1      
00354 };
00355 
00356 #ifdef __cplusplus
00357 const
00358 #endif
00359 char * yyreds[] =
00360 {
00361         "-no such reduction-",
00362         "selection_list : /* empty */",
00363         "selection_list : selection",
00364         "selection_list : error",
00365         "selection : '(' selection ')'",
00366         "selection : NOT selection",
00367         "selection : SINGLE",
00368         "selection : SINGLE selection",
00369         "selection : selection AND selection",
00370         "selection : selection OR selection",
00371         "selection : keyword_list",
00372         "selection : strfctn_list",
00373         "selection : WITHIN number OF selection",
00374         "selection : EXWITHIN number OF selection",
00375         "selection : PBWITHIN number OF selection",
00376         "selection : WITHINBONDS INTVAL OF selection",
00377         "selection : NEAREST INTVAL THROUGH selection",
00378         "selection : MAXRINGSIZE INTVAL FROM selection",
00379         "selection : RINGSIZE INTVAL FROM selection",
00380         "selection : SAME KEY AS selection",
00381         "selection : expression compare expression",
00382         "keyword_list : KEY string_list",
00383         "strfctn_list : STRFCTN string_list",
00384         "word : STRWORD",
00385         "word : INTVAL",
00386         "word : FLOATVAL",
00387         "string_list_ele : word",
00388         "string_list_ele : word THROUGH word",
00389         "string_list : string_list_ele",
00390         "string_list : string_list string_list_ele",
00391         "number : FLOATVAL",
00392         "number : INTVAL",
00393         "expression : FLOATVAL",
00394         "expression : INTVAL",
00395         "expression : STRWORD",
00396         "expression : '(' expression ')'",
00397         "expression : expression ADD expression",
00398         "expression : expression SUB expression",
00399         "expression : SUB expression",
00400         "expression : ADD expression",
00401         "expression : expression MOD expression",
00402         "expression : expression EXP expression",
00403         "expression : expression MULT expression",
00404         "expression : expression DIV expression",
00405         "expression : KEY",
00406         "expression : FUNC '(' expression ')'",
00407         "compare : NLT",
00408         "compare : NLE",
00409         "compare : NEQ",
00410         "compare : NGE",
00411         "compare : NGT",
00412         "compare : NNE",
00413         "compare : SLT",
00414         "compare : SLE",
00415         "compare : SEQ",
00416         "compare : SGE",
00417         "compare : SGT",
00418         "compare : SNE",
00419         "compare : MATCH",
00420 };
00421 #endif 
00422 # line  1 "/usr/ccs/bin/yaccpar"
00423 
00424 
00425 
00426 
00427 #pragma ident   "@(#)yaccpar    6.16    99/01/20 SMI"
00428 
00429 
00430 
00431 
00432 
00433 
00434 
00435 
00436 #define YYERROR         goto yyerrlab
00437 #define YYACCEPT        return(0)
00438 #define YYABORT         return(1)
00439 #define YYBACKUP( newtoken, newvalue )\
00440 {\
00441         if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
00442         {\
00443                 yyerror( "syntax error - cannot backup" );\
00444                 goto yyerrlab;\
00445         }\
00446         yychar = newtoken;\
00447         yystate = *yyps;\
00448         yylval = newvalue;\
00449         goto yynewstate;\
00450 }
00451 #define YYRECOVERING()  (!!yyerrflag)
00452 #define YYNEW(type)     malloc(sizeof(type) * yynewmax)
00453 #define YYCOPY(to, from, type) \
00454         (type *) memcpy(to, (char *) from, yymaxdepth * sizeof (type))
00455 #define YYENLARGE( from, type) \
00456         (type *) realloc((char *) from, yynewmax * sizeof(type))
00457 #ifndef YYDEBUG
00458 #       define YYDEBUG  1       
00459 #endif
00460 
00461 
00462 
00463 
00464 int yydebug;                    
00465 
00466 
00467 
00468 
00469 #define YYFLAG          (-10000000)
00470 
00471 
00472 
00473 
00474 YYSTYPE *yypv;                  
00475 int *yyps;                      
00476 
00477 int yystate;                    
00478 int yytmp;                      
00479 
00480 int yynerrs;                    
00481 int yyerrflag;                  
00482 int yychar;                     
00483 
00484 
00485 
00486 #ifdef YYNMBCHARS
00487 #define YYLEX()         yycvtok(yylex())
00488 
00489 
00490 
00491 
00492 
00493 #if defined(__STDC__) || defined(__cplusplus)
00494 int yycvtok(int i)
00495 #else
00496 int yycvtok(i) int i;
00497 #endif
00498 {
00499         int first = 0;
00500         int last = YYNMBCHARS - 1;
00501         int mid;
00502         wchar_t j;
00503 
00504         if(i&0x60000000){
00505                 if( yymbchars[last].character < i ){
00506                         return i;
00507                 }
00508                 while ((last>=first)&&(first>=0)) {
00509                         mid = (first+last)/2;
00510                         j = yymbchars[mid].character;
00511                         if( j==i ){ 
00512                                 return yymbchars[mid].tvalue;
00513                         }else if( j<i ){
00514                                 first = mid + 1;
00515                         }else{
00516                                 last = mid -1;
00517                         }
00518                 }
00519                 
00520                 return i;
00521         }else{
00522                 return i;
00523         }
00524 }
00525 #else
00526 #define YYLEX()         yylex()
00527 #endif
00529 
00530 
00531 
00532 #if defined(__STDC__) || defined(__cplusplus)
00533 int yyparse(void)
00534 #else
00535 int yyparse()
00536 #endif
00537 {
00538         register YYSTYPE *yypvt = 0;    
00539 
00540 #if defined(__cplusplus) || defined(lint)
00541 
00542 
00543 
00544 
00545         static int __yaccpar_lint_hack__ = 0;
00546         switch (__yaccpar_lint_hack__)
00547         {
00548                 case 1: goto yyerrlab;
00549                 case 2: goto yynewstate;
00550         }
00551 #endif
00552 
00553         
00554 
00555 
00556         yypv = &yyv[-1];
00557         yyps = &yys[-1];
00558         yystate = 0;
00559         yytmp = 0;
00560         yynerrs = 0;
00561         yyerrflag = 0;
00562         yychar = -1;
00563 
00564 #if YYMAXDEPTH <= 0
00565         if (yymaxdepth <= 0)
00566         {
00567                 if ((yymaxdepth = YYEXPAND(0)) <= 0)
00568                 {
00569                         yyerror("yacc initialization error");
00570                         YYABORT;
00571                 }
00572         }
00573 #endif
00574 
00575         {
00576                 register YYSTYPE *yy_pv;        
00577                 register int *yy_ps;            
00578                 register int yy_state;          
00579                 register int  yy_n;             
00580         goto yystack;   
00581 
00582                 
00583 
00584 
00585 
00586         yynewstate:
00587                 yy_pv = yypv;
00588                 yy_ps = yyps;
00589                 yy_state = yystate;
00590                 goto yy_newstate;
00591 
00592                 
00593 
00594 
00595 
00596         yystack:
00597                 yy_pv = yypv;
00598                 yy_ps = yyps;
00599                 yy_state = yystate;
00600 
00601                 
00602 
00603 
00604         yy_stack:
00605                 
00606 
00607 
00608 #if YYDEBUG
00609                 
00610 
00611 
00612 
00613 
00614 
00615                 if ( yydebug )
00616                 {
00617                         register int yy_i;
00618 
00619                         printf( "State %d, token ", yy_state );
00620                         if ( yychar == 0 )
00621                                 printf( "end-of-file\n" );
00622                         else if ( yychar < 0 )
00623                                 printf( "-none-\n" );
00624                         else
00625                         {
00626                                 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
00627                                         yy_i++ )
00628                                 {
00629                                         if ( yytoks[yy_i].t_val == yychar )
00630                                                 break;
00631                                 }
00632                                 printf( "%s\n", yytoks[yy_i].t_name );
00633                         }
00634                 }
00635 #endif 
00636                 if ( ++yy_ps >= &yys[ yymaxdepth ] )    
00637                 {
00638                         
00639 
00640 
00641 
00642                         long yyps_index = (yy_ps - yys);
00643                         long yypv_index = (yy_pv - yyv);
00644                         long yypvt_index = (yypvt - yyv);
00645                         int yynewmax;
00646 #ifdef YYEXPAND
00647                         yynewmax = YYEXPAND(yymaxdepth);
00648 #else
00649                         yynewmax = 2 * yymaxdepth;      
00650                         if (yymaxdepth == YYMAXDEPTH)   
00651                         {
00652                                 char *newyys = (char *)YYNEW(int);
00653                                 char *newyyv = (char *)YYNEW(YYSTYPE);
00654                                 if (newyys != 0 && newyyv != 0)
00655                                 {
00656                                         yys = YYCOPY(newyys, yys, int);
00657                                         yyv = YYCOPY(newyyv, yyv, YYSTYPE);
00658                                 }
00659                                 else
00660                                         yynewmax = 0;   
00661                         }
00662                         else                            
00663                         {
00664                                 yys = YYENLARGE(yys, int);
00665                                 yyv = YYENLARGE(yyv, YYSTYPE);
00666                                 if (yys == 0 || yyv == 0)
00667                                         yynewmax = 0;   
00668                         }
00669 #endif
00670                         if (yynewmax <= yymaxdepth)     
00671                         {
00672                                 yyerror( "yacc stack overflow" );
00673                                 YYABORT;
00674                         }
00675                         yymaxdepth = yynewmax;
00676 
00677                         yy_ps = yys + yyps_index;
00678                         yy_pv = yyv + yypv_index;
00679                         yypvt = yyv + yypvt_index;
00680                 }
00681                 *yy_ps = yy_state;
00682                 *++yy_pv = yyval;
00683 
00684                 
00685 
00686 
00687         yy_newstate:
00688                 if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
00689                         goto yydefault;         
00690 #if YYDEBUG
00691                 
00692 
00693 
00694                 yytmp = yychar < 0;
00695 #endif
00696                 if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) )
00697                         yychar = 0;             
00698 #if YYDEBUG
00699                 if ( yydebug && yytmp )
00700                 {
00701                         register int yy_i;
00702 
00703                         printf( "Received token " );
00704                         if ( yychar == 0 )
00705                                 printf( "end-of-file\n" );
00706                         else if ( yychar < 0 )
00707                                 printf( "-none-\n" );
00708                         else
00709                         {
00710                                 for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
00711                                         yy_i++ )
00712                                 {
00713                                         if ( yytoks[yy_i].t_val == yychar )
00714                                                 break;
00715                                 }
00716                                 printf( "%s\n", yytoks[yy_i].t_name );
00717                         }
00718                 }
00719 #endif 
00720                 if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
00721                         goto yydefault;
00722                 if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )  
00723                 {
00724                         yychar = -1;
00725                         yyval = yylval;
00726                         yy_state = yy_n;
00727                         if ( yyerrflag > 0 )
00728                                 yyerrflag--;
00729                         goto yy_stack;
00730                 }
00731 
00732         yydefault:
00733                 if ( ( yy_n = yydef[ yy_state ] ) == -2 )
00734                 {
00735 #if YYDEBUG
00736                         yytmp = yychar < 0;
00737 #endif
00738                         if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) )
00739                                 yychar = 0;             
00740 #if YYDEBUG
00741                         if ( yydebug && yytmp )
00742                         {
00743                                 register int yy_i;
00744 
00745                                 printf( "Received token " );
00746                                 if ( yychar == 0 )
00747                                         printf( "end-of-file\n" );
00748                                 else if ( yychar < 0 )
00749                                         printf( "-none-\n" );
00750                                 else
00751                                 {
00752                                         for ( yy_i = 0;
00753                                                 yytoks[yy_i].t_val >= 0;
00754                                                 yy_i++ )
00755                                         {
00756                                                 if ( yytoks[yy_i].t_val
00757                                                         == yychar )
00758                                                 {
00759                                                         break;
00760                                                 }
00761                                         }
00762                                         printf( "%s\n", yytoks[yy_i].t_name );
00763                                 }
00764                         }
00765 #endif 
00766                         
00767 
00768 
00769                         {
00770                                 register YYCONST int *yyxi = yyexca;
00771 
00772                                 while ( ( *yyxi != -1 ) ||
00773                                         ( yyxi[1] != yy_state ) )
00774                                 {
00775                                         yyxi += 2;
00776                                 }
00777                                 while ( ( *(yyxi += 2) >= 0 ) &&
00778                                         ( *yyxi != yychar ) )
00779                                         ;
00780                                 if ( ( yy_n = yyxi[1] ) < 0 )
00781                                         YYACCEPT;
00782                         }
00783                 }
00784 
00785                 
00786 
00787 
00788                 if ( yy_n == 0 )        
00789                 {
00790                         
00791                         switch ( yyerrflag )
00792                         {
00793                         case 0:         
00794                                 yyerror( "syntax error" );
00795                                 goto skip_init;
00796                         yyerrlab:
00797                                 
00798 
00799 
00800 
00801                                 yy_pv = yypv;
00802                                 yy_ps = yyps;
00803                                 yy_state = yystate;
00804                         skip_init:
00805                                 yynerrs++;
00806                                 
00807                         case 1:
00808                         case 2:         
00809                                         
00810                                 yyerrflag = 3;
00811                                 
00812 
00813 
00814 
00815                                 while ( yy_ps >= yys )
00816                                 {
00817                                         yy_n = yypact[ *yy_ps ] + YYERRCODE;
00818                                         if ( yy_n >= 0 && yy_n < YYLAST &&
00819                                                 yychk[yyact[yy_n]] == YYERRCODE)                                        {
00820                                                 
00821 
00822 
00823                                                 yy_state = yyact[ yy_n ];
00824                                                 goto yy_stack;
00825                                         }
00826                                         
00827 
00828 
00829 
00830 #if YYDEBUG
00831 #       define _POP_ "Error recovery pops state %d, uncovers state %d\n"
00832                                         if ( yydebug )
00833                                                 printf( _POP_, *yy_ps,
00834                                                         yy_ps[-1] );
00835 #       undef _POP_
00836 #endif
00837                                         yy_ps--;
00838                                         yy_pv--;
00839                                 }
00840                                 
00841 
00842 
00843 
00844                                 YYABORT;
00845                         case 3:         
00846 #if YYDEBUG
00847                                 
00848 
00849 
00850 
00851 
00852 
00853 
00854                                 if ( yydebug )
00855                                 {
00856                                         register int yy_i;
00857 
00858                                         printf( "Error recovery discards " );
00859                                         if ( yychar == 0 )
00860                                                 printf( "token end-of-file\n" );
00861                                         else if ( yychar < 0 )
00862                                                 printf( "token -none-\n" );
00863                                         else
00864                                         {
00865                                                 for ( yy_i = 0;
00866                                                         yytoks[yy_i].t_val >= 0;
00867                                                         yy_i++ )
00868                                                 {
00869                                                         if ( yytoks[yy_i].t_val
00870                                                                 == yychar )
00871                                                         {
00872                                                                 break;
00873                                                         }
00874                                                 }
00875                                                 printf( "token %s\n",
00876                                                         yytoks[yy_i].t_name );
00877                                         }
00878                                 }
00879 #endif 
00880                                 if ( yychar == 0 )      
00881                                         YYABORT;
00882                                 yychar = -1;
00883                                 goto yy_newstate;
00884                         }
00885                 }
00886                 
00887 
00888 
00889 
00890 #if YYDEBUG
00891                 
00892 
00893 
00894 
00895 
00896                 if ( yydebug )
00897                         printf( "Reduce by (%d) \"%s\"\n",
00898                                 yy_n, yyreds[ yy_n ] );
00899 #endif
00900                 yytmp = yy_n;                   
00901                 yypvt = yy_pv;                  
00902                 
00903 
00904 
00905 
00906 
00907 
00908 
00909 
00910 
00911 
00912 
00913 
00914                 {
00915                         
00916                         register int yy_len = yyr2[ yy_n ];
00917 
00918                         if ( !( yy_len & 01 ) )
00919                         {
00920                                 yy_len >>= 1;
00921                                 yyval = ( yy_pv -= yy_len )[1]; 
00922                                 yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
00923                                         *( yy_ps -= yy_len ) + 1;
00924                                 if ( yy_state >= YYLAST ||
00925                                         yychk[ yy_state =
00926                                         yyact[ yy_state ] ] != -yy_n )
00927                                 {
00928                                         yy_state = yyact[ yypgo[ yy_n ] ];
00929                                 }
00930                                 goto yy_stack;
00931                         }
00932                         yy_len >>= 1;
00933                         yyval = ( yy_pv -= yy_len )[1]; 
00934                         yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
00935                                 *( yy_ps -= yy_len ) + 1;
00936                         if ( yy_state >= YYLAST ||
00937                                 yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
00938                         {
00939                                 yy_state = yyact[ yypgo[ yy_n ] ];
00940                         }
00941                 }
00942                                         
00943                 yystate = yy_state;
00944                 yyps = yy_ps;
00945                 yypv = yy_pv;
00946         }
00947         
00948 
00949 
00950         switch( yytmp )
00951         {
00952                 
00953 case 1:
00954 # line 76 "AtomParser.y"
00955 {
00956                                           atomparser_result =  NULL;
00957                                         } break;
00958 case 2:
00959 # line 79 "AtomParser.y"
00960 { 
00961                                           if (*atomparser_yystring != 0) {
00962     msgErr << "Selection terminated too early" << sendmsg;
00963     if (yypvt[-0].node) delete yypvt[-0].node;
00964     yypvt[-0].node = NULL;
00965                                           }
00966                                           atomparser_result = yypvt[-0].node;
00967                                         } break;
00968 case 3:
00969 # line 87 "AtomParser.y"
00970 { 
00971                                           atomparser_result = NULL;
00972 
00973                                         } break;
00974 case 4:
00975 # line 93 "AtomParser.y"
00976 { 
00977                                           yyval.node = yypvt[-1].node;
00978                                         } break;
00979 case 5:
00980 # line 96 "AtomParser.y"
00981 { yyval.node = new atomparser_node(NOT);
00982                                           yyval.node->left = yypvt[-0].node;
00983                                         } break;
00984 case 6:
00985 # line 99 "AtomParser.y"
00986 { yyval.node = yypvt[-0].node; } break;
00987 case 7:
00988 # line 100 "AtomParser.y"
00989 { yyval.node = new atomparser_node(AND);
00990                                           yyval.node->left = yypvt[-1].node;
00991                                           yyval.node->right = yypvt[-0].node;
00992                                         } break;
00993 case 8:
00994 # line 104 "AtomParser.y"
00995 { 
00996                                           yyval.node = new atomparser_node(AND);
00997                                           yyval.node->left = yypvt[-2].node;
00998                                           yyval.node->right = yypvt[-0].node;
00999                                         } break;
01000 case 9:
01001 # line 109 "AtomParser.y"
01002 { 
01003                                           yyval.node = new atomparser_node(OR);
01004                                           yyval.node->left = yypvt[-2].node;
01005                                           yyval.node->right = yypvt[-0].node;
01006                                         } break;
01007 case 10:
01008 # line 114 "AtomParser.y"
01009 { yyval.node = yypvt[-0].node; } break;
01010 case 11:
01011 # line 115 "AtomParser.y"
01012 { yyval.node = yypvt[-0].node; } break;
01013 case 12:
01014 # line 116 "AtomParser.y"
01015 { yyval.node = new atomparser_node(WITHIN);
01016                                           yyval.node->left = yypvt[-0].node;
01017                                           yyval.node->dval = yypvt[-2].dval;
01018                                         } break;
01019 case 13:
01020 # line 120 "AtomParser.y"
01021 { yyval.node = new atomparser_node(EXWITHIN);
01022                                           yyval.node->left = yypvt[-0].node;
01023                                           yyval.node->dval = yypvt[-2].dval;
01024                                         } break;
01025 case 14:
01026 # line 124 "AtomParser.y"
01027 { yyval.node = new atomparser_node(PBWITHIN);
01028                                           yyval.node->left = yypvt[-0].node;
01029                                           yyval.node->dval = yypvt[-2].dval;
01030                                         } break;
01031 case 15:
01032 # line 128 "AtomParser.y"
01033 { yyval.node = new atomparser_node(WITHINBONDS);
01034                                           yyval.node->left = yypvt[-0].node;
01035                                           yyval.node->ival = yypvt[-2].ival;
01036                                         } break;
01037 case 16:
01038 # line 132 "AtomParser.y"
01039 { yyval.node = new atomparser_node(NEAREST);
01040                                           yyval.node->left = yypvt[-0].node;
01041                                           yyval.node->ival = yypvt[-2].ival;
01042                                         } break;
01043 case 17:
01044 # line 136 "AtomParser.y"
01045 { yyval.node = new atomparser_node(MAXRINGSIZE);
01046                                           yyval.node->left = yypvt[-0].node;
01047                                           yyval.node->ival = yypvt[-2].ival;
01048                                         } break;
01049 case 18:
01050 # line 140 "AtomParser.y"
01051 { yyval.node = new atomparser_node(RINGSIZE);
01052                                           yyval.node->left = yypvt[-0].node;
01053                                           yyval.node->ival = yypvt[-2].ival;
01054                                         } break;
01055 case 19:
01056 # line 144 "AtomParser.y"
01057 { yyval.node = yypvt[-2].node;
01058                                           yyval.node->node_type = SAME;
01059                                           yyval.node->left = yypvt[-0].node;
01060                                         } break;
01061 case 20:
01062 # line 148 "AtomParser.y"
01063 {yyval.node = new atomparser_node(COMPARE);
01064                                           yyval.node -> ival = yypvt[-1].ival;
01065                                           yyval.node -> left = yypvt[-2].node;
01066                                           yyval.node -> right = yypvt[-0].node;
01067                                         } break;
01068 case 21:
01069 # line 155 "AtomParser.y"
01070 {
01071                                           yypvt[-1].node -> left = yypvt[-0].node;
01072                                           yypvt[-0].node -> right = NULL;
01073                                           yyval.node = yypvt[-1].node;
01074                                         } break;
01075 case 22:
01076 # line 162 "AtomParser.y"
01077 {  yypvt[-1].node -> left = yypvt[-0].node;
01078                                            yypvt[-0].node -> right = NULL;
01079                                            yyval.node = yypvt[-1].node;
01080                                         } break;
01081 case 23:
01082 # line 168 "AtomParser.y"
01083 { 
01084                                           yyval.node = yypvt[-0].node;
01085                                           
01086                                         } break;
01087 case 24:
01088 # line 172 "AtomParser.y"
01089 { yyval.node = new atomparser_node(STRWORD);
01090                                           
01091                                           char s[100];
01092                                           sprintf(s, "%ld", (long) yypvt[-0].ival);
01093                                           yyval.node -> sele.s = s;
01094                                           yyval.node -> sele.st = RAW_STRING;
01095                                         } break;
01096 case 25:
01097 # line 179 "AtomParser.y"
01098 { yyval.node = new atomparser_node(STRWORD);
01099                                           char s[100];
01100                                           sprintf(s, "%f", (double) yypvt[-0].dval);
01101                                           yyval.node -> sele.s = s;
01102                                           yyval.node -> sele.st = RAW_STRING;
01103                                         } break;
01104 case 26:
01105 # line 187 "AtomParser.y"
01106 { 
01107                                           yypvt[-0].node -> right = yypvt[-0].node;
01108                                           yyval.node = yypvt[-0].node; 
01109                                         } break;
01110 case 27:
01111 # line 191 "AtomParser.y"
01112 { yypvt[-2].node -> right = yypvt[-0].node;
01113                                           yypvt[-2].node -> left = yypvt[-0].node;
01114                                           yypvt[-2].node -> extra_type = 1;
01115                                           yyval.node = yypvt[-2].node;
01116                                           
01117                                         } break;
01118 case 28:
01119 # line 200 "AtomParser.y"
01120 { yyval.node = yypvt[-0].node; } break;
01121 case 29:
01122 # line 201 "AtomParser.y"
01123 { 
01124                
01125                
01126                                           yypvt[-1].node -> right -> left = yypvt[-0].node;
01127                                           yypvt[-1].node -> right = yypvt[-0].node -> right;
01128                                           yypvt[-0].node -> right = NULL;
01129                                           
01130                                           yyval.node = yypvt[-1].node;
01131                                        } break;
01132 case 30:
01133 # line 212 "AtomParser.y"
01134 { yyval.dval = yypvt[-0].dval;
01135                                         } break;
01136 case 31:
01137 # line 214 "AtomParser.y"
01138 { yyval.dval = (double) yypvt[-0].ival; 
01139                                           
01140                                         } break;
01141 case 32:
01142 # line 219 "AtomParser.y"
01143 { yyval.node = new atomparser_node(FLOATVAL);
01144                                           yyval.node->dval = yypvt[-0].dval; 
01145                                         } break;
01146 case 33:
01147 # line 222 "AtomParser.y"
01148 { yyval.node = new atomparser_node(INTVAL);
01149                                           yyval.node->ival = yypvt[-0].ival; 
01150                                         } break;
01151 case 34:
01152 # line 225 "AtomParser.y"
01153 { yyval.node = yypvt[-0].node; 
01154                                         } break;
01155 case 35:
01156 # line 227 "AtomParser.y"
01157 { yyval.node = yypvt[-1].node; } break;
01158 case 36:
01159 # line 228 "AtomParser.y"
01160 { yyval.node = new atomparser_node(ADD);
01161                                           yyval.node->left = yypvt[-2].node;
01162                                           yyval.node->right = yypvt[-0].node;
01163                                         } break;
01164 case 37:
01165 # line 232 "AtomParser.y"
01166 { yyval.node = new atomparser_node(SUB);
01167                                           yyval.node->left = yypvt[-2].node;
01168                                           yyval.node->right = yypvt[-0].node;
01169                                         } break;
01170 case 38:
01171 # line 236 "AtomParser.y"
01172 { yyval.node = new atomparser_node(UMINUS);
01173                                           yyval.node->left = yypvt[-0].node;
01174                                         } break;
01175 case 39:
01176 # line 239 "AtomParser.y"
01177 { yyval.node = yypvt[-0].node;
01178                                         } break;
01179 case 40:
01180 # line 241 "AtomParser.y"
01181 { yyval.node = new atomparser_node(MOD);
01182                                           yyval.node->left = yypvt[-2].node;
01183                                           yyval.node->right = yypvt[-0].node;
01184                                         } break;
01185 case 41:
01186 # line 245 "AtomParser.y"
01187 { yyval.node = new atomparser_node(EXP);
01188                                           yyval.node->left = yypvt[-2].node;
01189                                           yyval.node->right = yypvt[-0].node;
01190                                         } break;
01191 case 42:
01192 # line 249 "AtomParser.y"
01193 { yyval.node = new atomparser_node(MULT);
01194                                           yyval.node->left = yypvt[-2].node;
01195                                           yyval.node->right = yypvt[-0].node;
01196                                         } break;
01197 case 43:
01198 # line 253 "AtomParser.y"
01199 { yyval.node = new atomparser_node(DIV);
01200                                           yyval.node->left = yypvt[-2].node;
01201                                           yyval.node->right = yypvt[-0].node;
01202                                         } break;
01203 case 44:
01204 # line 257 "AtomParser.y"
01205 { yyval.node = yypvt[-0].node; } break;
01206 case 45:
01207 # line 258 "AtomParser.y"
01208 { yypvt[-3].node->left = yypvt[-1].node;
01209                                           yyval.node = yypvt[-3].node;
01210                                         } break;
01211 case 46:
01212 # line 263 "AtomParser.y"
01213 { yyval.ival = NLT; } break;
01214 case 47:
01215 # line 264 "AtomParser.y"
01216 { yyval.ival = NLE; } break;
01217 case 48:
01218 # line 265 "AtomParser.y"
01219 { yyval.ival = NEQ; } break;
01220 case 49:
01221 # line 266 "AtomParser.y"
01222 { yyval.ival = NGE; } break;
01223 case 50:
01224 # line 267 "AtomParser.y"
01225 { yyval.ival = NGT; } break;
01226 case 51:
01227 # line 268 "AtomParser.y"
01228 { yyval.ival = NNE; } break;
01229 case 52:
01230 # line 269 "AtomParser.y"
01231 { yyval.ival = SLT; } break;
01232 case 53:
01233 # line 270 "AtomParser.y"
01234 { yyval.ival = SLE; } break;
01235 case 54:
01236 # line 271 "AtomParser.y"
01237 { yyval.ival = SEQ; } break;
01238 case 55:
01239 # line 272 "AtomParser.y"
01240 { yyval.ival = SGE; } break;
01241 case 56:
01242 # line 273 "AtomParser.y"
01243 { yyval.ival = SGT; } break;
01244 case 57:
01245 # line 274 "AtomParser.y"
01246 { yyval.ival = SNE; } break;
01247 case 58:
01248 # line 275 "AtomParser.y"
01249 { yyval.ival = MATCH; } break;
01250 # line  531 "/usr/ccs/bin/yaccpar"
01251         }
01252         goto yystack;           
01253 }
01254