]> gitweb.factorcode.org Git - factor.git/commitdiff
parser-combinators: refactor <*> and allow for promises to be implicitly forced in...
authorchris.double <chris.double@double.co.nz>
Fri, 6 Oct 2006 02:53:55 +0000 (02:53 +0000)
committerchris.double <chris.double@double.co.nz>
Fri, 6 Oct 2006 02:53:55 +0000 (02:53 +0000)
contrib/parser-combinators/parser-combinators.factor

index 14c7b8c0aeaf13f372e757dee59fea1b191aa621..38d5a9ed9bc12af71692de0fcd95dfd76b141223 100644 (file)
@@ -7,6 +7,9 @@ IN: parser-combinators
 ! Parser combinator protocol
 GENERIC: (parse) ( input parser -- list )
 
+M: promise (parse) ( input parser -- list )
+  force (parse) ;
+
 : parse ( input parser -- promise )
   [ (parse) ] curry curry <promise> ;
 
@@ -186,16 +189,8 @@ M: some-parser (parse) ( input parser -- result )
   #! Same as <&> except flatten the result.
   <&> [ dup second swap first [ , % ] { } make ] <@ ;
 
-DEFER: <*>
-
-: (<*>) ( parser -- parser )
-  #! Non-delayed implementation of <*>
-  dup <*> <&:> [ ] succeed <|> ;
-  
 : <*> ( parser -- parser )
-  #! Return a parser that accepts zero or more occurences of the original
-  #! parser.
-  [  (<*>) call ] curry ;
+  [ dup <*> <&:> { } succeed <|> ] curry <promise> ;
 
 : (<+>) ( parser -- parser )
   #! Non-delayed implementation of <+>