     [
         [ CHAR: " = not ] satisfy repeat1 "\"" "\"" surrounded-by ,
         [ CHAR: ' = not ] satisfy repeat1 "'" "'" surrounded-by ,
-    ] choice* [ >string replace-escapes ] action ;
+    ] choice* [ >string unescape-string ] action ;
 
 : 'non-terminal' ( -- parser )
     #! A non-terminal is the name of another rule. It can

        [ "[" syntax , "[" token ensure-not , ] seq* hide ,
        [ CHAR: ] = not ] satisfy repeat1 ,
        "]" syntax ,
    ] seq* [ first >string <ebnf-range> ] action ;

: ('element') ( -- parser )
    #! An element of a rule. It can be a terminal or a

peg.search quotations sequences splitting stack-checker strings
summary unicode.categories words ;
FROM: compiler.units => with-compilation-unit ;
FROM: strings.parser => unescape-string ;
FROM: vocabs.parser => search ;
FROM: peg.search => replace ;
IN: peg.ebnf
