 StringChars1       = (EscapeChar | !('"""') .)* => [[ >string ]]
 StringChars2       = (EscapeChar | !('"') .)* => [[ >string ]]
 StringChars3       = (EscapeChar | !("'") .)* => [[ >string ]]
-Str                =   '"""' StringChars1:cs '"""' => [[ drop cs <ast-string> ]]
-                     | '"' StringChars2:cs '"' => [[ drop cs <ast-string> ]]
-                     | "'" StringChars3:cs "'" => [[ drop cs <ast-string> ]]
+Str                =   '"""' StringChars1:cs '"""' => [[ drop cs ast-string boa ]]
+                     | '"' StringChars2:cs '"' => [[ drop cs ast-string boa ]]
+                     | "'" StringChars3:cs "'" => [[ drop cs ast-string boa ]]
 Special            =   "("   | ")"   | "{"   | "}"   | "["   | "]"   | ","   | ";"
                      | "?"   | ":"   | "!==" | "~="  | "===" | "=="  | "="   | ">="
                      | ">"   | "<="  | "<"   | "++"  | "+="  | "+"   | "--"  | "-="

                    | "var"
                    | "void"
                    | "while"
                    | "with") => [[ <ast-keyword> ]]
Name              = !(Keyword) (iName):n => [[ drop n <ast-name> ]]
Number            =   Digits:ws '.' Digits:fs => [[ drop ws "." fs 3array concat >string string>number <ast-number> ]]
                    | Digits => [[ >string string>number <ast-number> ]]  

EscapeChar        =   "\\n" => [[ drop 10 ]] 
                    | "\\r" => [[ drop 13 ]]

TUPLE: ast-return e ;
TUPLE: ast-case c cs ;
TUPLE: ast-default cs ;

EBNF: javascript
Letter            = [a-zA-Z]
