Main Page Namespace List Class Hierarchy Alphabetical List Compound List File List Namespace Members Compound Members File Members Related Pages

AtomParser.C

Go to the documentation of this file.
00001 
00002 # line 2 "AtomParser.y"
00003 /***************************************************************************
00004 *cr 
00005 *cr (C) Copyright 1995-2019 The Board of Trustees of the 
00006 *cr University of Illinois 
00007 *cr All Rights Reserved 
00008 *cr 
00009 ***************************************************************************/
00010 
00011 /***************************************************************************
00012 * RCS INFORMATION:
00013 *
00014 * $RCSfile: AtomParser.C,v $
00015 * $Author: johns $ $Locker: $ $State: Exp $
00016 * $Revision: 1.28 $ $Date: 2019年01月17日 21:20:58 $
00017 *
00018 ***************************************************************************
00019 * DESCRIPTION:
00020 * a parser for atom selections
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 //#ifdef __STDC__
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 /* user does initial allocation */
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 // everything comes from a string, so there is no way to
00170 // reset "yyin" (or whatever) to the next input
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 /* don't allow debugging */
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 /* ends search */
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 /* YYDEBUG */
00422 # line 1 "/usr/ccs/bin/yaccpar"
00423 /*
00424 * Copyright (c) 1993 by Sun Microsystems, Inc.
00425 */
00426 
00427 #pragma ident "@(#)yaccpar 6.16 99/01/20 SMI"
00428 
00429 /*
00430 ** Skeleton parser driver for yacc output
00431 */
00432 
00433 /*
00434 ** yacc user known macros and defines
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 /* make debugging available */
00459 #endif
00460 
00461 /*
00462 ** user known globals
00463 */
00464 int yydebug; /* set to 1 to get debugging */
00465 
00466 /*
00467 ** driver internal defines
00468 */
00469 #define YYFLAG (-10000000)
00470 
00471 /*
00472 ** global variables used by the parser
00473 */
00474 YYSTYPE *yypv; /* top of value stack */
00475 int *yyps; /* top of state stack */
00476 
00477 int yystate; /* current state */
00478 int yytmp; /* extra var (lasts between blocks) */
00479 
00480 int yynerrs; /* number of errors */
00481 int yyerrflag; /* error recovery flag */
00482 int yychar; /* current input token number */
00483 
00484 
00485 
00486 #ifdef YYNMBCHARS
00487 #define YYLEX() yycvtok(yylex())
00488 /*
00489 ** yycvtok - return a token if i is a wchar_t value that exceeds 255.
00490 ** If i<255, i itself is the token. If i>255 but the neither 
00491 ** of the 30th or 31st bit is on, i is already a token.
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){/*Must convert to a token. */
00505 if( yymbchars[last].character < i ){
00506 return i;/*Giving up*/
00507 }
00508 while ((last>=first)&&(first>=0)) {/*Binary search loop*/
00509 mid = (first+last)/2;
00510 j = yymbchars[mid].character;
00511 if( j==i ){/*Found*/ 
00512 return yymbchars[mid].tvalue;
00513 }else if( j<i ){
00514 first = mid + 1;
00515 }else{
00516 last = mid -1;
00517 }
00518 }
00519 /*No entry in the table.*/
00520 return i;/* Giving up.*/
00521 }else{/* i is already a token. */
00522 return i;
00523 }
00524 }
00525 #else
00526 #define YYLEX() yylex()
00527 #endif
00529 /*
00530 ** yyparse - return 0 if worked, 1 if syntax error not recovered from
00531 */
00532 #if defined(__STDC__) || defined(__cplusplus)
00533 int yyparse(void)
00534 #else
00535 int yyparse()
00536 #endif
00537 {
00538 register YYSTYPE *yypvt = 0; /* top of value stack for $vars */
00539 
00540 #if defined(__cplusplus) || defined(lint)
00541 /*
00542 hacks to please C++ and lint - goto's inside
00543 switch should never be executed
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 ** Initialize externals - yyparse may be called more than once
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; /* top of value stack */
00577 register int *yy_ps; /* top of state stack */
00578 register int yy_state; /* current state */
00579 register int yy_n; /* internal state number info */
00580 goto yystack; /* moved from 6 lines above to here to please C++ */
00581 
00582 /*
00583 ** get globals into registers.
00584 ** branch to here only if YYBACKUP was called.
00585 */
00586 yynewstate:
00587 yy_pv = yypv;
00588 yy_ps = yyps;
00589 yy_state = yystate;
00590 goto yy_newstate;
00591 
00592 /*
00593 ** get globals into registers.
00594 ** either we just started, or we just finished a reduction
00595 */
00596 yystack:
00597 yy_pv = yypv;
00598 yy_ps = yyps;
00599 yy_state = yystate;
00600 
00601 /*
00602 ** top of for (;;) loop while no reductions done
00603 */
00604 yy_stack:
00605 /*
00606 ** put a state and value onto the stacks
00607 */
00608 #if YYDEBUG
00609 /*
00610 ** if debugging, look up token value in list of value vs.
00611 ** name pairs. 0 and negative (-1) are special values.
00612 ** Note: linear search is used since time is not a real
00613 ** consideration while debugging.
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 /* YYDEBUG */
00636 if ( ++yy_ps >= &yys[ yymaxdepth ] ) /* room on stack? */
00637 {
00638 /*
00639 ** reallocate and recover. Note that pointers
00640 ** have to be reset, or bad things will happen
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; /* double table size */
00650 if (yymaxdepth == YYMAXDEPTH) /* first time growth */
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; /* failed */
00661 }
00662 else /* not first time */
00663 {
00664 yys = YYENLARGE(yys, int);
00665 yyv = YYENLARGE(yyv, YYSTYPE);
00666 if (yys == 0 || yyv == 0)
00667 yynewmax = 0; /* failed */
00668 }
00669 #endif
00670 if (yynewmax <= yymaxdepth) /* tables not expanded */
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 ** we have a new state - find out what to do
00686 */
00687 yy_newstate:
00688 if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
00689 goto yydefault; /* simple state */
00690 #if YYDEBUG
00691 /*
00692 ** if debugging, need to mark whether new token grabbed
00693 */
00694 yytmp = yychar < 0;
00695 #endif
00696 if ( ( yychar < 0 ) && ( ( yychar = YYLEX() ) < 0 ) )
00697 yychar = 0; /* reached EOF */
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 /* YYDEBUG */
00720 if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
00721 goto yydefault;
00722 if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar ) /*valid shift*/
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; /* reached EOF */
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 /* YYDEBUG */
00766 /*
00767 ** look through exception table
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 ** check for syntax error
00787 */
00788 if ( yy_n == 0 ) /* have an error */
00789 {
00790 /* no worry about speed here! */
00791 switch ( yyerrflag )
00792 {
00793 case 0: /* new error */
00794 yyerror( "syntax error" );
00795 goto skip_init;
00796 yyerrlab:
00797 /*
00798 ** get globals into registers.
00799 ** we have a user generated syntax type error
00800 */
00801 yy_pv = yypv;
00802 yy_ps = yyps;
00803 yy_state = yystate;
00804 skip_init:
00805 yynerrs++;
00806 /* FALLTHRU */
00807 case 1:
00808 case 2: /* incompletely recovered error */
00809 /* try again... */
00810 yyerrflag = 3;
00811 /*
00812 ** find state where "error" is a legal
00813 ** shift action
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 ** simulate shift of "error"
00822 */
00823 yy_state = yyact[ yy_n ];
00824 goto yy_stack;
00825 }
00826 /*
00827 ** current state has no shift on
00828 ** "error", pop stack
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 ** there is no state on stack with "error" as
00842 ** a valid shift. give up.
00843 */
00844 YYABORT;
00845 case 3: /* no shift yet; eat a token */
00846 #if YYDEBUG
00847 /*
00848 ** if debugging, look up token in list of
00849 ** pairs. 0 and negative shouldn't occur,
00850 ** but since timing doesn't matter when
00851 ** debugging, it doesn't hurt to leave the
00852 ** tests here.
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 /* YYDEBUG */
00880 if ( yychar == 0 ) /* reached EOF. quit */
00881 YYABORT;
00882 yychar = -1;
00883 goto yy_newstate;
00884 }
00885 }/* end if ( yy_n == 0 ) */
00886 /*
00887 ** reduction by production yy_n
00888 ** put stack tops, etc. so things right after switch
00889 */
00890 #if YYDEBUG
00891 /*
00892 ** if debugging, print the string that is the user's
00893 ** specification of the reduction which is just about
00894 ** to be done.
00895 */
00896 if ( yydebug )
00897 printf( "Reduce by (%d) \"%s\"\n",
00898 yy_n, yyreds[ yy_n ] );
00899 #endif
00900 yytmp = yy_n; /* value to switch over */
00901 yypvt = yy_pv; /* $vars top of value stack */
00902 /*
00903 ** Look in goto table for next state
00904 ** Sorry about using yy_state here as temporary
00905 ** register variable, but why not, if it works...
00906 ** If yyr2[ yy_n ] doesn't have the low order bit
00907 ** set, then there is no action to be done for
00908 ** this reduction. So, no saving & unsaving of
00909 ** registers done. The only difference between the
00910 ** code just after the if and the body of the if is
00911 ** the goto yy_stack in the body. This way the test
00912 ** can be made before the choice of what to do is needed.
00913 */
00914 {
00915 /* length of production doubled with extra bit */
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]; /* $$ = 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]; /* $$ = 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 /* save until reenter driver code */
00943 yystate = yy_state;
00944 yyps = yy_ps;
00945 yypv = yy_pv;
00946 }
00947 /*
00948 ** code supplied by user is placed in this switch
00949 */
00950 switch( yytmp )
00951 {
00952 
00953 case 1:
00954 # line 76 "AtomParser.y"
00955 {// printf("Blank line.\n");
00956 atomparser_result = NULL;
00957 } break;
00958 case 2:
00959 # line 79 "AtomParser.y"
00960 { //printf("Parsed a line\n");
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 { //printf("Error occured\n");
00971 atomparser_result = NULL;
00972 // yyerrok;
00973 } break;
00974 case 4:
00975 # line 93 "AtomParser.y"
00976 { // printf("Parens\n");
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 { //printf("AND\n");
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 { //printf("OR\n");
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 //printf("Single\n");
01086 } break;
01087 case 24:
01088 # line 172 "AtomParser.y"
01089 { yyval.node = new atomparser_node(STRWORD);
01090 //printf("converted int\n");
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 //printf("Using through\n");
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 { /* copy the new word on the list */
01124 /* like a linked list, with head's right pointed to the end */
01125 /* element and head's left pointed to the second element */
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 // printf("Returning\n");
01130 yyval.node = yypvt[-1].node;
01131 } break;
01132 case 30:
01133 # line 212 "AtomParser.y"
01134 { yyval.dval = yypvt[-0].dval;// printf("## %lf\n", yyval.dval);
01135 } break;
01136 case 31:
01137 # line 214 "AtomParser.y"
01138 { yyval.dval = (double) yypvt[-0].ival; 
01139 // printf("# %lf\n", yyval.dval);
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; /* reset registers in driver code */
01253 }
01254 

Generated on Mon Nov 17 02:45:29 2025 for VMD (current) by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002

AltStyle によって変換されたページ (->オリジナル) /