replaced with tokenizer support in ebnf grammar itself.
parse-result-ast transform dup dup parser [ main swap at compile ] with-variable\r
[ compiled-parse ] curry [ with-scope ] curry ;\r
\r
-: [EBNF \r
- scan {\r
- { "+" [ scan-word execute "" swap ] }\r
- [ " " append default-tokenizer ]\r
- } case \ tokenizer set-global\r
- [ "EBNF]" parse-multiline-string ] [ drop "" ] recover append ebnf>quot nip parsed \r
- reset-tokenizer ; parsing\r
+: [EBNF "EBNF]" reset-tokenizer parse-multiline-string ebnf>quot nip parsed reset-tokenizer ; parsing\r
\r
: EBNF: \r
- CREATE-WORD scan {\r
- { "+" [ scan-word execute "" swap ] }\r
- [ " " append default-tokenizer ]\r
- } case \ tokenizer set-global\r
- dupd [ ";EBNF" parse-multiline-string ] [ drop "" ] recover append \r
+ reset-tokenizer CREATE-WORD dup ";EBNF" parse-multiline-string \r
ebnf>quot swapd 1 1 <effect> define-declared "ebnf-parser" set-word-prop \r
reset-tokenizer ; parsing\r
\r
IN: peg.javascript
: parse-javascript ( string -- ast )
- tokenizer [
- ast>> javascript [
+ tokenize-javascript [
+ ast>> parse-javascript [
ast>>
] [
"Unable to parse JavaScript" throw
peg.javascript.parser accessors multiline sequences math ;
IN: peg.javascript.parser.tests
-\ javascript must-infer
+\ parse-javascript must-infer
{
T{
}
}
} [
- "123; 'hello'; foo(x);" tokenizer ast>> javascript ast>>
+ "123; 'hello'; foo(x);" tokenize-javascript ast>> parse-javascript ast>>
] unit-test
{ t } [
<"
var x=5
var y=10
-"> tokenizer ast>> javascript remaining>> length zero?
+"> tokenize-javascript ast>> parse-javascript remaining>> length zero?
] unit-test
initial = f(initial, seq[i]);
return initial;
}
-"> tokenizer ast>> javascript remaining>> length zero?
+"> tokenize-javascript ast>> parse-javascript remaining>> length zero?
] unit-test
{ t } [
r.length = this.length - index;
return r;
}
-"> tokenizer ast>> javascript remaining>> length zero?
+"> tokenize-javascript ast>> parse-javascript remaining>> length zero?
] unit-test
#! Grammar for JavaScript. Based on OMeta-JS example from:
#! http://jarrett.cs.ucla.edu/ometa-js/#JavaScript_Compiler
-EBNF: javascript
+EBNF: parse-javascript
End = !(.)
Space = " " | "\t" | "\n"
Spaces = Space* => [[ ignore ]]
USING: kernel tools.test peg peg.javascript.ast peg.javascript.tokenizer accessors ;
IN: peg.javascript.tokenizer.tests
-\ tokenizer must-infer
+\ tokenize-javascript must-infer
{
V{
";"
}
} [
- "123; 'hello'; foo(x);" tokenizer ast>>
+ "123; 'hello'; foo(x);" tokenize-javascript ast>>
] unit-test
USE: prettyprint
-EBNF: javascript-tokenizer
+EBNF: tokenize-javascript
Letter = [a-zA-Z]
Digit = [0-9]
Digits = Digit+