]> gitweb.factorcode.org Git - factor.git/commitdiff
regexp: slightly more complicated tokenization to handle another case.
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 17 Mar 2019 20:12:41 +0000 (13:12 -0700)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 17 Mar 2019 20:14:28 +0000 (13:14 -0700)
R/ [^/]/
R/ (/|abc)/

basis/regexp/regexp.factor

index c31571c718711f02bec2549ec94bd848a02afc49..14310ddc306b2e2c84ed0101962786b8185262da 100644 (file)
@@ -197,11 +197,27 @@ PRIVATE>
 
 <PRIVATE
 
-: take-until ( lexer -- string )
-    dup skip-blank [
+:: (take-until) ( col line end -- col' line )
+    "\\" end suffix :> tokens
+    col line [
+        [ [ tokens member? ] find-from ] keep swap [
+            CHAR: \ = [ [ 2 + ] dip t ] [ [ 1 + ] dip f ] if
+        ] [
+            "Unterminated regexp" throw
+        ] if*
+    ] loop ;
+
+:: take-until ( lexer -- string )
+    lexer skip-blank
+    lexer [
         dupd [
-            [ [ "\\/" member? ] find-from ] keep swap [
-                CHAR: \ = [ [ 2 + ] dip t ] [ f ] if
+            [ [ "[(\\/" member? ] find-from ] keep swap [
+                {
+                    { CHAR: [ [ CHAR: ] (take-until) t ] }
+                    { CHAR: ( [ CHAR: ) (take-until) t ] }
+                    { CHAR: \ [ [ 2 + ] dip t ] }
+                    { CHAR: / [ f ] }
+                } case
             ] [
                 "Unterminated regexp" throw
             ] if*