 C: <ebnf-repeat0> ebnf-repeat0
 C: <ebnf-repeat1> ebnf-repeat1
 C: <ebnf-ignore> ebnf-ignore
-C: <ebnf-ignore-repeat0> ebnf-ignore-repeat0
-C: <ebnf-ignore-repeat1> ebnf-ignore-repeat1
 C: <ebnf-optional> ebnf-optional
 C: <ebnf-whitespace> ebnf-whitespace
 C: <ebnf-tokenizer> ebnf-tokenizer

                any-character-parser ,
            ] choice*
            [ dup , "~" token hide , ] seq* [ first <ebnf-ignore> ] action ,
            [ dup , "*~" token hide , ] seq* [ first <ebnf-ignore-repeat0> ] action ,
            [ dup , "+~" token hide , ] seq* [ first <ebnf-ignore-repeat1> ] action ,
            [ dup , "*" token hide , ] seq* [ first <ebnf-repeat0> ] action ,
            [ dup , "+" token hide , ] seq* [ first <ebnf-repeat1> ] action ,
            [ dup , "?[" token ensure-not , "?" token hide , ] seq* [ first <ebnf-optional> ] action ,

    [ <ebnf-ignore> ] "~" syntax grouped ;

: ignore-repeat0-parser ( -- parser )
    [ <ebnf-repeat0> <ebnf-ignore> ] "*~" syntax grouped ;

: ignore-repeat1-parser ( -- parser )
    [ <ebnf-repeat1> <ebnf-ignore> ] "+~" syntax grouped ;

: optional-parser ( -- parser )
    [ <ebnf-optional> ] "?" syntax grouped ;
