Scarlet Line home page Scarlet Line - SOFTWARE DESIGN & DEVELOPMENT

[Home]->[Documentation]->[Syntac Universal Parser]->[Other Grammars]->[Extended Backus-Naur form (EBNF)]->[Symbols]->[symbol_declare]

Expand All
Collapse All
Contents

ebnf::symbol_declare Locate in Contents

Declaration Locate in Contents

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);
            }

Composition Locate in Contents

production_rule symbol_declare Concatenation Node label Alternation Node Alternation Node expands_to Concatenation Node @ lws @ '[' param_list<std::string> '\\]'

State Machine Locate in Contents

start:816:$0 label|{818|$1|819} final:817:$0 param_list<std::string>|{834|$5|835} lws|{735|$8|736} expands_to|{840|$9|841}