]> gitweb.factorcode.org Git - factor.git/commitdiff
peg.ebnf: Allow ] in character classes. 2359/head
authorDoug Coleman <doug.coleman@gmail.com>
Tue, 3 Nov 2020 19:47:32 +0000 (13:47 -0600)
committerDoug Coleman <doug.coleman@gmail.com>
Tue, 3 Nov 2020 20:13:20 +0000 (14:13 -0600)
basis/peg/ebnf/ebnf-tests.factor
basis/peg/ebnf/ebnf.factor

index 60b5447abb40a53b7b96d5404bcf541e3d4f89b6..3230ae7fe3fbde5c01569f3a13ee1a5c5168cce2 100644 (file)
@@ -602,3 +602,17 @@ Tok                = Spaces (Number | Special )
     EBNF: foo2 [=[  Bar = "a":a-1 "a":a-2 => [[ a-1 a-2 2array ]] ]=]
     "aa" foo2
 ] unit-test
+
+{ "abc" } [
+    EBNF: parse-til-right-bracket [=[
+    foo = [^\]]+
+    ]=]
+    "abc]" parse-til-right-bracket >string
+] unit-test
+
+! Doesn't match anything, don't run it.
+{ } [
+    EBNF: parse-empty-range [=[
+    foo = []+
+    ]=]
+] unit-test
\ No newline at end of file
index 3a93551ca4fb54e6fc7814af32f4e2530ae1814b..e379eadb99b24d48c6ae6c356c5cda9ae7e4adfc 100644 (file)
@@ -161,7 +161,10 @@ C: <ebnf> ebnf
     ! Match the syntax for declaring character ranges
     [
         [ "[" syntax , "[" token ensure-not , ] seq* hide ,
-        [ CHAR: ] = not ] satisfy repeat1 ,
+        [
+            "\\]" token [ second ] action ,
+            [ CHAR: ] = not ] satisfy ,
+        ] choice* repeat0 ,
         "]" syntax ,
     ] seq* [ first >string unescape-string <ebnf-range> ] action ;