     [ 
       'non-terminal' ,
       'terminal' ,
+      'foreign' ,
       'range-parser' ,
       'any-character' ,
     ] choice* ,

M: ebnf-terminal (transform) ( ast -- parser )
  symbol>> token ;

: parser-not-found ( name -- * )
  [
    "Parser " % % " not found." %


C: <ebnf-non-terminal> ebnf-non-terminal
C: <ebnf-terminal> ebnf-terminal
C: <ebnf-foreign> ebnf-foreign
C: <ebnf-any-character> ebnf-any-character
C: <ebnf-range> ebnf-range
C: <ebnf-ensure> ebnf-ensure
