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