#include "ace/Obstack.h"
#include "ace/Service_Config.h"
#include "ace/Parse_Node.h"
#include "ace/Svc_Conf_Param.h"
Include dependency graph for Svc_Conf.h:
This graph shows which files directly or indirectly include this file:
Go to the source code of this file.
Classes | |
union | ACE_YYSTYPE |
Defines | |
#define | ACE_YY_DECL extern "C" int ace_yylex (ACE_YYSTYPE *ace_yylval, void *ACE_YYLEX_PARAM) |
Functions | |
int | ace_yyparse (void *) |
Performs the parsing. | |
void | ace_yyerror (int yyerrno, int yylineno, const char *) |
Error handling routine required by YACC or BISON. | |
ACE_Service_Type_Impl * | ace_create_service_type (const ACE_TCHAR *, int, void *, unsigned int, ACE_Service_Object_Exterminator=0) |
Factory that creates a new ACE_Service_Type_Impl. | |
Variables | |
ACE_YY_DECL | |
Performs the lexical analysis. | |
FILE * | ace_yyin |
Name of input stream. | |
ACE_TCHAR * | ace_yytext |
Holds the lexeme for the current token. | |
int | ace_yyleng |
Holds the length of the lexeme for the current token. |
Definition in file Svc_Conf.h.
|
Definition at line 45 of file Svc_Conf.h. |
|
Factory that creates a new ACE_Service_Type_Impl.
|
|
Error handling routine required by YACC or BISON.
Definition at line 1643 of file Svc_Conf_y.cpp. References ACE_ERROR, ACE_LIB_TEXT, and LM_ERROR. Referenced by ace_yyparse(), ACE_Svc_Conf_Lexer::input(), ACE_Svc_Conf_Lexer::scan(), and ACE_Svc_Conf_Lexer::yylex().
01644 { 01645 #if defined (ACE_NLOGGING) 01646 ACE_UNUSED_ARG (ace_yyerrno); 01647 ACE_UNUSED_ARG (ace_yylineno); 01648 ACE_UNUSED_ARG (s); 01649 #endif /* ACE_NLOGGING */ 01650 01651 ACE_ERROR ((LM_ERROR, 01652 ACE_LIB_TEXT ("[error %d] on line %d: %s\n"), 01653 ace_yyerrno, 01654 ace_yylineno, 01655 s)); 01656 } |
|
Performs the parsing.
Definition at line 843 of file Svc_Conf_y.cpp. References ACE_ARGV, ACE_ERROR, ace_get_module(), ACE_LIB_TEXT, ACE_MODULE_T, ACE_Service_Type_Factory, ACE_STREAM_T, ACE_SVC_CONF_PARAM, ACE_SVC_OBJ_T, ACE_TCHAR, ACE_YY_REDUCE_PRINT, ACE_YY_STACK_PRINT, ACE_YY_SYMBOL_PRINT, ACE_YYABORT, ACE_YYACCEPT, ace_yycheck, ace_yydefact, ace_yydefgoto, ace_yydestruct(), ACE_YYDPRINTF, ACE_YYEMPTY, ACE_YYEOF, ace_yyerror(), ACE_YYFINAL, ACE_YYINITDEPTH, ACE_YYLAST, ACE_YYLEX, ACE_YYMAXDEPTH, ACE_YYNTOKENS, ace_yypact, ACE_YYPACT_NINF, ACE_YYPARSE_PARAM, ace_yypgoto, ACE_YYPOPSTACK, ace_yyr1, ace_yyr2, ACE_YYSIZE_T, ACE_YYSTACK_ALLOC, ACE_YYSTACK_FREE, ace_yystos, ace_yytable, ACE_YYTABLE_NINF, ACE_YYTERROR, ACE_YYTRANSLATE, ACE_ARGV_T< CHAR_TYPE >::argc(), ACE_ARGV_T< CHAR_TYPE >::argv(), ACE_YYSTYPE::ident_, ACE_Module_Type::init(), LM_ERROR, ACE_YYSTYPE::location_node_, ACE_Service_Type::name(), ACE_Parse_Node::name(), ACE_Static_Node::parameters(), ACE_YYSTYPE::parse_node_, ACE_Stream_Type::push(), ACE_Static_Node::record(), ACE_Stream_Type::remove(), ACE_Module_Type::resume(), ACE_YYSTYPE::static_node_, ACE_Module_Type::suspend(), ACE_YYSTYPE::svc_record_, ACE_Service_Type::type(), and ACE_YYSTYPE::type_.
00858 { 00859 /* The look-ahead symbol. */ 00860 int ace_yychar; 00861 00862 /* The semantic value of the look-ahead symbol. */ 00863 ACE_YYSTYPE ace_yylval; 00864 00865 #if defined (ACE_YYSTYPE_IS_TRIVIAL) 00866 ace_yylval = 0; 00867 #else 00868 ace_yylval.type_ = 0; 00869 #endif /* ACE_YYSTYPE_IS_TRIVIAL */ 00870 00871 /* Number of syntax errors so far. */ 00872 int ace_yynerrs; 00873 00874 register int ace_yystate; 00875 register int ace_yyn; 00876 int ace_yyresult; 00877 /* Number of tokens to shift before error messages enabled. */ 00878 int ace_yyerrstatus; 00879 /* Look-ahead token as an internal (translated) token number. */ 00880 int ace_yytoken = 0; 00881 00882 /* Three stacks and their tools: 00883 `ace_yyss': related to states, 00884 `ace_yyvs': related to semantic values, 00885 `ace_yyls': related to locations. 00886 00887 Refer to the stacks thru separate pointers, to allow ace_yyoverflow 00888 to reallocate them elsewhere. */ 00889 00890 /* The state stack. */ 00891 short int ace_yyssa[ACE_YYINITDEPTH]; 00892 short int *ace_yyss = ace_yyssa; 00893 register short int *ace_yyssp; 00894 00895 /* The semantic value stack. */ 00896 ACE_YYSTYPE ace_yyvsa[ACE_YYINITDEPTH]; 00897 ACE_YYSTYPE *ace_yyvs = ace_yyvsa; 00898 register ACE_YYSTYPE *ace_yyvsp; 00899 00900 00901 00902 #define ACE_YYPOPSTACK (ace_yyvsp--, ace_yyssp--) 00903 00904 ACE_YYSIZE_T ace_yystacksize = ACE_YYINITDEPTH; 00905 00906 /* The variables used to return semantic value and location from the 00907 action routines. */ 00908 ACE_YYSTYPE ace_yyval; 00909 00910 00911 /* When reducing, the number of symbols on the RHS of the reduced 00912 rule. */ 00913 int ace_yylen; 00914 00915 ACE_YYDPRINTF ((stderr, "Starting parse\n")); 00916 00917 ace_yystate = 0; 00918 ace_yyerrstatus = 0; 00919 ace_yynerrs = 0; 00920 ace_yychar = ACE_YYEMPTY; /* Cause a token to be read. */ 00921 00922 /* Initialize stack pointers. 00923 Waste one element of value and location stack 00924 so that they stay on the same level as the state stack. 00925 The wasted elements are never initialized. */ 00926 00927 ace_yyssp = ace_yyss; 00928 ace_yyvsp = ace_yyvs; 00929 00930 00931 ace_yyvsp[0] = ace_yylval; 00932 00933 goto ace_yysetstate; 00934 00935 /*------------------------------------------------------------. 00936 | ace_yynewstate -- Push a new state, which is found in ace_yystate. | 00937 `------------------------------------------------------------*/ 00938 ace_yynewstate: 00939 /* In all cases, when you get here, the value and location stacks 00940 have just been pushed. so pushing a state here evens the stacks. 00941 */ 00942 ace_yyssp++; 00943 00944 ace_yysetstate: 00945 *ace_yyssp = ace_yystate; 00946 00947 if (ace_yyss + ace_yystacksize - 1 <= ace_yyssp) 00948 { 00949 /* Get the current used size of the three stacks, in elements. */ 00950 ACE_YYSIZE_T ace_yysize = ace_yyssp - ace_yyss + 1; 00951 00952 #ifdef ace_yyoverflow 00953 { 00954 /* Give user a chance to reallocate the stack. Use copies of 00955 these so that the &'s don't force the real ones into 00956 memory. */ 00957 ACE_YYSTYPE *ace_yyvs1 = ace_yyvs; 00958 short int *ace_yyss1 = ace_yyss; 00959 00960 00961 /* Each stack pointer address is followed by the size of the 00962 data in use in that stack, in bytes. This used to be a 00963 conditional around just the two extra args, but that might 00964 be undefined if ace_yyoverflow is a macro. */ 00965 ace_yyoverflow ("parser stack overflow", 00966 &ace_yyss1, ace_yysize * sizeof (*ace_yyssp), 00967 &ace_yyvs1, ace_yysize * sizeof (*ace_yyvsp), 00968 00969 &ace_yystacksize); 00970 00971 ace_yyss = ace_yyss1; 00972 ace_yyvs = ace_yyvs1; 00973 } 00974 #else /* no ace_yyoverflow */ 00975 # ifndef ACE_YYSTACK_RELOCATE 00976 goto ace_yyoverflowlab; 00977 # else 00978 /* Extend the stack our own way. */ 00979 if (ACE_YYMAXDEPTH <= ace_yystacksize) 00980 goto ace_yyoverflowlab; 00981 ace_yystacksize *= 2; 00982 if (ACE_YYMAXDEPTH < ace_yystacksize) 00983 ace_yystacksize = ACE_YYMAXDEPTH; 00984 00985 { 00986 short int *ace_yyss1 = ace_yyss; 00987 union ace_yyalloc *ace_yyptr = 00988 (union ace_yyalloc *) ACE_YYSTACK_ALLOC (ACE_YYSTACK_BYTES (ace_yystacksize)); 00989 if (! ace_yyptr) 00990 goto ace_yyoverflowlab; 00991 ACE_YYSTACK_RELOCATE (ace_yyss); 00992 ACE_YYSTACK_RELOCATE (ace_yyvs); 00993 00994 # undef ACE_YYSTACK_RELOCATE 00995 if (ace_yyss1 != ace_yyssa) 00996 ACE_YYSTACK_FREE (ace_yyss1); 00997 } 00998 # endif 00999 #endif /* no ace_yyoverflow */ 01000 01001 ace_yyssp = ace_yyss + ace_yysize - 1; 01002 ace_yyvsp = ace_yyvs + ace_yysize - 1; 01003 01004 01005 ACE_YYDPRINTF ((stderr, "Stack size increased to %lu\n", 01006 (unsigned long int) ace_yystacksize)); 01007 01008 if (ace_yyss + ace_yystacksize - 1 <= ace_yyssp) 01009 ACE_YYABORT; 01010 } 01011 01012 ACE_YYDPRINTF ((stderr, "Entering state %d\n", ace_yystate)); 01013 01014 goto ace_yybackup; 01015 01016 /*-----------. 01017 | ace_yybackup. | 01018 `-----------*/ 01019 ace_yybackup: 01020 01021 /* Do appropriate processing given the current state. */ 01022 /* Read a look-ahead token if we need one and don't already have one. */ 01023 /* ace_yyresume: */ 01024 01025 /* First try to decide what to do without reference to look-ahead token. */ 01026 01027 ace_yyn = ace_yypact[ace_yystate]; 01028 if (ace_yyn == ACE_YYPACT_NINF) 01029 goto ace_yydefault; 01030 01031 /* Not known => get a look-ahead token if don't already have one. */ 01032 01033 /* ACE_YYCHAR is either ACE_YYEMPTY or ACE_YYEOF or a valid look-ahead symbol. */ 01034 if (ace_yychar == ACE_YYEMPTY) 01035 { 01036 ACE_YYDPRINTF ((stderr, "Reading a token: ")); 01037 ace_yychar = ACE_YYLEX; 01038 } 01039 01040 if (ace_yychar <= ACE_YYEOF) 01041 { 01042 ace_yychar = ace_yytoken = ACE_YYEOF; 01043 ACE_YYDPRINTF ((stderr, "Now at end of input.\n")); 01044 } 01045 else 01046 { 01047 ace_yytoken = ACE_YYTRANSLATE (ace_yychar); 01048 ACE_YY_SYMBOL_PRINT ("Next token is", ace_yytoken, &ace_yylval, &ace_yylloc); 01049 } 01050 01051 /* If the proper action on seeing token ACE_YYTOKEN is to reduce or to 01052 detect an error, take that action. */ 01053 ace_yyn += ace_yytoken; 01054 if (ace_yyn < 0 || ACE_YYLAST < ace_yyn || ace_yycheck[ace_yyn] != ace_yytoken) 01055 goto ace_yydefault; 01056 ace_yyn = ace_yytable[ace_yyn]; 01057 if (ace_yyn <= 0) 01058 { 01059 if (ace_yyn == 0 || ace_yyn == ACE_YYTABLE_NINF) 01060 goto ace_yyerrlab; 01061 ace_yyn = -ace_yyn; 01062 goto ace_yyreduce; 01063 } 01064 01065 if (ace_yyn == ACE_YYFINAL) 01066 ACE_YYACCEPT; 01067 01068 /* Shift the look-ahead token. */ 01069 ACE_YY_SYMBOL_PRINT ("Shifting", ace_yytoken, &ace_yylval, &ace_yylloc); 01070 01071 /* Discard the token being shifted unless it is eof. */ 01072 if (ace_yychar != ACE_YYEOF) 01073 ace_yychar = ACE_YYEMPTY; 01074 01075 *++ace_yyvsp = ace_yylval; 01076 01077 01078 /* Count tokens shifted since error; after three, turn off error 01079 status. */ 01080 if (ace_yyerrstatus) 01081 ace_yyerrstatus--; 01082 01083 ace_yystate = ace_yyn; 01084 goto ace_yynewstate; 01085 01086 01087 /*-----------------------------------------------------------. 01088 | ace_yydefault -- do the default action for the current state. | 01089 `-----------------------------------------------------------*/ 01090 ace_yydefault: 01091 ace_yyn = ace_yydefact[ace_yystate]; 01092 if (ace_yyn == 0) 01093 goto ace_yyerrlab; 01094 goto ace_yyreduce; 01095 01096 01097 /*-----------------------------. 01098 | ace_yyreduce -- Do a reduction. | 01099 `-----------------------------*/ 01100 ace_yyreduce: 01101 /* ace_yyn is the number of a rule to reduce with. */ 01102 ace_yylen = ace_yyr2[ace_yyn]; 01103 01104 /* If ACE_YYLEN is nonzero, implement the default value of the action: 01105 `$$ = $1'. 01106 01107 Otherwise, the following line sets ACE_YYVAL to garbage. 01108 This behavior is undocumented and Bison 01109 users should not rely upon it. Assigning to ACE_YYVAL 01110 unconditionally makes the parser a bit smaller, and it avoids a 01111 GCC warning that ACE_YYVAL may be used uninitialized. */ 01112 ace_yyval = ace_yyvsp[1-ace_yylen]; 01113 01114 01115 ACE_YY_REDUCE_PRINT (ace_yyn); 01116 switch (ace_yyn) 01117 { 01118 case 2: 01119 01120 { 01121 if ((ace_yyvsp[0].parse_node_) != 0) 01122 { 01123 (ace_yyvsp[0].parse_node_)->apply (ACE_SVC_CONF_PARAM->config, ACE_SVC_CONF_PARAM->yyerrno); 01124 delete (ace_yyvsp[0].parse_node_); 01125 } 01126 ACE_SVC_CONF_PARAM->obstack.release (); 01127 ;} 01128 break; 01129 01130 case 3: 01131 01132 { 01133 ACE_SVC_CONF_PARAM->obstack.release (); 01134 ;} 01135 break; 01136 01137 case 11: 01138 01139 { 01140 if ((ace_yyvsp[-1].svc_record_) != 0) 01141 (ace_yyval.parse_node_) = new ACE_Dynamic_Node ((ace_yyvsp[-1].svc_record_), (ace_yyvsp[0].ident_)); 01142 else 01143 (ace_yyval.parse_node_) = 0; 01144 ;} 01145 break; 01146 01147 case 12: 01148 01149 { 01150 (ace_yyval.parse_node_) = new ACE_Static_Node ((ace_yyvsp[-1].ident_), (ace_yyvsp[0].ident_)); 01151 ;} 01152 break; 01153 01154 case 13: 01155 01156 { 01157 (ace_yyval.parse_node_) = new ACE_Suspend_Node ((ace_yyvsp[0].ident_)); 01158 ;} 01159 break; 01160 01161 case 14: 01162 01163 { 01164 (ace_yyval.parse_node_) = new ACE_Resume_Node ((ace_yyvsp[0].ident_)); 01165 ;} 01166 break; 01167 01168 case 15: 01169 01170 { 01171 (ace_yyval.parse_node_) = new ACE_Remove_Node ((ace_yyvsp[0].ident_)); 01172 ;} 01173 break; 01174 01175 case 16: 01176 01177 { 01178 (ace_yyval.parse_node_) = new ACE_Stream_Node ((ace_yyvsp[-1].static_node_), (ace_yyvsp[0].parse_node_)); 01179 ;} 01180 break; 01181 01182 case 17: 01183 01184 { (ace_yyval.static_node_) = new ACE_Static_Node ((ace_yyvsp[0].ident_)); ;} 01185 break; 01186 01187 case 18: 01188 01189 { 01190 (ace_yyval.parse_node_) = new ACE_Dummy_Node ((ace_yyvsp[-1].static_node_), (ace_yyvsp[0].parse_node_)); 01191 ;} 01192 break; 01193 01194 case 19: 01195 01196 { 01197 ;} 01198 break; 01199 01200 case 20: 01201 01202 { 01203 ;} 01204 break; 01205 01206 case 21: 01207 01208 { 01209 // Initialize left context... 01210 (ace_yyval.static_node_) = (ace_yyvsp[-1].static_node_); 01211 ;} 01212 break; 01213 01214 case 22: 01215 01216 { 01217 (ace_yyval.parse_node_) = (ace_yyvsp[-1].parse_node_); 01218 ;} 01219 break; 01220 01221 case 23: 01222 01223 { (ace_yyval.parse_node_) = 0; ;} 01224 break; 01225 01226 case 24: 01227 01228 { 01229 if ((ace_yyvsp[0].parse_node_) != 0) 01230 { 01231 (ace_yyvsp[0].parse_node_)->link ((ace_yyvsp[-1].parse_node_)); 01232 (ace_yyval.parse_node_) = (ace_yyvsp[0].parse_node_); 01233 } 01234 ;} 01235 break; 01236 01237 case 25: 01238 01239 { (ace_yyval.parse_node_) = 0; ;} 01240 break; 01241 01242 case 26: 01243 01244 { 01245 ACE_Static_Node *svc_type = (ace_yyvsp[0].static_node_); 01246 01247 if (svc_type != 0) 01248 { 01249 ACE_Static_Node *module = (ace_yyvsp[-2].static_node_); 01250 01251 ACE_ARGV args (svc_type->parameters ()); 01252 ACE_Module_Type *mt = ace_get_module (module->record (ACE_SVC_CONF_PARAM->config), 01253 svc_type->record (ACE_SVC_CONF_PARAM->config), 01254 ACE_SVC_CONF_PARAM->yyerrno); 01255 ACE_Stream_Type *st = 01256 dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (module->record (ACE_SVC_CONF_PARAM->config)->type ())); 01257 01258 if (mt->init (args.argc (), args.argv ()) == -1 01259 || st->push (mt) == -1) 01260 { 01261 ACE_ERROR ((LM_ERROR, 01262 ACE_LIB_TEXT ("dynamic initialization failed for Module %s\n"), 01263 svc_type->name ())); 01264 ACE_SVC_CONF_PARAM->yyerrno++; 01265 } 01266 } 01267 ;} 01268 break; 01269 01270 case 27: 01271 01272 { 01273 ACE_Static_Node *sn = (ace_yyvsp[-2].static_node_); 01274 ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config), 01275 (ace_yyvsp[0].static_node_)->name (), 01276 ACE_SVC_CONF_PARAM->yyerrno); 01277 01278 if (((ACE_Stream_Type *) sn->record (ACE_SVC_CONF_PARAM->config)->type ())->push (mt) == -1) 01279 { 01280 ACE_ERROR ((LM_ERROR, 01281 ACE_LIB_TEXT ("Problem with static\n"))); 01282 ACE_SVC_CONF_PARAM->yyerrno++; 01283 } 01284 ;} 01285 break; 01286 01287 case 28: 01288 01289 { 01290 ACE_Static_Node *sn = (ace_yyvsp[-2].static_node_); 01291 ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config), 01292 sn->name (), 01293 ACE_SVC_CONF_PARAM->yyerrno); 01294 if (mt != 0) 01295 mt->suspend (); 01296 ;} 01297 break; 01298 01299 case 29: 01300 01301 { 01302 ACE_Static_Node *sn = (ace_yyvsp[-2].static_node_); 01303 ACE_Module_Type *mt = ace_get_module (sn->record (ACE_SVC_CONF_PARAM->config), 01304 (ace_yyvsp[0].static_node_)->name (), 01305 ACE_SVC_CONF_PARAM->yyerrno); 01306 if (mt != 0) 01307 mt->resume (); 01308 ;} 01309 break; 01310 01311 case 30: 01312 01313 { 01314 ACE_Static_Node *stream = (ace_yyvsp[-2].static_node_); 01315 ACE_Static_Node *module = (ace_yyvsp[0].static_node_); 01316 ACE_Module_Type *mt = ace_get_module (stream->record (ACE_SVC_CONF_PARAM->config), 01317 module->name (), 01318 ACE_SVC_CONF_PARAM->yyerrno); 01319 01320 ACE_Stream_Type *st = 01321 dynamic_cast<ACE_Stream_Type *> (const_cast<ACE_Service_Type_Impl *> (stream->record (ACE_SVC_CONF_PARAM->config)->type ())); 01322 if (mt != 0 && st->remove (mt) == -1) 01323 { 01324 ACE_ERROR ((LM_ERROR, 01325 ACE_LIB_TEXT ("cannot remove Module_Type %s from STREAM_Type %s\n"), 01326 module->name (), 01327 stream->name ())); 01328 ACE_SVC_CONF_PARAM->yyerrno++; 01329 } 01330 ;} 01331 break; 01332 01333 case 31: 01334 01335 { 01336 (ace_yyval.svc_record_) = new ACE_Service_Type_Factory ((ace_yyvsp[-3].ident_), (ace_yyvsp[-2].type_), (ace_yyvsp[-1].location_node_), (ace_yyvsp[0].type_)); 01337 ;} 01338 break; 01339 01340 case 32: 01341 01342 { 01343 (ace_yyval.type_) = 1; 01344 ;} 01345 break; 01346 01347 case 33: 01348 01349 { 01350 (ace_yyval.type_) = 0; 01351 ;} 01352 break; 01353 01354 case 34: 01355 01356 { 01357 (ace_yyval.type_) = 1; 01358 ;} 01359 break; 01360 01361 case 35: 01362 01363 { 01364 (ace_yyval.location_node_) = new ACE_Object_Node ((ace_yyvsp[-2].ident_), (ace_yyvsp[0].ident_)); 01365 ;} 01366 break; 01367 01368 case 36: 01369 01370 { 01371 (ace_yyval.location_node_) = new ACE_Function_Node ((ace_yyvsp[-4].ident_), (ace_yyvsp[-2].ident_)); 01372 ;} 01373 break; 01374 01375 case 37: 01376 01377 { 01378 (ace_yyval.location_node_) = new ACE_Static_Function_Node ((ace_yyvsp[-2].ident_)); 01379 ;} 01380 break; 01381 01382 case 38: 01383 01384 { 01385 (ace_yyval.type_) = ACE_MODULE_T; 01386 ;} 01387 break; 01388 01389 case 39: 01390 01391 { 01392 (ace_yyval.type_) = ACE_SVC_OBJ_T; 01393 ;} 01394 break; 01395 01396 case 40: 01397 01398 { 01399 (ace_yyval.type_) = ACE_STREAM_T; 01400 ;} 01401 break; 01402 01403 case 42: 01404 01405 { (ace_yyval.ident_) = 0; ;} 01406 break; 01407 01408 01409 } 01410 01411 /* Line 1037 of yacc.c. */ 01412 01413 01414 ace_yyvsp -= ace_yylen; 01415 ace_yyssp -= ace_yylen; 01416 01417 01418 ACE_YY_STACK_PRINT (ace_yyss, ace_yyssp); 01419 01420 *++ace_yyvsp = ace_yyval; 01421 01422 01423 /* Now `shift' the result of the reduction. Determine what state 01424 that goes to, based on the state we popped back to and the rule 01425 number reduced by. */ 01426 01427 ace_yyn = ace_yyr1[ace_yyn]; 01428 01429 ace_yystate = ace_yypgoto[ace_yyn - ACE_YYNTOKENS] + *ace_yyssp; 01430 if (0 <= ace_yystate && ace_yystate <= ACE_YYLAST && ace_yycheck[ace_yystate] == *ace_yyssp) 01431 ace_yystate = ace_yytable[ace_yystate]; 01432 else 01433 ace_yystate = ace_yydefgoto[ace_yyn - ACE_YYNTOKENS]; 01434 01435 goto ace_yynewstate; 01436 01437 01438 /*------------------------------------. 01439 | ace_yyerrlab -- here on detecting error | 01440 `------------------------------------*/ 01441 ace_yyerrlab: 01442 /* If not already recovering from an error, report this error. */ 01443 if (!ace_yyerrstatus) 01444 { 01445 ++ace_yynerrs; 01446 #if ACE_YYERROR_VERBOSE 01447 ace_yyn = ace_yypact[ace_yystate]; 01448 01449 if (ACE_YYPACT_NINF < ace_yyn && ace_yyn < ACE_YYLAST) 01450 { 01451 ACE_YYSIZE_T ace_yysize = 0; 01452 int ace_yytype = ACE_YYTRANSLATE (ace_yychar); 01453 const char* ace_yyprefix; 01454 char *ace_yymsg; 01455 int ace_yyx; 01456 01457 /* Start ACE_YYX at -ACE_YYN if negative to avoid negative indexes in 01458 ACE_YYCHECK. */ 01459 int ace_yyxbegin = ace_yyn < 0 ? -ace_yyn : 0; 01460 01461 /* Stay within bounds of both ace_yycheck and ace_yytname. */ 01462 int ace_yychecklim = ACE_YYLAST - ace_yyn; 01463 int ace_yyxend = ace_yychecklim < ACE_YYNTOKENS ? ace_yychecklim : ACE_YYNTOKENS; 01464 int ace_yycount = 0; 01465 01466 ace_yyprefix = ", expecting "; 01467 for (ace_yyx = ace_yyxbegin; ace_yyx < ace_yyxend; ++ace_yyx) 01468 if (ace_yycheck[ace_yyx + ace_yyn] == ace_yyx && ace_yyx != ACE_YYTERROR) 01469 { 01470 ace_yysize += ace_yystrlen (ace_yyprefix) + ace_yystrlen (ace_yytname [ace_yyx]); 01471 ace_yycount += 1; 01472 if (ace_yycount == 5) 01473 { 01474 ace_yysize = 0; 01475 break; 01476 } 01477 } 01478 ace_yysize += (sizeof ("syntax error, unexpected ") 01479 + ace_yystrlen (ace_yytname[ace_yytype])); 01480 ace_yymsg = (ACE_TCHAR *) ACE_YYSTACK_ALLOC (ace_yysize); 01481 if (ace_yymsg != 0) 01482 { 01483 char *ace_yyp = ace_yystpcpy (ace_yymsg, "syntax error, unexpected "); 01484 ace_yyp = ace_yystpcpy (ace_yyp, ace_yytname[ace_yytype]); 01485 01486 if (ace_yycount < 5) 01487 { 01488 ace_yyprefix = ", expecting "; 01489 for (ace_yyx = ace_yyxbegin; ace_yyx < ace_yyxend; ++ace_yyx) 01490 if (ace_yycheck[ace_yyx + ace_yyn] == ace_yyx && ace_yyx != ACE_YYTERROR) 01491 { 01492 ace_yyp = ace_yystpcpy (ace_yyp, ace_yyprefix); 01493 ace_yyp = ace_yystpcpy (ace_yyp, ace_yytname[ace_yyx]); 01494 ace_yyprefix = " or "; 01495 } 01496 } 01497 ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, ace_yymsg); 01498 ACE_YYSTACK_FREE (ace_yymsg); 01499 } 01500 else 01501 ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "syntax error; also virtual memory exhausted"); 01502 } 01503 else 01504 #endif /* ACE_YYERROR_VERBOSE */ 01505 ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "syntax error"); 01506 } 01507 01508 01509 01510 if (ace_yyerrstatus == 3) 01511 { 01512 /* If just tried and failed to reuse look-ahead token after an 01513 error, discard it. */ 01514 01515 if (ace_yychar <= ACE_YYEOF) 01516 { 01517 /* If at end of input, pop the error token, 01518 then the rest of the stack, then return failure. */ 01519 if (ace_yychar == ACE_YYEOF) 01520 for (;;) 01521 { 01522 01523 ACE_YYPOPSTACK; 01524 if (ace_yyssp == ace_yyss) 01525 ACE_YYABORT; 01526 ace_yydestruct ("Error: popping", 01527 ace_yystos[*ace_yyssp], ace_yyvsp); 01528 } 01529 } 01530 else 01531 { 01532 ace_yydestruct ("Error: discarding", ace_yytoken, &ace_yylval); 01533 ace_yychar = ACE_YYEMPTY; 01534 } 01535 } 01536 01537 /* Else will try to reuse look-ahead token after shifting the error 01538 token. */ 01539 goto ace_yyerrlab1; 01540 01541 01542 /*---------------------------------------------------. 01543 | ace_yyerrorlab -- error raised explicitly by ACE_YYERROR. | 01544 `---------------------------------------------------*/ 01545 ace_yyerrorlab: 01546 01547 #if defined (__GNUC__) || defined (ACE_WIN32) 01548 /* Pacify GCC when the user code never invokes ACE_YYERROR and the label 01549 ace_yyerrorlab therefore never appears in user code. */ 01550 if (0) 01551 goto ace_yyerrorlab; 01552 #endif 01553 01554 ace_yyvsp -= ace_yylen; 01555 ace_yyssp -= ace_yylen; 01556 ace_yystate = *ace_yyssp; 01557 goto ace_yyerrlab1; 01558 01559 01560 /*-------------------------------------------------------------. 01561 | ace_yyerrlab1 -- common code for both syntax error and ACE_YYERROR. | 01562 `-------------------------------------------------------------*/ 01563 ace_yyerrlab1: 01564 ace_yyerrstatus = 3; /* Each real token shifted decrements this. */ 01565 01566 for (;;) 01567 { 01568 ace_yyn = ace_yypact[ace_yystate]; 01569 if (ace_yyn != ACE_YYPACT_NINF) 01570 { 01571 ace_yyn += ACE_YYTERROR; 01572 if (0 <= ace_yyn && ace_yyn <= ACE_YYLAST && ace_yycheck[ace_yyn] == ACE_YYTERROR) 01573 { 01574 ace_yyn = ace_yytable[ace_yyn]; 01575 if (0 < ace_yyn) 01576 break; 01577 } 01578 } 01579 01580 /* Pop the current state because it cannot handle the error token. */ 01581 if (ace_yyssp == ace_yyss) 01582 ACE_YYABORT; 01583 01584 01585 ace_yydestruct ("Error: popping", ace_yystos[ace_yystate], ace_yyvsp); 01586 ACE_YYPOPSTACK; 01587 ace_yystate = *ace_yyssp; 01588 ACE_YY_STACK_PRINT (ace_yyss, ace_yyssp); 01589 } 01590 01591 if (ace_yyn == ACE_YYFINAL) 01592 ACE_YYACCEPT; 01593 01594 *++ace_yyvsp = ace_yylval; 01595 01596 01597 /* Shift the error token. */ 01598 ACE_YY_SYMBOL_PRINT ("Shifting", ace_yystos[ace_yyn], ace_yyvsp, ace_yylsp); 01599 01600 ace_yystate = ace_yyn; 01601 goto ace_yynewstate; 01602 01603 01604 /*-------------------------------------. 01605 | ace_yyacceptlab -- ACE_YYACCEPT comes here. | 01606 `-------------------------------------*/ 01607 ace_yyacceptlab: 01608 ace_yyresult = 0; 01609 goto ace_yyreturn; 01610 01611 /*-----------------------------------. 01612 | ace_yyabortlab -- ACE_YYABORT comes here. | 01613 `-----------------------------------*/ 01614 ace_yyabortlab: 01615 ace_yydestruct ("Error: discarding lookahead", 01616 ace_yytoken, &ace_yylval); 01617 ace_yychar = ACE_YYEMPTY; 01618 ace_yyresult = 1; 01619 goto ace_yyreturn; 01620 01621 #ifndef ace_yyoverflow 01622 /*----------------------------------------------. 01623 | ace_yyoverflowlab -- parser overflow comes here. | 01624 `----------------------------------------------*/ 01625 ace_yyoverflowlab: 01626 ace_yyerror (ACE_SVC_CONF_PARAM->yyerrno, ACE_SVC_CONF_PARAM->yylineno, "parser stack overflow"); 01627 ace_yyresult = 2; 01628 /* Fall through. */ 01629 #endif 01630 01631 ace_yyreturn: 01632 #ifndef ace_yyoverflow 01633 if (ace_yyss != ace_yyssa) 01634 ACE_YYSTACK_FREE (ace_yyss); 01635 #endif 01636 return ace_yyresult; 01637 } |
|
Performs the lexical analysis.
Definition at line 78 of file Svc_Conf.h. |
|
Name of input stream.
Definition at line 81 of file Svc_Conf.h. |
|
Holds the length of the lexeme for the current token.
Definition at line 90 of file Svc_Conf.h. |
|
Holds the lexeme for the current token.
Definition at line 87 of file Svc_Conf.h. |