Add javascript tests. Minor changes to javascript grammar
parent
778573106c
commit
a5719e3397
|
@ -0,0 +1,42 @@
|
||||||
|
! Copyright (C) 2008 Chris Double.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
!
|
||||||
|
USING: kernel tools.test peg peg.javascript accessors ;
|
||||||
|
IN: peg.javascript.tests
|
||||||
|
|
||||||
|
\ javascript must-infer
|
||||||
|
|
||||||
|
{
|
||||||
|
V{
|
||||||
|
T{ ast-number f 123 }
|
||||||
|
";"
|
||||||
|
T{ ast-string f "hello" }
|
||||||
|
";"
|
||||||
|
T{ ast-name f "foo" }
|
||||||
|
"("
|
||||||
|
T{ ast-name f "x" }
|
||||||
|
")"
|
||||||
|
";"
|
||||||
|
}
|
||||||
|
} [
|
||||||
|
"123; 'hello'; foo(x);" tokenizer ast>>
|
||||||
|
] unit-test
|
||||||
|
|
||||||
|
{
|
||||||
|
T{
|
||||||
|
ast-begin
|
||||||
|
f
|
||||||
|
V{
|
||||||
|
T{ ast-number f 123 }
|
||||||
|
T{ ast-string f "hello" }
|
||||||
|
T{
|
||||||
|
ast-call
|
||||||
|
f
|
||||||
|
T{ ast-get f "foo" }
|
||||||
|
V{ T{ ast-get f "x" } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} [
|
||||||
|
"123; 'hello'; foo(x);" tokenizer ast>> javascript ast>>
|
||||||
|
] unit-test
|
|
@ -1,4 +1,4 @@
|
||||||
! Copyright (C) 2007 Chris Double.
|
! Copyright (C) 2008 Chris Double.
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
USING: kernel arrays strings math.parser sequences sequences.deep
|
USING: kernel arrays strings math.parser sequences sequences.deep
|
||||||
peg peg.ebnf peg.parsers memoize namespaces math accessors ;
|
peg peg.ebnf peg.parsers memoize namespaces math accessors ;
|
||||||
|
@ -49,14 +49,14 @@ TUPLE: ast-default cs ;
|
||||||
EBNF: tokenizer
|
EBNF: tokenizer
|
||||||
Letter = [a-zA-Z]
|
Letter = [a-zA-Z]
|
||||||
Digit = [0-9]
|
Digit = [0-9]
|
||||||
Digits = (Digit)+
|
Digits = Digit+
|
||||||
SingleLineComment = "//" (!("\n") .)* "\n" => [[ ignore ]]
|
SingleLineComment = "//" (!("\n") .)* "\n" => [[ ignore ]]
|
||||||
MultiLineComment = "/*" (!("*/") .)* "*/" => [[ ignore ]]
|
MultiLineComment = "/*" (!("*/") .)* "*/" => [[ ignore ]]
|
||||||
Space = " " | "\t" | "\n" | SingleLineComment | MultiLineComment
|
Space = " " | "\t" | "\n" | SingleLineComment | MultiLineComment
|
||||||
Spaces = (Space)* => [[ ignore ]]
|
Spaces = Space* => [[ ignore ]]
|
||||||
NameFirst = Letter | "$" | "_"
|
NameFirst = Letter | "$" | "_"
|
||||||
NameRest = NameFirst | Digit
|
NameRest = NameFirst | Digit
|
||||||
iName = NameFirst (NameRest)* => [[ first2 swap prefix >string ]]
|
iName = NameFirst NameRest* => [[ first2 swap prefix >string ]]
|
||||||
Keyword = ("break"
|
Keyword = ("break"
|
||||||
| "case"
|
| "case"
|
||||||
| "catch"
|
| "catch"
|
||||||
|
@ -101,12 +101,12 @@ Special = "(" | ")" | "{" | "}" | "[" | "]" | "," | "
|
||||||
| "-" | "*=" | "*" | "/=" | "/" | "%=" | "%" | "&&="
|
| "-" | "*=" | "*" | "/=" | "/" | "%=" | "%" | "&&="
|
||||||
| "&&" | "||=" | "||" | "." | "!"
|
| "&&" | "||=" | "||" | "." | "!"
|
||||||
Tok = Spaces (Name | Keyword | Number | Str | Special )
|
Tok = Spaces (Name | Keyword | Number | Str | Special )
|
||||||
Toks = (Tok)* Spaces
|
Toks = Tok* Spaces
|
||||||
;EBNF
|
;EBNF
|
||||||
|
|
||||||
EBNF: javascript
|
EBNF: javascript
|
||||||
Space = " " | "\t" | "\n"
|
Space = " " | "\t" | "\n"
|
||||||
Spaces = (Space)* => [[ ignore ]]
|
Spaces = Space* => [[ ignore ]]
|
||||||
Name = . ?[ ast-name? ]? => [[ value>> ]]
|
Name = . ?[ ast-name? ]? => [[ value>> ]]
|
||||||
Number = . ?[ ast-number? ]? => [[ value>> ]]
|
Number = . ?[ ast-number? ]? => [[ value>> ]]
|
||||||
String = . ?[ ast-string? ]? => [[ value>> ]]
|
String = . ?[ ast-string? ]? => [[ value>> ]]
|
||||||
|
@ -192,7 +192,7 @@ ForIn1 = "var" Name:n => [[ n "undefined" ast-get boa ast-var boa
|
||||||
| Expr
|
| Expr
|
||||||
Switch1 = "case" Expr:c ":" SrcElems:cs => [[ c cs ast-case boa ]]
|
Switch1 = "case" Expr:c ":" SrcElems:cs => [[ c cs ast-case boa ]]
|
||||||
| "default" ":" SrcElems:cs => [[ cs ast-default boa ]]
|
| "default" ":" SrcElems:cs => [[ cs ast-default boa ]]
|
||||||
SwitchBody = (Switch1)*
|
SwitchBody = Switch1*
|
||||||
Finally = "finally" Block:b => [[ b ]]
|
Finally = "finally" Block:b => [[ b ]]
|
||||||
| Spaces => [[ "undefined" ast-get boa ]]
|
| Spaces => [[ "undefined" ast-get boa ]]
|
||||||
Stmt = Block
|
Stmt = Block
|
||||||
|
@ -214,6 +214,6 @@ Stmt = Block
|
||||||
| ";" => [[ "undefined" ast-get boa ]]
|
| ";" => [[ "undefined" ast-get boa ]]
|
||||||
SrcElem = "function" Name:n FuncRest:f => [[ n f ast-var boa ]]
|
SrcElem = "function" Name:n FuncRest:f => [[ n f ast-var boa ]]
|
||||||
| Stmt
|
| Stmt
|
||||||
SrcElems = (SrcElem)* => [[ ast-begin boa ]]
|
SrcElems = SrcElem* => [[ ast-begin boa ]]
|
||||||
TopLevel = SrcElems Spaces
|
TopLevel = SrcElems Spaces
|
||||||
;EBNF
|
;EBNF
|
Loading…
Reference in New Issue