peg.ebnf: unescape strings in a few places.

db4
John Benediktsson 2015-04-19 20:47:26 -07:00
parent 338e99e434
commit 56bb141257
1 changed files with 4 additions and 16 deletions

View File

@ -6,6 +6,7 @@ math.parser multiline namespaces parser peg peg.parsers
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
@ -108,19 +109,6 @@ C: <ebnf> ebnf
#! begin and end.
[ syntax ] 2dip syntax pack ;
#! Don't want to use 'replace' in an action since replace doesn't infer.
#! Do the compilation of the peg at parse time and call (replace).
PEG: escaper ( string -- ast )
[
"\\t" token [ drop "\t" ] action ,
"\\n" token [ drop "\n" ] action ,
"\\r" token [ drop "\r" ] action ,
"\\\\" token [ drop "\\" ] action ,
] choice* any-char-parser 2array choice repeat0 ;
: replace-escapes ( string -- string )
escaper sift [ [ tree-write ] each ] with-string-writer ;
: insert-escapes ( string -- string )
[
"\t" token [ drop "\\t" ] action ,
@ -136,7 +124,7 @@ PEG: escaper ( string -- ast )
[
[ 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
@ -201,7 +189,7 @@ PEG: escaper ( string -- ast )
[ "[" syntax , "[" token ensure-not , ] seq* hide ,
[ CHAR: ] = not ] satisfy repeat1 ,
"]" syntax ,
] seq* [ first >string <ebnf-range> ] action ;
] seq* [ first >string unescape-string <ebnf-range> ] action ;
: ('element') ( -- parser )
#! An element of a rule. It can be a terminal or a
@ -243,7 +231,7 @@ DEFER: 'action'
DEFER: 'choice'
: grouped ( quot suffix -- parser )
: grouped ( quot suffix -- parser )
#! Parse a group of choices, with a suffix indicating
#! the type of group (repeat0, repeat1, etc) and
#! an quot that is the action that produces the AST.