|
Scarlet Line - SOFTWARE DESIGN & DEVELOPMENT |
[Home]->[Documentation]->[Syntac Universal Parser]->[Other Grammars]->[Extended Backus-Naur form (EBNF)]->[Symbols]->[regexp_predef_range]
|
ebnf::regexp_predef_range
|
| 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(); } } } } } |
|
|