/* * CDE - Common Desktop Environment * * Copyright (c) 1993-2012, The Open Group. All rights reserved. * * These libraries and programs are free software; you can * redistribute them and/or modify them under the terms of the GNU * Lesser General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) * any later version. * * These libraries and programs are distributed in the hope that * they will be useful, but WITHOUT ANY WARRANTY; without even the * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU Lesser General Public License for more * details. * * You should have received a copy of the GNU Lesser General Public * License along with these libraries and programs; if not, write * to the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301 USA */ // $TOG: sheet.C /main/4 1997/12/23 11:20:35 bill $ #ifndef lint __attribute__((unused)) static const char schemasccsid[] = "@(#)yaccpar 1.8 (Berkeley) 01/20/90"; #endif #define schemaBYACC 1 #include #include #include "utility/funcs.h" #include "schema/store_desc.h" #include "schema/index_desc.h" #include "schema/inv_desc.h" #include "schema/agent_desc.h" #include "schema/container_desc.h" extern desc* desc_ptr; extern desc* last_desc_ptr; #define CAST_TO_STORED_OBJECT(x) ((stored_object_desc*)x) #define CAST_TO_PAGE_STORE(x) ((page_store_desc*)x) #define CAST_TO_INDEX(x) ((index_desc*)x) #define CAST_TO_MPHF_INDEX(x) ((index_desc*)x) #define CAST_TO_SMPHF_INDEX(x) ((smphf_index_desc*)x) #define CAST_TO_INV(x) ((inv_desc*)x) #define CAST_TO_MPHF(x) ((mphf_desc*)x) #define CAST_TO_SMPHF(x) ((smphf_desc*)x) #define CAST_TO_BTREE(x) ((btree_desc*)x) #define CAST_TO_CONTAINER(x) ((container_desc*)x) #undef alloca #define alloca(x) (malloc(x)) extern void schemaerror(char*); extern int schemalex(); #undef schemawrap typedef union { char *string; int integer; desc* trans; page_store_desc* ps_trans; } schemaSTYPE; #define TOKEN 257 #define CONTAINER 258 #define SET 259 #define LIST 260 #define INDEX_NAME 261 #define INV 262 #define COMPRESS 263 #define INV_NAME 264 #define AGENT_NAME 265 #define STORE_NAME 266 #define POSITION 267 #define INDEX 268 #define MPHF_INDEX 269 #define SMPHF_INDEX 270 #define BTREE_INDEX 271 #define INDEX_AGENT 272 #define MPHF 273 #define SMPHF 274 #define BTREE 275 #define HUFFMAN 276 #define DICT 277 #define EQUAL 278 #define NUMBER 279 #define STORE 280 #define PAGE_STORE 281 #define NM 282 #define V_OID 283 #define MODE 284 #define PAGE_SZ 285 #define CACHED_PAGES 286 #undef BYTE_ORDER #define BYTE_ORDER 287 #define SEPARATOR 288 #define schemaERRCODE 256 short schemalhs[] = { -1, 0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4, 6, 7, 5, 8, 15, 16, 16, 16, 17, 18, 18, 19, 19, 19, 20, 20, 9, 9, 10, 10, 12, 12, 13, 13, 11, 11, 14, 14, 21, 21, 21, 21, 25, 25, 26, 26, 22, 22, 27, 27, 27, 23, 23, 24, 24, }; short schemalen[] = { 2, 1, 2, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, 3, 1, 3, 1, }; short schemadefred[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 26, 27, 9, 0, 20, 6, 0, 21, 22, 7, 0, 17, 18, 19, 5, 0, 23, 25, 24, 8, 0, 16, 4, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 56, 0, 54, 12, 0, 13, 0, 0, 0, 0, 11, 0, 52, 49, 14, 0, 0, 0, 0, 0, 10, 0, 40, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, 53, 46, 47, 38, 32, 34, 50, 51, 48, 30, 36, 45, 43, 41, 42, 28, }; short schemadgoto[] = { 7, 8, 9, 32, 24, 29, 15, 19, 12, 66, 56, 60, 49, 51, 45, 33, 25, 16, 20, 30, 13, 67, 57, 46, 47, 68, 48, 59, }; short schemasindex[] = { -250, -206, -260, -221, -219, -254, -272, 0, 0, -250, 0, 0, 0, -277, 0, 0, -243, 0, 0, 0, -231, 0, 0, 0, 0, -230, 0, 0, 0, 0, -229, 0, 0, -228, 0, -251, -249, -249, -241, -249, -247, -217, -216, -215, -214, 0, 0, -223, 0, 0, -222, 0, -220, -211, -209, -208, 0, -213, 0, 0, 0, -212, -207, -205, -204, -201, 0, -210, 0, 0, -185, -178, -177, -176, -251, -249, -249, -175, -174, -232, -241, -249, -173, -194, -193, -170, -247, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short schemarindex[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 3, 0, 14, 0, 0, 0, 0, 16, 0, 0, 0, 27, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }; short schemagindex[] = { 0, 79, 0, 0, 0, 0, 0, 0, 0, 4, 9, 10, 17, 18, 19, 0, 0, 0, 0, 0, 0, 0, 0, -32, 0, 0, -40, 0, }; #define schemaTABLESIZE 309 short schematable[] = { 69, 39, 14, 33, 50, 52, 58, 61, 1, 31, 41, 35, 2, 3, 35, 42, 31, 42, 4, 26, 27, 28, 5, 53, 54, 42, 55, 37, 3, 29, 6, 43, 44, 43, 44, 43, 44, 62, 63, 64, 65, 43, 44, 50, 52, 36, 69, 96, 58, 61, 21, 22, 23, 10, 11, 17, 18, 37, 38, 39, 40, 70, 71, 72, 73, 74, 75, 77, 76, 78, 79, 82, 87, 83, 84, 80, 81, 85, 86, 88, 89, 90, 94, 95, 99, 100, 101, 102, 34, 97, 103, 98, 92, 91, 93, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 39, 0, 33, 0, 39, 39, 33, 33, 0, 0, 39, 0, 33, 35, 39, 31, 33, 35, 35, 31, 31, 0, 39, 35, 33, 31, 37, 35, 29, 31, 37, 37, 29, 29, 0, 35, 37, 31, 29, 0, 37, 0, 29, 0, 0, 0, 0, 0, 37, 0, 29, }; short schemacheck[] = { 40, 0, 262, 0, 36, 37, 38, 39, 258, 281, 261, 288, 262, 263, 0, 266, 0, 266, 268, 273, 274, 275, 272, 264, 265, 266, 267, 0, 0, 0, 280, 282, 283, 282, 283, 282, 283, 284, 285, 286, 287, 282, 283, 75, 76, 288, 86, 279, 80, 81, 269, 270, 271, 259, 260, 276, 277, 288, 288, 288, 288, 278, 278, 278, 278, 288, 288, 278, 288, 278, 278, 278, 257, 278, 278, 288, 288, 278, 288, 257, 257, 257, 257, 257, 257, 279, 279, 257, 9, 80, 86, 81, 75, 74, 76, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 258, -1, 258, -1, 262, 263, 262, 263, -1, -1, 268, -1, 268, 258, 272, 258, 272, 262, 263, 262, 263, -1, 280, 268, 280, 268, 258, 272, 258, 272, 262, 263, 262, 263, -1, 280, 268, 280, 268, -1, 272, -1, 272, -1, -1, -1, -1, -1, 280, -1, 280, }; #define schemaFINAL 7 #ifndef schemaDEBUG #define schemaDEBUG 0 #endif #define schemaMAXTOKEN 288 #if schemaDEBUG char * schemaname[] = { "end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"TOKEN","CONTAINER","SET","LIST", "INDEX_NAME","INV","COMPRESS","INV_NAME","AGENT_NAME","STORE_NAME","POSITION", "INDEX","MPHF_INDEX","SMPHF_INDEX","BTREE_INDEX","INDEX_AGENT","MPHF","SMPHF", "BTREE","HUFFMAN","DICT","EQUAL","NUMBER","STORE","PAGE_STORE","NM","V_OID", "MODE","PAGE_SZ","CACHED_PAGES","BYTE_ORDER","SEPARATOR", }; char * schemarule[] = { "$accept : Sheet", "Sheet : DescriptionList", "DescriptionList : Description DescriptionList", "DescriptionList : Description", "Description : STORE Store_description", "Description : INDEX Index_description", "Description : INV Inv_description", "Description : COMPRESS Compress_description", "Description : INDEX_AGENT Index_Agent_description", "Description : CONTAINER Container_description", "Store_description : Page_Store_Head SEPARATOR Page_store_descriptions", "Index_description : Index_Head SEPARATOR MPHF_index_descriptions", "Inv_description : Inv_Head SEPARATOR Inv_descriptions", "Compress_description : Compress_Head SEPARATOR Compress_descriptions", "Index_Agent_description : Index_Agent_Head SEPARATOR Hash_descriptions", "Container_description : Container_Head SEPARATOR Container_descriptions", "Page_Store_Head : PAGE_STORE", "Index_Head : MPHF_INDEX", "Index_Head : SMPHF_INDEX", "Index_Head : BTREE_INDEX", "Inv_Head : INV", "Compress_Head : HUFFMAN", "Compress_Head : DICT", "Index_Agent_Head : MPHF", "Index_Agent_Head : BTREE", "Index_Agent_Head : SMPHF", "Container_Head : SET", "Container_Head : LIST", "Page_store_descriptions : Page_Store_Term SEPARATOR Page_store_descriptions", "Page_store_descriptions : Page_Store_Term", "MPHF_index_descriptions : MPHF_Index_Term SEPARATOR MPHF_index_descriptions", "MPHF_index_descriptions : MPHF_Index_Term", "Inv_descriptions : Stored_Object_Term SEPARATOR Inv_descriptions", "Inv_descriptions : Stored_Object_Term", "Compress_descriptions : Stored_Object_Term SEPARATOR Compress_descriptions", "Compress_descriptions : Stored_Object_Term", "Hash_descriptions : Stored_Object_Term SEPARATOR Hash_descriptions", "Hash_descriptions : Stored_Object_Term", "Container_descriptions : Container_Term SEPARATOR Container_descriptions", "Container_descriptions : Container_Term", "Page_Store_Term : Store_Term", "Page_Store_Term : CACHED_PAGES EQUAL NUMBER", "Page_Store_Term : BYTE_ORDER EQUAL TOKEN", "Page_Store_Term : PAGE_SZ EQUAL NUMBER", "Store_Term : Term", "Store_Term : MODE EQUAL TOKEN", "Term : NM EQUAL TOKEN", "Term : V_OID EQUAL TOKEN", "MPHF_Index_Term : POSITION EQUAL NUMBER", "MPHF_Index_Term : Index_Term", "Index_Term : INV_NAME EQUAL TOKEN", "Index_Term : AGENT_NAME EQUAL TOKEN", "Index_Term : Stored_Object_Term", "Stored_Object_Term : STORE_NAME EQUAL TOKEN", "Stored_Object_Term : Term", "Container_Term : INDEX_NAME EQUAL TOKEN", "Container_Term : Stored_Object_Term", }; #endif #define schemaclearin ( schemachar=(-1)) #define schemaerrok ( schemaerrflag=0) #ifdef schemaSTACKSIZE #ifndef schemaMAXDEPTH #define schemaMAXDEPTH schemaSTACKSIZE #endif #else #ifdef schemaMAXDEPTH #define schemaSTACKSIZE schemaMAXDEPTH #else #define schemaSTACKSIZE 500 #define schemaMAXDEPTH 500 #endif #endif int schemadebug; int schemanerrs; int schemaerrflag; int schemachar; short * schemassp; schemaSTYPE * schemavsp; schemaSTYPE schemaval; schemaSTYPE schemalval; short schemass[ schemaSTACKSIZE]; schemaSTYPE schemavs[ schemaSTACKSIZE]; #define schemastacksize schemaSTACKSIZE #define schemaABORT goto schemaabort #define schemaACCEPT goto schemaaccept #define schemaERROR goto schemaerrlab #if schemaDEBUG #ifndef __cplusplus extern char *getenv(const char *); #endif #endif int schemaparse() { int schemam, scheman, schemastate; #if schemaDEBUG char * schemas; if ( schemas = getenv(" schemaDEBUG")) { scheman = * schemas; if ( scheman >= '0' && scheman <= '9') schemadebug = scheman - '0'; } #endif schemanerrs = 0; schemaerrflag = 0; schemachar = (-1); schemassp = schemass; schemavsp = schemavs; * schemassp = schemastate = 0; schemaloop: if ( (scheman = schemadefred[ schemastate])) goto schemareduce; if ( schemachar < 0) { if (( schemachar = schemalex()) < 0) schemachar = 0; #if schemaDEBUG if ( schemadebug) { schemas = 0; if ( schemachar <= schemaMAXTOKEN) schemas = schemaname[ schemachar]; if (! schemas) schemas = "illegal-symbol"; printf(" schemadebug: state %d, reading %d (%s)\n", schemastate, schemachar, schemas); } #endif } if (( scheman = schemasindex[ schemastate]) && ( scheman += schemachar) >= 0 && scheman <= schemaTABLESIZE && schemacheck[ scheman] == schemachar) { #if schemaDEBUG if ( schemadebug) printf(" schemadebug: state %d, shifting to state %d\n", schemastate, schematable[ scheman]); #endif if ( schemassp >= schemass + schemastacksize - 1) { goto schemaoverflow; } *++ schemassp = schemastate = schematable[ scheman]; *++ schemavsp = schemalval; schemachar = (-1); if ( schemaerrflag > 0) -- schemaerrflag; goto schemaloop; } if (( scheman = schemarindex[ schemastate]) && ( scheman += schemachar) >= 0 && scheman <= schemaTABLESIZE && schemacheck[ scheman] == schemachar) { scheman = schematable[ scheman]; goto schemareduce; } if ( schemaerrflag) goto schemainrecovery; #if 0 /* remove if needed */ #ifdef lint goto schemanewerror; #endif schemanewerror: #endif schemaerror((char*)"syntax error"); #if 0 /* remove if needed */ #ifdef lint goto schemaerrlab; #endif schemaerrlab: #endif ++ schemanerrs; schemainrecovery: if ( schemaerrflag < 3) { schemaerrflag = 3; for (;;) { if (( scheman = schemasindex[* schemassp]) && ( scheman += schemaERRCODE) >= 0 && scheman <= schemaTABLESIZE && schemacheck[ scheman] == schemaERRCODE) { #if schemaDEBUG if ( schemadebug) printf(" schemadebug: state %d, error recovery shifting\ to state %d\n", * schemassp, schematable[ scheman]); #endif if ( schemassp >= schemass + schemastacksize - 1) { goto schemaoverflow; } *++ schemassp = schemastate = schematable[ scheman]; *++ schemavsp = schemalval; goto schemaloop; } else { #if schemaDEBUG if ( schemadebug) printf(" schemadebug: error recovery discarding state %d\n", * schemassp); #endif if ( schemassp <= schemass) goto schemaabort; -- schemassp; -- schemavsp; } } } else { if ( schemachar == 0) goto schemaabort; #if schemaDEBUG if ( schemadebug) { schemas = 0; if ( schemachar <= schemaMAXTOKEN) schemas = schemaname[ schemachar]; if (! schemas) schemas = "illegal-symbol"; printf(" schemadebug: state %d, error recovery discards token %d (%s)\n", schemastate, schemachar, schemas); } #endif schemachar = (-1); goto schemaloop; } schemareduce: #if schemaDEBUG if ( schemadebug) printf(" schemadebug: state %d, reducing by rule %d (%s)\n", schemastate, scheman, schemarule[ scheman]); #endif schemam = schemalen[ scheman]; schemaval = schemavsp[1- schemam]; switch ( scheman) { case 1: { /*$1 -> asciiOutList(cerr);*/ desc_ptr = schemavsp[0].trans; } break; case 2: { schemavsp[-1].trans -> set_next_desc( schemavsp[0].trans); schemaval.trans = schemavsp[-1].trans; } break; case 3: { schemavsp[0].trans -> set_next_desc(0); last_desc_ptr = schemavsp[0].trans; schemaval.trans = schemavsp[0].trans; } break; case 4: { schemaval.trans = schemavsp[0].trans; } break; case 5: { schemaval.trans = schemavsp[0].trans; } break; case 6: { schemaval.trans = schemavsp[0].trans; } break; case 7: { schemaval.trans = schemavsp[0].trans; } break; case 8: { schemaval.trans = schemavsp[0].trans; } break; case 9: { schemaval.trans = schemavsp[0].trans; } break; case 10: { schemaval.trans = desc_ptr; } break; case 11: { schemaval.trans = desc_ptr; } break; case 12: { schemaval.trans = desc_ptr; } break; case 13: { schemaval.trans = desc_ptr; } break; case 14: { schemaval.trans = desc_ptr; } break; case 15: { schemaval.trans = desc_ptr; } break; case 16: { desc_ptr = new page_store_desc; } break; case 17: { desc_ptr= new mphf_index_desc; } break; case 18: { desc_ptr= new smphf_index_desc; } break; case 19: { desc_ptr= new btree_index_desc; } break; case 20: { desc_ptr= new inv_desc; } break; case 21: { desc_ptr= new huffman_desc; } break; case 22: { desc_ptr= new dict_desc; } break; case 23: { desc_ptr= new mphf_desc; } break; case 24: { desc_ptr= new btree_desc; } break; case 25: { desc_ptr= new smphf_desc; } break; case 26: { desc_ptr= new set_desc; } break; case 27: { desc_ptr= new list_desc; } break; case 28: { } break; case 29: { } break; case 30: { } break; case 31: { } break; case 32: { } break; case 33: { } break; case 34: { } break; case 35: { } break; case 36: { } break; case 37: { } break; case 38: { } break; case 39: { } break; case 40: { } break; case 41: { CAST_TO_PAGE_STORE(desc_ptr) -> set_cached_pages( schemavsp[0].integer); } break; case 42: { CAST_TO_PAGE_STORE(desc_ptr) -> set_order( schemavsp[0].string); } break; case 43: { CAST_TO_PAGE_STORE(desc_ptr) -> set_page_sz( schemavsp[0].integer); } break; case 44: { } break; case 45: { CAST_TO_PAGE_STORE(desc_ptr) -> set_mode( schemavsp[0].string); } break; case 46: { desc_ptr -> set_nm( schemavsp[0].string); } break; case 47: { desc_ptr -> set_oid( schemavsp[0].string); } break; case 48: { CAST_TO_MPHF_INDEX(desc_ptr) -> set_position( schemavsp[0].integer); } break; case 49: { } break; case 50: { CAST_TO_INDEX(desc_ptr) -> set_inv_nm( schemavsp[0].string); } break; case 51: { CAST_TO_INDEX(desc_ptr) -> set_agent_nm( schemavsp[0].string); } break; case 52: { } break; case 53: { CAST_TO_STORED_OBJECT(desc_ptr) -> set_store_nm( schemavsp[0].string); } break; case 54: { } break; case 55: { CAST_TO_CONTAINER(desc_ptr) -> set_index_nm( schemavsp[0].string); } break; case 56: { } break; } schemassp -= schemam; schemastate = * schemassp; schemavsp -= schemam; schemam = schemalhs[ scheman]; if ( schemastate == 0 && schemam == 0) { #if schemaDEBUG if ( schemadebug) printf(" schemadebug: after reduction, shifting from state 0 to\ state %d\n", schemaFINAL); #endif schemastate = schemaFINAL; *++ schemassp = schemaFINAL; *++ schemavsp = schemaval; if ( schemachar < 0) { if (( schemachar = schemalex()) < 0) schemachar = 0; #if schemaDEBUG if ( schemadebug) { schemas = 0; if ( schemachar <= schemaMAXTOKEN) schemas = schemaname[ schemachar]; if (! schemas) schemas = "illegal-symbol"; printf(" schemadebug: state %d, reading %d (%s)\n", schemaFINAL, schemachar, schemas); } #endif } if ( schemachar == 0) goto schemaaccept; goto schemaloop; } if (( scheman = schemagindex[ schemam]) && ( scheman += schemastate) >= 0 && scheman <= schemaTABLESIZE && schemacheck[ scheman] == schemastate) schemastate = schematable[ scheman]; else schemastate = schemadgoto[ schemam]; #if schemaDEBUG if ( schemadebug) printf(" schemadebug: after reduction, shifting from state %d \ to state %d\n", * schemassp, schemastate); #endif if ( schemassp >= schemass + schemastacksize - 1) { goto schemaoverflow; } *++ schemassp = schemastate; *++ schemavsp = schemaval; goto schemaloop; schemaoverflow: schemaerror((char*)"yacc stack overflow"); schemaabort: return (1); schemaaccept: return (0); }