symbol_declare[parser_type & tree, vertex_token & return_value] ::= { std::string _symbol_name, _param_list;/* }*/ label[_symbol_name] ( "[" (param_list { assign(_param_list, $0);/* } ) */"]" )? lws? expands_to { if ( (return_value = tree.is_symbol_defined(_symbol_name.c_str())) != 0 && !tree.is_from_default_file(return_value) ) { std::cerr << $file << ':' << $line << ": warning: overriding symbol definition: " << _symbol_name << std::endl; std::string _def_line; std::cerr << tree.get_definition_line(return_value, _def_line) << ": symbol " << _symbol_name << " previously defined here" << std::endl; } return_value = tree.create_symbol(_symbol_name.c_str(), $line); if (_M_verbose) { std::cerr << "Define Symbol " << return_value << ":" << _symbol_name << std::endl; } /* clear any code previously associated with it */ tree.reset_current_symbol(return_value); tree.set_is_symbol_implicit_ws(return_value); tree.set_symbol_param_list(return_value, _param_list); tree.set_primary_symbol_if_blank(_symbol_name); tree.set_default_type(return_value); } |