Ethereal-dev: [Ethereal-dev] compile error epan/dfilter/grammar.c
Note: This archive is from the project's previous web site, ethereal.com. This list is no longer active.
From: Thomas Anders <thomas.anders@xxxxxxxxxxxxx>
Date: Mon, 26 Jul 2004 18:45:41 +0200
Compiling latest nightly build on SuSE Linux 9.0 gives an error in epan/dfilter/grammar.c:gcc -DHAVE_CONFIG_H -I. -I. -I../.. -I./../.. -I./.. -I./../../tools/lemon -I/bosch/include -g -O2 -Dlinux -I/bosch/openssl/include -I. -I/bosch/net-snmp-5.0.9/include -I/bosch/heimdal/include -DINET6 "-D_U_=__attribute__((unused))" -Wall -W -I/bosch/include -pthread -I/opt/gnome/include/gtk-2.0 -I/opt/gnome/lib/gtk-2.0/include -I/opt/gnome/include/atk-1.0 -I/opt/gnome/include/pango-1.0 -I/usr/X11R6/include -I/usr/include/freetype2 -I/opt/gnome/include/glib-2.0 -I/opt/gnome/lib/glib-2.0/include -g -O2 -Dlinux -I/bosch/openssl/include -I. -I/bosch/net-snmp-5.0.9/include -I/bosch/heimdal/include -MT grammar.lo -MD -MP -MF .deps/grammar.Tpo -c grammar.c -fPIC -DPIC -o .libs/grammar.o
grammar.c: In function `yy_reduce': grammar.c:1035: too many arguments to function `yy_accept' grammar.c: At top level: grammar.c:1124: conflicting types for `yy_accept' grammar.c:732: previous declaration of `yy_accept' make[3]: *** [grammar.lo] Fehler 1 make[3]: Leaving directory `/bosch/src/ethereal-2004-07-25/epan/dfilter' Has anyone else seen this before? I attached grammar.c for your convenience. +Thomas -- Thomas Anders (thomas.anders at blue-cable.de)
/* Driver template for the LEMON parser generator. ** Copyright 1991-1995 by D. Richard Hipp. ** ** This library is free software; you can redistribute it and/or ** modify it under the terms of the GNU Library General Public ** License as published by the Free Software Foundation; either ** version 2 of the License, or (at your option) any later version. ** ** This library is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ** Library General Public License for more details. ** ** You should have received a copy of the GNU Library General Public ** License along with this library; if not, write to the ** Free Software Foundation, Inc., 59 Temple Place - Suite 330, ** Boston, MA 02111-1307, USA. ** ** Modified 1997 to make it suitable for use with makeheaders. */ /* First off, code is include which follows the "include" declaration ** in the input file. */ #include <stdio.h> #line 3 "./grammar.lemon" #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "dfilter-int.h" #include "syntax-tree.h" #include "sttype-range.h" #include "sttype-test.h" #include "drange.h" /* End of C code */ #line 39 "grammar.c" /* Next is all token values, in a form suitable for use by makeheaders. ** This section will be null unless lemon is run with the -m switch. */ /* ** These constants (all generated automatically by the parser generator) ** specify the various kinds of tokens (terminals) that the parser ** understands. ** ** Each symbol here is a terminal symbol in the grammar. */ /* Make sure the INTERFACE macro is defined. */ #ifndef INTERFACE # define INTERFACE 1 #endif /* The next thing included is series of defines which control ** various aspects of the generated parser. ** YYCODETYPE is the data type used for storing terminal ** and nonterminal numbers. "unsigned char" is ** used if there are fewer than 250 terminals ** and nonterminals. "int" is used otherwise. ** YYNOCODE is a number of type YYCODETYPE which corresponds ** to no legal terminal or nonterminal number. This ** number is used to fill in empty slots of the hash ** table. ** YYACTIONTYPE is the data type used for storing terminal ** and nonterminal numbers. "unsigned char" is ** used if there are fewer than 250 rules and ** states combined. "int" is used otherwise. ** DfilterTOKENTYPE is the data type used for minor tokens given ** directly to the parser from the tokenizer. ** YYMINORTYPE is the data type used for all minor tokens. ** This is typically a union of many types, one of ** which is DfilterTOKENTYPE. The entry in the union ** for base tokens is called "yy0". ** YYSTACKDEPTH is the maximum depth of the parser's stack. ** DfilterARGDECL is a declaration of a 3rd argument to the ** parser, or null if there is no extra argument. ** DfilterKRARGDECL A version of DfilterARGDECL for K&R C. ** DfilterANSIARGDECL A version of DfilterARGDECL for ANSI C. ** YYNSTATE the combined number of states. ** YYNRULE the number of rules in the grammar ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. */ /* */ #define YYCODETYPE unsigned char #define YYNOCODE 35 #define YYACTIONTYPE unsigned char #define DfilterTOKENTYPE stnode_t* typedef union { DfilterTOKENTYPE yy0; drange_node* yy25; GSList* yy26; test_op_t yy42; stnode_t* yy51; int yy69; } YYMINORTYPE; #define YYSTACKDEPTH 100 #define DfilterARGDECL ,dfw #define DfilterXARGDECL dfwork_t *dfw; #define DfilterANSIARGDECL ,dfwork_t *dfw #define YYNSTATE 42 #define YYNRULE 31 #define YYERRORSYMBOL 27 #define YYERRSYMDT yy69 #define YY_NO_ACTION (YYNSTATE+YYNRULE+2) #define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) #define YY_ERROR_ACTION (YYNSTATE+YYNRULE) /* Next is the action table. Each entry in this table contains ** ** + An integer which is the number representing the look-ahead ** token ** ** + An integer indicating what action to take. Number (N) between ** 0 and YYNSTATE-1 mean shift the look-ahead and go to state N. ** Numbers between YYNSTATE and YYNSTATE+YYNRULE-1 mean reduce by ** rule N-YYNSTATE. Number YYNSTATE+YYNRULE means that a syntax ** error has occurred. Number YYNSTATE+YYNRULE+1 means the parser ** accepts its input. ** ** + A pointer to the next entry with the same hash value. ** ** The action table is really a series of hash tables. Each hash ** table contains a number of entries which is a power of two. The ** "state" table (which follows) contains information about the starting ** point and size of each hash table. */ struct yyActionEntry { YYCODETYPE lookahead; /* The value of the look-ahead token */ YYACTIONTYPE action; /* Action to take for this look-ahead */ struct yyActionEntry *next; /* Next look-ahead with the same hash, or NULL */ }; static struct yyActionEntry yyActionTable[] = { /* State 0 */ { 32, 3, &yyActionTable[ 2] }, /* relation_test shift 3 */ { 33, 74, 0 }, /* sentence accept */ { 0, 43, 0 }, /* $ reduce 1 */ { 3, 14, 0 }, /* FIELD shift 14 */ { 7, 5, 0 }, /* LPAREN shift 5 */ { 21, 10, 0 }, /* TEST_NOT shift 10 */ { 10, 28, 0 }, /* STRING shift 28 */ { 23, 29, &yyActionTable[ 4] }, /* UNPARSED shift 29 */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ { 26, 12, &yyActionTable[ 6] }, /* entity shift 12 */ {YYNOCODE,0,0}, /* Unused */ { 28, 1, 0 }, /* expr shift 1 */ { 29, 4, 0 }, /* logical_test shift 4 */ { 30, 30, 0 }, /* range shift 30 */ {YYNOCODE,0,0}, /* Unused */ /* State 1 */ { 0, 42, 0 }, /* $ reduce 0 */ {YYNOCODE,0,0}, /* Unused */ { 22, 8, 0 }, /* TEST_OR shift 8 */ { 11, 2, 0 }, /* TEST_AND shift 2 */ /* State 2 */ { 32, 3, 0 }, /* relation_test shift 3 */ { 7, 5, 0 }, /* LPAREN shift 5 */ { 10, 28, 0 }, /* STRING shift 28 */ { 3, 14, 0 }, /* FIELD shift 14 */ {YYNOCODE,0,0}, /* Unused */ { 21, 10, 0 }, /* TEST_NOT shift 10 */ {YYNOCODE,0,0}, /* Unused */ { 23, 29, &yyActionTable[ 21] }, /* UNPARSED shift 29 */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ { 26, 12, &yyActionTable[ 22] }, /* entity shift 12 */ {YYNOCODE,0,0}, /* Unused */ { 28, 41, 0 }, /* expr shift 41 */ { 29, 4, 0 }, /* logical_test shift 4 */ { 30, 30, 0 }, /* range shift 30 */ {YYNOCODE,0,0}, /* Unused */ /* State 3 */ {YYNOCODE,0,0}, /* Unused */ /* State 4 */ {YYNOCODE,0,0}, /* Unused */ /* State 5 */ { 32, 3, 0 }, /* relation_test shift 3 */ { 7, 5, 0 }, /* LPAREN shift 5 */ { 10, 28, 0 }, /* STRING shift 28 */ { 3, 14, 0 }, /* FIELD shift 14 */ {YYNOCODE,0,0}, /* Unused */ { 21, 10, 0 }, /* TEST_NOT shift 10 */ {YYNOCODE,0,0}, /* Unused */ { 23, 29, &yyActionTable[ 39] }, /* UNPARSED shift 29 */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ { 26, 12, &yyActionTable[ 40] }, /* entity shift 12 */ {YYNOCODE,0,0}, /* Unused */ { 28, 6, 0 }, /* expr shift 6 */ { 29, 4, 0 }, /* logical_test shift 4 */ { 30, 30, 0 }, /* range shift 30 */ {YYNOCODE,0,0}, /* Unused */ /* State 6 */ {YYNOCODE,0,0}, /* Unused */ { 9, 7, 0 }, /* RPAREN shift 7 */ { 22, 8, 0 }, /* TEST_OR shift 8 */ { 11, 2, 0 }, /* TEST_AND shift 2 */ /* State 7 */ {YYNOCODE,0,0}, /* Unused */ /* State 8 */ { 32, 3, 0 }, /* relation_test shift 3 */ { 7, 5, 0 }, /* LPAREN shift 5 */ { 10, 28, 0 }, /* STRING shift 28 */ { 3, 14, 0 }, /* FIELD shift 14 */ {YYNOCODE,0,0}, /* Unused */ { 21, 10, 0 }, /* TEST_NOT shift 10 */ {YYNOCODE,0,0}, /* Unused */ { 23, 29, &yyActionTable[ 60] }, /* UNPARSED shift 29 */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ { 26, 12, &yyActionTable[ 61] }, /* entity shift 12 */ {YYNOCODE,0,0}, /* Unused */ { 28, 9, 0 }, /* expr shift 9 */ { 29, 4, 0 }, /* logical_test shift 4 */ { 30, 30, 0 }, /* range shift 30 */ {YYNOCODE,0,0}, /* Unused */ /* State 9 */ {YYNOCODE,0,0}, /* Unused */ /* State 10 */ { 32, 3, 0 }, /* relation_test shift 3 */ { 7, 5, 0 }, /* LPAREN shift 5 */ { 10, 28, 0 }, /* STRING shift 28 */ { 3, 14, 0 }, /* FIELD shift 14 */ {YYNOCODE,0,0}, /* Unused */ { 21, 10, 0 }, /* TEST_NOT shift 10 */ {YYNOCODE,0,0}, /* Unused */ { 23, 29, &yyActionTable[ 77] }, /* UNPARSED shift 29 */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ { 26, 12, &yyActionTable[ 78] }, /* entity shift 12 */ {YYNOCODE,0,0}, /* Unused */ { 28, 11, 0 }, /* expr shift 11 */ { 29, 4, 0 }, /* logical_test shift 4 */ { 30, 30, 0 }, /* range shift 30 */ {YYNOCODE,0,0}, /* Unused */ /* State 11 */ {YYNOCODE,0,0}, /* Unused */ /* State 12 */ { 16, 34, 0 }, /* TEST_GT shift 34 */ { 17, 37, 0 }, /* TEST_LE shift 37 */ { 18, 36, 0 }, /* TEST_LT shift 36 */ { 19, 40, 0 }, /* TEST_MATCHES shift 40 */ { 20, 33, 0 }, /* TEST_NE shift 33 */ { 15, 35, 0 }, /* TEST_GE shift 35 */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ { 12, 38, 0 }, /* TEST_BITWISE_AND shift 38 */ { 13, 39, 0 }, /* TEST_CONTAINS shift 39 */ { 14, 32, 0 }, /* TEST_EQ shift 32 */ { 31, 13, &yyActionTable[ 98] }, /* rel_op2 shift 13 */ /* State 13 */ { 10, 28, 0 }, /* STRING shift 28 */ {YYNOCODE,0,0}, /* Unused */ { 26, 31, &yyActionTable[ 109] }, /* entity shift 31 */ { 3, 14, 0 }, /* FIELD shift 14 */ {YYNOCODE,0,0}, /* Unused */ {YYNOCODE,0,0}, /* Unused */ { 30, 30, 0 }, /* range shift 30 */ { 23, 29, 0 }, /* UNPARSED shift 29 */ /* State 14 */ { 6, 15, 0 }, /* LBRACKET shift 15 */ /* State 15 */ { 24, 27, 0 }, /* drnode shift 27 */ { 25, 16, &yyActionTable[ 120] }, /* drnode_list shift 16 */ { 5, 20, &yyActionTable[ 121] }, /* INTEGER shift 20 */ { 1, 25, 0 }, /* COLON shift 25 */ /* State 16 */ { 8, 17, &yyActionTable[ 123] }, /* RBRACKET shift 17 */ { 2, 18, 0 }, /* COMMA shift 18 */ /* State 17 */ {YYNOCODE,0,0}, /* Unused */ /* State 18 */ { 24, 19, 0 }, /* drnode shift 19 */ { 5, 20, &yyActionTable[ 127] }, /* INTEGER shift 20 */ { 1, 25, 0 }, /* COLON shift 25 */ {YYNOCODE,0,0}, /* Unused */ /* State 19 */ {YYNOCODE,0,0}, /* Unused */ /* State 20 */ { 4, 23, 0 }, /* HYPHEN shift 23 */ { 1, 21, 0 }, /* COLON shift 21 */ /* State 21 */ { 5, 22, 0 }, /* INTEGER shift 22 */ /* State 22 */ {YYNOCODE,0,0}, /* Unused */ /* State 23 */ { 5, 24, 0 }, /* INTEGER shift 24 */ /* State 24 */ {YYNOCODE,0,0}, /* Unused */ /* State 25 */ { 5, 26, 0 }, /* INTEGER shift 26 */ /* State 26 */ {YYNOCODE,0,0}, /* Unused */ /* State 27 */ {YYNOCODE,0,0}, /* Unused */ /* State 28 */ {YYNOCODE,0,0}, /* Unused */ /* State 29 */ {YYNOCODE,0,0}, /* Unused */ /* State 30 */ {YYNOCODE,0,0}, /* Unused */ /* State 31 */ {YYNOCODE,0,0}, /* Unused */ /* State 32 */ {YYNOCODE,0,0}, /* Unused */ /* State 33 */ {YYNOCODE,0,0}, /* Unused */ /* State 34 */ {YYNOCODE,0,0}, /* Unused */ /* State 35 */ {YYNOCODE,0,0}, /* Unused */ /* State 36 */ {YYNOCODE,0,0}, /* Unused */ /* State 37 */ {YYNOCODE,0,0}, /* Unused */ /* State 38 */ {YYNOCODE,0,0}, /* Unused */ /* State 39 */ {YYNOCODE,0,0}, /* Unused */ /* State 40 */ {YYNOCODE,0,0}, /* Unused */ /* State 41 */ { 22, 8, 0 }, /* TEST_OR shift 8 */ }; /* The state table contains information needed to look up the correct ** action in the action table, given the current state of the parser. ** Information needed includes: ** ** + A pointer to the start of the action hash table in yyActionTable. ** ** + A mask used to hash the look-ahead token. The mask is an integer ** which is one less than the size of the hash table. ** ** + The default action. This is the action to take if no entry for ** the given look-ahead is found in the action hash table. */ struct yyStateEntry { struct yyActionEntry *hashtbl; /* Start of the hash table in yyActionTable */ int mask; /* Mask used for hashing the look-ahead */ YYACTIONTYPE actionDefault; /* Default action if look-ahead not found */ }; static struct yyStateEntry yyStateTable[] = { { &yyActionTable[0], 15, 73}, { &yyActionTable[16], 3, 73}, { &yyActionTable[20], 15, 73}, { &yyActionTable[36], 0, 44}, { &yyActionTable[37], 0, 45}, { &yyActionTable[38], 15, 73}, { &yyActionTable[54], 3, 73}, { &yyActionTable[58], 0, 46}, { &yyActionTable[59], 15, 73}, { &yyActionTable[75], 0, 48}, { &yyActionTable[76], 15, 73}, { &yyActionTable[92], 0, 49}, { &yyActionTable[93], 15, 50}, { &yyActionTable[109], 7, 73}, { &yyActionTable[117], 0, 51}, { &yyActionTable[118], 3, 73}, { &yyActionTable[122], 1, 73}, { &yyActionTable[124], 0, 55}, { &yyActionTable[125], 3, 73}, { &yyActionTable[129], 0, 57}, { &yyActionTable[130], 1, 62}, { &yyActionTable[132], 0, 61}, { &yyActionTable[133], 0, 58}, { &yyActionTable[134], 0, 73}, { &yyActionTable[135], 0, 59}, { &yyActionTable[136], 0, 73}, { &yyActionTable[137], 0, 60}, { &yyActionTable[138], 0, 56}, { &yyActionTable[139], 0, 52}, { &yyActionTable[140], 0, 53}, { &yyActionTable[141], 0, 54}, { &yyActionTable[142], 0, 63}, { &yyActionTable[143], 0, 64}, { &yyActionTable[144], 0, 65}, { &yyActionTable[145], 0, 66}, { &yyActionTable[146], 0, 67}, { &yyActionTable[147], 0, 68}, { &yyActionTable[148], 0, 69}, { &yyActionTable[149], 0, 70}, { &yyActionTable[150], 0, 71}, { &yyActionTable[151], 0, 72}, { &yyActionTable[152], 0, 47}, }; /* The following structure represents a single element of the ** parser's stack. Information stored includes: ** ** + The state number for the parser at this level of the stack. ** ** + The value of the token stored at this level of the stack. ** (In other words, the "major" token.) ** ** + The semantic value stored at this level of the stack. This is ** the information used by the action routines in the grammar. ** It is sometimes called the "minor" token. */ struct yyStackEntry { int stateno; /* The state-number */ int major; /* The major token value. This is the code ** number for the token at this stack level */ YYMINORTYPE minor; /* The user-supplied minor token value. This ** is the value of the token */ }; /* The state of the parser is completely contained in an instance of ** the following structure */ struct yyParser { int idx; /* Index of top element in stack */ int errcnt; /* Shifts left before out of the error */ struct yyStackEntry *top; /* Pointer to the top stack element */ struct yyStackEntry stack[YYSTACKDEPTH]; /* The parser's stack */ }; typedef struct yyParser yyParser; #ifndef NDEBUG #include <stdio.h> static FILE *yyTraceFILE = 0; static char *yyTracePrompt = 0; /* ** Turn parser tracing on by giving a stream to which to write the trace ** and a prompt to preface each trace message. Tracing is turned off ** by making either argument NULL ** ** Inputs: ** <ul> ** <li> A FILE* to which trace output should be written. ** If NULL, then tracing is turned off. ** <li> A prefix string written at the beginning of every ** line of trace output. If NULL, then tracing is ** turned off. ** </ul> ** ** Outputs: ** None. */ void DfilterTrace(FILE *TraceFILE, char *zTracePrompt){ yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if( yyTraceFILE==0 ) yyTracePrompt = 0; else if( yyTracePrompt==0 ) yyTraceFILE = 0; } /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static char *yyTokenName[] = { "$", "COLON", "COMMA", "FIELD", "HYPHEN", "INTEGER", "LBRACKET", "LPAREN", "RBRACKET", "RPAREN", "STRING", "TEST_AND", "TEST_BITWISE_AND", "TEST_CONTAINS", "TEST_EQ", "TEST_GE", "TEST_GT", "TEST_LE", "TEST_LT", "TEST_MATCHES", "TEST_NE", "TEST_NOT", "TEST_OR", "UNPARSED", "drnode", "drnode_list", "entity", "error", "expr", "logical_test", "range", "rel_op2", "relation_test", "sentence", }; #define YYTRACE(X) if( yyTraceFILE ) fprintf(yyTraceFILE,"%sReduce [%s].\n",yyTracePrompt,X); #else #define YYTRACE(X) #endif /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like ** malloc. ** ** Inputs: ** A pointer to the function used to allocate memory. ** ** Outputs: ** A pointer to a parser. This pointer is used in subsequent calls ** to Dfilter and DfilterFree. */ void *DfilterAlloc(void *(*mallocProc)(gulong)){ yyParser *pParser; pParser = (yyParser*)(*mallocProc)( sizeof(yyParser) ); if( pParser ){ pParser->idx = -1; } return pParser; } /* The following function deletes the value associated with a ** symbol. The symbol can be either a terminal or nonterminal. ** "yymajor" is the symbol code, and "yypminor" is a pointer to ** the value. */ static void yy_destructor(YYCODETYPE yymajor, YYMINORTYPE *yypminor){ switch( yymajor ){ /* Here is inserted the actions which take place when a ** terminal or non-terminal is destroyed. This can happen ** when the symbol is popped from the stack during a ** reduce or during error processing or when a parser is ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those ** which appear on the RHS of the rule, but which are not used ** inside the C code. */ case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 11: case 12: case 13: case 14: case 15: case 16: case 17: case 18: case 19: case 20: case 21: case 22: case 23: #line 24 "./grammar.lemon" {stnode_free((yypminor->yy0));} #line 532 "grammar.c" break; case 24: #line 47 "./grammar.lemon" {drange_node_free((yypminor->yy25));} #line 537 "grammar.c" break; case 25: #line 50 "./grammar.lemon" {drange_node_free_list((yypminor->yy26));} #line 542 "grammar.c" break; case 26: #line 33 "./grammar.lemon" {stnode_free((yypminor->yy51));} #line 547 "grammar.c" break; case 28: #line 30 "./grammar.lemon" {stnode_free((yypminor->yy51));} #line 552 "grammar.c" break; case 29: #line 39 "./grammar.lemon" {stnode_free((yypminor->yy51));} #line 557 "grammar.c" break; case 30: #line 44 "./grammar.lemon" {stnode_free((yypminor->yy51));} #line 562 "grammar.c" break; case 32: #line 36 "./grammar.lemon" {stnode_free((yypminor->yy51));} #line 567 "grammar.c" break; case 33: #line 27 "./grammar.lemon" {stnode_free((yypminor->yy51));} #line 572 "grammar.c" break; default: break; /* If no destructor action specified: do nothing */ } } /* ** Pop the parser's stack once. ** ** If there is a destructor routine associated with the token which ** is popped from the stack, then call it. ** ** Return the major token number for the symbol popped. */ static int yy_pop_parser_stack(yyParser *pParser){ YYCODETYPE yymajor; if( pParser->idx<0 ) return 0; #ifndef NDEBUG if( yyTraceFILE && pParser->idx>=0 ){ fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[pParser->top->major]); } #endif yymajor = pParser->top->major; yy_destructor( yymajor, &pParser->top->minor); pParser->idx--; pParser->top--; return yymajor; } /* ** Deallocate and destroy a parser. Destructors are all called for ** all stack elements before shutting the parser down. ** ** Inputs: ** <ul> ** <li> A pointer to the parser. This should be a pointer ** obtained from DfilterAlloc. ** <li> A pointer to a function used to reclaim memory obtained ** from malloc. ** </ul> */ void DfilterFree( void *p, /* The parser to be deleted */ void (*freeProc)(void *) /* Function used to reclaim memory */ ){ yyParser *pParser = (yyParser*)p; if( pParser==0 ) return; while( pParser->idx>=0 ) yy_pop_parser_stack(pParser); (*freeProc)(pParser); } /* ** Find the appropriate action for a parser given the look-ahead token. ** ** If the look-ahead token is YYNOCODE, then check to see if the action is ** independent of the look-ahead. If it is, return the action, otherwise ** return YY_NO_ACTION. */ static int yy_find_parser_action( yyParser *pParser, /* The parser */ int iLookAhead /* The look-ahead token */ ){ struct yyStateEntry *pState; /* Appropriate entry in the state table */ struct yyActionEntry *pAction; /* Action appropriate for the look-ahead */ /* if( pParser->idx<0 ) return YY_NO_ACTION; */ pState = &yyStateTable[pParser->top->stateno]; if( iLookAhead!=YYNOCODE ){ pAction = &pState->hashtbl[iLookAhead & pState->mask]; while( pAction ){ if( pAction->lookahead==iLookAhead ) return pAction->action; pAction = pAction->next; } }else if( pState->mask!=0 || pState->hashtbl->lookahead!=YYNOCODE ){ return YY_NO_ACTION; } return pState->actionDefault; } /* ** Perform a shift action. */ static void yy_shift( yyParser *yypParser, /* The parser to be shifted */ int yyNewState, /* The new state to shift in */ int yyMajor, /* The major token to shift in */ YYMINORTYPE *yypMinor /* Pointer ot the minor token to shift in */ ){ yypParser->idx++; yypParser->top++; if( yypParser->idx>=YYSTACKDEPTH ){ yypParser->idx--; yypParser->top--; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); } #endif while( yypParser->idx>=0 ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will execute if the parser ** stack every overflows */ return; } yypParser->top->stateno = yyNewState; yypParser->top->major = yyMajor; yypParser->top->minor = *yypMinor; #ifndef NDEBUG if( yyTraceFILE && yypParser->idx>0 ){ int i; fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState); fprintf(yyTraceFILE,"%sStack:",yyTracePrompt); for(i=1; i<=yypParser->idx; i++) fprintf(yyTraceFILE," %s",yyTokenName[yypParser->stack[i].major]); fprintf(yyTraceFILE,"\n"); } #endif } /* The following table contains information about every rule that ** is used during the reduce. */ static struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ unsigned char nrhs; /* Number of right-hand side symbols in the rule */ } yyRuleInfo[] = { { 33, 1 }, { 33, 0 }, { 28, 1 }, { 28, 1 }, { 28, 3 }, { 29, 3 }, { 29, 3 }, { 29, 2 }, { 29, 1 }, { 26, 1 }, { 26, 1 }, { 26, 1 }, { 26, 1 }, { 30, 4 }, { 25, 1 }, { 25, 3 }, { 24, 3 }, { 24, 3 }, { 24, 2 }, { 24, 2 }, { 24, 1 }, { 32, 3 }, { 31, 1 }, { 31, 1 }, { 31, 1 }, { 31, 1 }, { 31, 1 }, { 31, 1 }, { 31, 1 }, { 31, 1 }, { 31, 1 }, }; static void yy_accept(void); /* Forward declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. */ static void yy_reduce( yyParser *yypParser, /* The parser */ int yyruleno /* Number of the rule by which to reduce */ DfilterANSIARGDECL ){ int yygoto; /* The next state */ int yyact; /* The next action */ YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ struct yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ yymsp = yypParser->top; switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example ** follows: ** case 0: ** YYTRACE("<text of the rule>"); ** #line <lineno> <grammarfile> ** { ... } // User supplied code ** #line <lineno> <thisfile> ** break; */ case 0: YYTRACE("sentence ::= expr") #line 115 "./grammar.lemon" { dfw->st_root = yymsp[0].minor.yy51; } #line 764 "grammar.c" break; case 1: YYTRACE("sentence ::=") #line 116 "./grammar.lemon" { dfw->st_root = NULL; } #line 770 "grammar.c" break; case 2: YYTRACE("expr ::= relation_test") #line 118 "./grammar.lemon" { yygotominor.yy51 = yymsp[0].minor.yy51; } #line 776 "grammar.c" break; case 3: YYTRACE("expr ::= logical_test") #line 119 "./grammar.lemon" { yygotominor.yy51 = yymsp[0].minor.yy51; } #line 782 "grammar.c" break; case 4: YYTRACE("expr ::= LPAREN expr RPAREN") #line 122 "./grammar.lemon" { yygotominor.yy51 = yymsp[-1].minor.yy51; } #line 790 "grammar.c" yy_destructor(7,&yymsp[-2].minor); yy_destructor(9,&yymsp[0].minor); break; case 5: YYTRACE("logical_test ::= expr TEST_AND expr") #line 129 "./grammar.lemon" { yygotominor.yy51 = stnode_new(STTYPE_TEST, NULL); sttype_test_set2(yygotominor.yy51, TEST_OP_AND, yymsp[-2].minor.yy51, yymsp[0].minor.yy51); } #line 801 "grammar.c" yy_destructor(11,&yymsp[-1].minor); break; case 6: YYTRACE("logical_test ::= expr TEST_OR expr") #line 135 "./grammar.lemon" { yygotominor.yy51 = stnode_new(STTYPE_TEST, NULL); sttype_test_set2(yygotominor.yy51, TEST_OP_OR, yymsp[-2].minor.yy51, yymsp[0].minor.yy51); } #line 811 "grammar.c" yy_destructor(22,&yymsp[-1].minor); break; case 7: YYTRACE("logical_test ::= TEST_NOT expr") #line 141 "./grammar.lemon" { yygotominor.yy51 = stnode_new(STTYPE_TEST, NULL); sttype_test_set1(yygotominor.yy51, TEST_OP_NOT, yymsp[0].minor.yy51); } #line 821 "grammar.c" yy_destructor(21,&yymsp[-1].minor); break; case 8: YYTRACE("logical_test ::= entity") #line 147 "./grammar.lemon" { yygotominor.yy51 = stnode_new(STTYPE_TEST, NULL); sttype_test_set1(yygotominor.yy51, TEST_OP_EXISTS, yymsp[0].minor.yy51); } #line 831 "grammar.c" break; case 9: YYTRACE("entity ::= FIELD") #line 155 "./grammar.lemon" { yygotominor.yy51 = yymsp[0].minor.yy0; } #line 837 "grammar.c" break; case 10: YYTRACE("entity ::= STRING") #line 156 "./grammar.lemon" { yygotominor.yy51 = yymsp[0].minor.yy0; } #line 843 "grammar.c" break; case 11: YYTRACE("entity ::= UNPARSED") #line 157 "./grammar.lemon" { yygotominor.yy51 = yymsp[0].minor.yy0; } #line 849 "grammar.c" break; case 12: YYTRACE("entity ::= range") #line 158 "./grammar.lemon" { yygotominor.yy51 = yymsp[0].minor.yy51; } #line 855 "grammar.c" break; case 13: YYTRACE("range ::= FIELD LBRACKET drnode_list RBRACKET") #line 163 "./grammar.lemon" { yygotominor.yy51 = stnode_new(STTYPE_RANGE, NULL); sttype_range_set(yygotominor.yy51, yymsp[-3].minor.yy0, yymsp[-1].minor.yy26); /* Delete the list, but not the drange_nodes that * the list contains. */ g_slist_free(yymsp[-1].minor.yy26); } #line 868 "grammar.c" yy_destructor(6,&yymsp[-2].minor); yy_destructor(8,&yymsp[0].minor); break; case 14: YYTRACE("drnode_list ::= drnode") #line 173 "./grammar.lemon" { yygotominor.yy26 = g_slist_append(NULL, yymsp[0].minor.yy25); } #line 878 "grammar.c" break; case 15: YYTRACE("drnode_list ::= drnode_list COMMA drnode") #line 178 "./grammar.lemon" { yygotominor.yy26 = g_slist_append(yymsp[-2].minor.yy26, yymsp[0].minor.yy25); } #line 886 "grammar.c" yy_destructor(2,&yymsp[-1].minor); break; case 16: YYTRACE("drnode ::= INTEGER COLON INTEGER") #line 184 "./grammar.lemon" { yygotominor.yy25 = drange_node_new(); drange_node_set_start_offset(yygotominor.yy25, stnode_value(yymsp[-2].minor.yy0)); drange_node_set_length(yygotominor.yy25, stnode_value(yymsp[0].minor.yy0)); stnode_free(yymsp[-2].minor.yy0); stnode_free(yymsp[0].minor.yy0); } #line 900 "grammar.c" yy_destructor(1,&yymsp[-1].minor); break; case 17: YYTRACE("drnode ::= INTEGER HYPHEN INTEGER") #line 195 "./grammar.lemon" { yygotominor.yy25 = drange_node_new(); drange_node_set_start_offset(yygotominor.yy25, stnode_value(yymsp[-2].minor.yy0)); drange_node_set_end_offset(yygotominor.yy25, stnode_value(yymsp[0].minor.yy0)); stnode_free(yymsp[-2].minor.yy0); stnode_free(yymsp[0].minor.yy0); } #line 914 "grammar.c" yy_destructor(4,&yymsp[-1].minor); break; case 18: YYTRACE("drnode ::= COLON INTEGER") #line 207 "./grammar.lemon" { yygotominor.yy25 = drange_node_new(); drange_node_set_start_offset(yygotominor.yy25, 0); drange_node_set_length(yygotominor.yy25, stnode_value(yymsp[0].minor.yy0)); stnode_free(yymsp[0].minor.yy0); } #line 927 "grammar.c" yy_destructor(1,&yymsp[-1].minor); break; case 19: YYTRACE("drnode ::= INTEGER COLON") #line 217 "./grammar.lemon" { yygotominor.yy25 = drange_node_new(); drange_node_set_start_offset(yygotominor.yy25, stnode_value(yymsp[-1].minor.yy0)); drange_node_set_to_the_end(yygotominor.yy25); stnode_free(yymsp[-1].minor.yy0); } #line 940 "grammar.c" yy_destructor(1,&yymsp[0].minor); break; case 20: YYTRACE("drnode ::= INTEGER") #line 227 "./grammar.lemon" { yygotominor.yy25 = drange_node_new(); drange_node_set_start_offset(yygotominor.yy25, stnode_value(yymsp[0].minor.yy0)); drange_node_set_length(yygotominor.yy25, 1); stnode_free(yymsp[0].minor.yy0); } #line 953 "grammar.c" break; case 21: YYTRACE("relation_test ::= entity rel_op2 entity") #line 239 "./grammar.lemon" { yygotominor.yy51 = stnode_new(STTYPE_TEST, NULL); sttype_test_set2(yygotominor.yy51, yymsp[-1].minor.yy42, yymsp[-2].minor.yy51, yymsp[0].minor.yy51); } #line 962 "grammar.c" break; case 22: YYTRACE("rel_op2 ::= TEST_EQ") #line 244 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_EQ; } #line 968 "grammar.c" yy_destructor(14,&yymsp[0].minor); break; case 23: YYTRACE("rel_op2 ::= TEST_NE") #line 245 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_NE; } #line 975 "grammar.c" yy_destructor(20,&yymsp[0].minor); break; case 24: YYTRACE("rel_op2 ::= TEST_GT") #line 246 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_GT; } #line 982 "grammar.c" yy_destructor(16,&yymsp[0].minor); break; case 25: YYTRACE("rel_op2 ::= TEST_GE") #line 247 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_GE; } #line 989 "grammar.c" yy_destructor(15,&yymsp[0].minor); break; case 26: YYTRACE("rel_op2 ::= TEST_LT") #line 248 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_LT; } #line 996 "grammar.c" yy_destructor(18,&yymsp[0].minor); break; case 27: YYTRACE("rel_op2 ::= TEST_LE") #line 249 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_LE; } #line 1003 "grammar.c" yy_destructor(17,&yymsp[0].minor); break; case 28: YYTRACE("rel_op2 ::= TEST_BITWISE_AND") #line 250 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_BITWISE_AND; } #line 1010 "grammar.c" yy_destructor(12,&yymsp[0].minor); break; case 29: YYTRACE("rel_op2 ::= TEST_CONTAINS") #line 251 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_CONTAINS; } #line 1017 "grammar.c" yy_destructor(13,&yymsp[0].minor); break; case 30: YYTRACE("rel_op2 ::= TEST_MATCHES") #line 252 "./grammar.lemon" { yygotominor.yy42 = TEST_OP_MATCHES; } #line 1024 "grammar.c" yy_destructor(19,&yymsp[0].minor); break; }; yygoto = yyRuleInfo[yyruleno].lhs; yysize = yyRuleInfo[yyruleno].nrhs; yypParser->idx -= yysize; yypParser->top -= yysize; yyact = yy_find_parser_action(yypParser,yygoto); if( yyact < YYNSTATE ){ yy_shift(yypParser,yyact,yygoto,&yygotominor); }else if( yyact == YYNSTATE + YYNRULE + 1 ){ yy_accept(yypParser DfilterARGDECL); } } /* ** The following code executes when the parse fails */ static void yy_parse_failed( yyParser *yypParser /* The parser */ DfilterANSIARGDECL /* Extra arguments (if any) */ ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); } #endif while( yypParser->idx>=0 ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will be executed whenever the ** parser fails */ #line 102 "./grammar.lemon" dfw->syntax_error = TRUE; #line 1059 "grammar.c" } /* ** The following code executes when a syntax error first occurs. */ static void yy_syntax_error( yyParser *yypParser _U_, /* The parser */ int yymajor _U_, /* The major type of the error token */ YYMINORTYPE yyminor /* The minor type of the error token */ DfilterANSIARGDECL _U_ /* Extra arguments (if any) */ ){ #define TOKEN (yyminor.yy0) #line 54 "./grammar.lemon" header_field_info *hfinfo; if (!TOKEN) { dfilter_fail("Unexpected end of filter string."); return; } switch(stnode_type_id(TOKEN)) { case STTYPE_UNINITIALIZED: dfilter_fail("Syntax error."); break; case STTYPE_TEST: dfilter_fail("Syntax error, TEST."); break; case STTYPE_STRING: dfilter_fail("The string \"%s\" was unexpected in this context.", stnode_data(TOKEN)); break; case STTYPE_UNPARSED: dfilter_fail("\"%s\" was unexpected in this context.", stnode_data(TOKEN)); break; case STTYPE_INTEGER: dfilter_fail("The integer %d was unexpected in this context.", stnode_value(TOKEN)); break; case STTYPE_FIELD: hfinfo = stnode_data(TOKEN); dfilter_fail("Syntax error near \"%s\".", hfinfo->abbrev); break; /* These aren't handed to use as terminal tokens from the scanner, so was can assert that we'll never see them here. */ case STTYPE_NUM_TYPES: case STTYPE_RANGE: case STTYPE_FVALUE: g_assert_not_reached(); break; } #line 1116 "grammar.c" } /* ** The following is executed when the parser accepts */ static void yy_accept( yyParser *yypParser /* The parser */ DfilterANSIARGDECL _U_ /* Extra arguments (if any) */ ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); } #endif while( yypParser->idx>=0 ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will be executed whenever the ** parser accepts */ } /* The main parser program. ** The first argument is a pointer to a structure obtained from ** "DfilterAlloc" which describes the current state of the parser. ** The second argument is the major token number. The third is ** the minor token. The fourth optional argument is whatever the ** user wants (and specified in the grammar) and is available for ** use by the action routines. ** ** Inputs: ** <ul> ** <li> A pointer to the parser (an opaque structure.) ** <li> The major token number. ** <li> The minor token number. ** <li> An option argument of a grammar-specified type. ** </ul> ** ** Outputs: ** None. */ void Dfilter( void *yyp, /* The parser */ int yymajor, /* The major token code number */ DfilterTOKENTYPE yyminor /* The value for the token */ DfilterANSIARGDECL ){ YYMINORTYPE yyminorunion; int yyact; /* The parser action. */ int yyendofinput; /* True if we are at the end of input */ int yyerrorhit = 0; /* True if yymajor has invoked an error */ yyParser *yypParser; /* The parser */ /* (re)initialize the parser, if necessary */ yypParser = (yyParser*)yyp; if( yypParser->idx<0 ){ if( yymajor==0 ) return; yypParser->idx = 0; yypParser->errcnt = -1; yypParser->top = &yypParser->stack[0]; yypParser->top->stateno = 0; yypParser->top->major = 0; } yyminorunion.yy0 = yyminor; yyendofinput = (yymajor==0); #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]); } #endif do{ yyact = yy_find_parser_action(yypParser,yymajor); if( yyact<YYNSTATE ){ yy_shift(yypParser,yyact,yymajor,&yyminorunion); yypParser->errcnt--; if( yyendofinput && yypParser->idx>=0 ){ yymajor = 0; }else{ yymajor = YYNOCODE; } }else if( yyact < YYNSTATE + YYNRULE ){ yy_reduce(yypParser,yyact-YYNSTATE DfilterARGDECL); }else if( yyact == YY_ERROR_ACTION ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt); } #endif #ifdef YYERRORSYMBOL /* A syntax error has occurred. ** The response to an error depends upon whether or not the ** grammar defines an error token "ERROR". ** ** This is what we do if the grammar does define ERROR: ** ** * Call the %syntax_error function. ** ** * Begin popping the stack until we enter a state where ** it is legal to shift the error symbol, then shift ** the error symbol. ** ** * Set the error count to three. ** ** * Begin accepting and shifting new tokens. No new error ** processing will occur until three tokens have been ** shifted successfully. ** */ if( yypParser->errcnt<0 ){ yy_syntax_error(yypParser,yymajor,yyminorunion DfilterARGDECL); } if( yypParser->top->major==YYERRORSYMBOL || yyerrorhit ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sDiscard input token %s\n", yyTracePrompt,yyTokenName[yymajor]); } #endif yy_destructor(yymajor,&yyminorunion); yymajor = YYNOCODE; }else{ while( yypParser->idx >= 0 && yypParser->top->major != YYERRORSYMBOL && (yyact = yy_find_parser_action(yypParser,YYERRORSYMBOL)) >= YYNSTATE ){ yy_pop_parser_stack(yypParser); } if( yypParser->idx < 0 || yymajor==0 ){ yy_destructor(yymajor,&yyminorunion); yy_parse_failed(yypParser DfilterARGDECL); yymajor = YYNOCODE; }else if( yypParser->top->major!=YYERRORSYMBOL ){ YYMINORTYPE u2; u2.YYERRSYMDT = 0; yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2); } } yypParser->errcnt = 3; yyerrorhit = 1; #else /* YYERRORSYMBOL is not defined */ /* This is what we do if the grammar does not define ERROR: ** ** * Report an error message, and throw away the input token. ** ** * If the input token is $, then fail the parse. ** ** As before, subsequent error messages are suppressed until ** three input tokens have been successfully shifted. */ if( yypParser->errcnt<=0 ){ yy_syntax_error(yypParser,yymajor,yyminorunion DfilterARGDECL); } yypParser->errcnt = 3; yy_destructor(yymajor,&yyminorunion); if( yyendofinput ){ yy_parse_failed(yypParser DfilterARGDECL); } yymajor = YYNOCODE; #endif }else{ yy_accept(yypParser DfilterARGDECL); yymajor = YYNOCODE; } }while( yymajor!=YYNOCODE && yypParser->idx>=0 ); return; }
- Follow-Ups:
- Re: [Ethereal-dev] compile error epan/dfilter/grammar.c
- From: Gisle Vanem
- Re: [Ethereal-dev] compile error epan/dfilter/grammar.c
- Prev by Date: [Ethereal-dev] ".svn" subdirs in nightly builds
- Next by Date: Re: [Ethereal-dev] Problems with python in building from SVN
- Previous by thread: Re: [Ethereal-dev] ".svn" subdirs in nightly builds
- Next by thread: Re: [Ethereal-dev] compile error epan/dfilter/grammar.c
- Index(es):