   #! A terminal is an identifier enclosed in quotations
   #! and it represents the literal value of the identifier.
   'identifier' [ <ebnf-terminal> ] action ;
+
+: 'foreign-name' ( -- parser )
+  #! Parse a valid foreign parser name
+  [
+    {
+      [ dup blank?    ]
+      [ dup CHAR: > = ]
+    } 0|| not nip    
+  ] satisfy repeat1 [ >string ] action ;
+
+: 'foreign' ( -- parser )
+  #! A foreign call is a call to a rule in another ebnf grammar
+  [
+    "<foreign" syntax ,
+    'foreign-name' sp ,
+    'foreign-name' sp optional ,
+    ">" syntax ,
+  ] seq* [ first2 <ebnf-foreign> ] action ;
 
 : 'any-character' ( -- parser )
   #! A parser to match the symbol for any character match.


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

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