Scarlet Line home page Scarlet Line - SOFTWARE DESIGN & DEVELOPMENT

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

Expand All
Collapse All
Contents

ebnf::regexp_predef_range Locate in Contents

Declaration Locate in Contents

regexp_predef_range[parser_type & tree, syntac::terminal_range & _range] ::=
    { std::string _char_class;/* bool _invert = false; }*/
(
        "."        { _char_class.assign("any");/* }*/
    |    "\\"
        (    "d" { _char_class.assign("digit");/* }*/
        |    "D" { _char_class.assign("digit");/* _invert = true; }*/
        |    "w" { _char_class.assign("word");/* }*/
        |    "W" { _char_class.assign("word");/* _invert = true; }*/
        |    "s" { _char_class.assign("space");/* }*/
        |    "S" { _char_class.assign("space");/* _invert = true; }*/
        |    "p{" '[A-Za-z_0-9&]+' "}"
                { assign(_char_class, $2);/* }*/
        |    "P{" '[A-Za-z_0-9&]+' "}"
                { assign(_char_class, $2);/* _invert = true; }*/
        )
    |    "[:"
        (    "L" { _char_class.assign("Letter");/* }*/
        |    "Lu"{ _char_class.assign("Uppercase_Letter");/* }*/
        |    "Ll"{ _char_class.assign("Lowercase_Letter");/* }*/
        |    "Lt"{ _char_class.assign("Titlecase_Letter");/* }*/
        |    "L&"{ _char_class.assign("LetterAmp");/* }*/
        |    "Lm"{ _char_class.assign("Modifier_Letter");/* }*/
        |    "Lo"{ _char_class.assign("Other_Letter");/* }*/

        |    "M" { _char_class.assign("Mark");/* }*/
        |    "Mn"{ _char_class.assign("Nonspacing_Mark");/* }*/
        |    "Me"{ _char_class.assign("Enclosing_Mark");/* }*/
        |    "Mc"{ _char_class.assign("Spacing_Mark");/* }*/

        |    "N" { _char_class.assign("Number");/* }*/
        |    "Nd"{ _char_class.assign("Decimal_Number");/* }*/
        |    "Nl"{ _char_class.assign("Letter_Number");/* }*/
        |    "No"{ _char_class.assign("Other_Number");/* }*/

        |    "Z" { _char_class.assign("Separator");/* }*/
        |    "Zs"{ _char_class.assign("Space_Separator");/* }*/
        |    "Zl"{ _char_class.assign("Line_Separator");/* }*/
        |    "Zp"{ _char_class.assign("Paragraph_Separator");/* }*/

        |    "C" { _char_class.assign("Other");/* }*/
        |    "Cc"{ _char_class.assign("Control");/* }*/
        |    "Cf"{ _char_class.assign("Format");/* }*/
        |    "Co"{ _char_class.assign("Private_Use");/* }*/
        |    "Cs"{ _char_class.assign("Surrogate");/* }*/
        |    "Cn"{ _char_class.assign("Unassigned");/* }*/

        |    "P" { _char_class.assign("Punctuation");/* }*/
        |    "Pd"{ _char_class.assign("Dash_Punctuation");/* }*/
        |    "Ps"{ _char_class.assign("Open_Punctuation");/* }*/
        |    "Pe"{ _char_class.assign("Close_Punctuation");/* }*/
        |    "Pc"{ _char_class.assign("Connector_Punctuation");/* }*/
        |    "Pi"{ _char_class.assign("Initial_Punctuation");/* }*/
        |    "Pf"{ _char_class.assign("Final_Punctuation");/* }*/
        |    "Po"{ _char_class.assign("Other_Punctuation");/* }*/

        |    "S" { _char_class.assign("Symbol");/* }*/
        |    "Sm"{ _char_class.assign("Math_Symbol");/* }*/
        |    "Sc"{ _char_class.assign("Currency_Symbol");/* }*/
        |    "Sk"{ _char_class.assign("Modifier_Symbol");/* }*/
        |    "So"{ _char_class.assign("Other_Symbol");/* }*/

        |    ('[A-Za-z_0-9&]+'    { assign(_char_class, $0);/* })*/
        )
        ":]"
)
    {
    if ( _char_class.empty() || !tree.is_symbol_defined(_char_class.c_str()))
        {
        std::cerr << $file << ':' << $line << ": warning: attempt to use undefined character class: " << _char_class << std::endl;
        }
    else
        {
        vertex_token class_symbol = tree.get_symbol_id(_char_class.c_str());
        arc_token _childx = tree.out_arcs_begin(class_symbol);
        if (_childx != tree.out_arcs_end(class_symbol))
            {
            vertex_token child_node = parser_type::arc_to(* _childx);
            if (tree.get_vertex_data(child_node).get_type() != syntac::parse_vertex::terminal_vertex_type)
                {
                std::cerr << $file << ':' << $line << ": warning: attempt to use non-simple symbol as character class: " << _char_class << std::endl;
                }
            else
                {
                _range.add_data(tree.get_vertex_data(child_node).get_name());
                if (_invert)
                    {
                    _range.invert();
                    }
                }
            }
        }
    }

Composition Locate in Contents

regexp_range regexp_predef_range Alternation Node regexp_sub_element '\\.' Concatenation Node Concatenation Node '\\\\' Alternation Node Concatenation Node Alternation Node Concatenation Node 'd' 'D' 'w' 'W' 's' 'S' Concatenation Node Concatenation Node '[' ':' 'L' Concatenation Node Concatenation Node Concatenation Node Concatenation Node Concatenation Node Concatenation Node 'M' Concatenation Node Concatenation Node Concatenation Node 'N' Concatenation Node Concatenation Node Concatenation Node 'Z' Concatenation Node Concatenation Node Concatenation Node 'C' Concatenation Node Concatenation Node Concatenation Node Concatenation Node Concatenation Node 'P' Concatenation Node Concatenation Node Concatenation Node Concatenation Node Concatenation Node Concatenation Node Concatenation Node 'S' Concatenation Node Concatenation Node Concatenation Node Concatenation Node Concatenation Node ':' '\\]' Concatenation Node Concatenation Node '}' Concatenation Node Concatenation Node '}' 'L' 'u' 'L' 'l' 'L' 't' 'L' '&' 'L' 'm' 'L' 'o' 'M' 'n' 'M' 'e' 'M' 'c' 'N' 'd' 'N' 'l' 'N' 'o' 'Z' 's' 'Z' 'l' 'Z' 'p' 'C' 'c' 'C' 'f' 'C' 'o' 'C' 's' 'C' 'n' 'P' 'd' 'P' 's' 'P' 'e' 'P' 'c' 'P' 'i' 'P' 'f' 'P' 'o' 'S' 'm' 'S' 'c' 'S' 'k' 'S' 'o' '[&0-9A-Z_a-z]' Iteration Node 'p' '{' '[&0-9A-Z_a-z]' Iteration Node 'P' '{' '[&0-9A-Z_a-z]' Iteration Node '[&0-9A-Z_a-z]' '[&0-9A-Z_a-z]' '[&0-9A-Z_a-z]'

State Machine Locate in Contents

start:911:$0 final:912:$0