terminal[parser_type & tree, vertex_token parent_value, arc_token & current_link, parser_type::arc_label_type & current_dollar_label] ::= "'" regular_expression[tree, parent_value, current_link] regexp_tail_end[tree, current_link]? "'" "i"? { current_dollar_label = tree.arc_label(* current_link); tree.add_dollar_label(current_dollar_label); if (!$6.empty() || !tree.get_case_sensitive()) tree.case_insensitize(current_link); } | "'" regexp_tail[tree, parent_value, current_link]? "'" "i"? { if (!$5.empty() || !tree.get_case_sensitive()) tree.case_insensitize(current_link); } | '\'"' quoted_string[tree, parent_value, current_link] '\"' "i"? { current_dollar_label = tree.arc_label(* current_link); tree.add_dollar_label(current_dollar_label); if (!$4.empty() || !tree.get_case_sensitive()) tree.case_insensitize(current_link); } | "@" { current_link = tree.insert_blank_terminal(parent_value); current_dollar_label = tree.arc_label(* current_link); tree.add_dollar_label(current_dollar_label); } | "!" { current_link = tree.insert_final_terminal(parent_value); current_dollar_label = tree.arc_label(* current_link); tree.add_dollar_label(current_dollar_label); } | '%' abnf_value[tree, parent_value, current_link] { current_dollar_label = tree.arc_label(* current_link); tree.add_dollar_label(current_dollar_label); } | "~" { current_link = tree.insert_terminal_range_list(parent_value, "[]"); current_dollar_label = tree.arc_label(* current_link); tree.add_dollar_label(current_dollar_label); } |