]> gitweb.factorcode.org Git - factor.git/commitdiff
Add flags to regexp tokenizer in JavaScript
authorChris Double <chris@bethia.(none)>
Sun, 29 Jun 2008 23:54:47 +0000 (11:54 +1200)
committerChris Double <chris@bethia.(none)>
Thu, 10 Jul 2008 01:56:06 +0000 (13:56 +1200)
extra/peg/javascript/ast/ast.factor
extra/peg/javascript/parser/parser.factor
extra/peg/javascript/tokenizer/tokenizer.factor

index b857dc51bbb868ff95e20303449167b1ac0306f5..47ab6da864e00468122781d07878dfc1a457a1cf 100644 (file)
@@ -7,7 +7,7 @@ TUPLE: ast-keyword value ;
 TUPLE: ast-name value ;
 TUPLE: ast-number value ;
 TUPLE: ast-string value ;
-TUPLE: ast-regexp value ;
+TUPLE: ast-regexp body flags ;
 TUPLE: ast-cond-expr condition then else ;
 TUPLE: ast-set lhs rhs ;
 TUPLE: ast-get value ;
index de6e2bae321817f994a0bd18562bff9b8f265325..41387d0a5c4112339ee55c045b7ec9e340a50cb5 100644 (file)
@@ -26,9 +26,9 @@ End               = !(.)
 Space             = " " | "\t" | "\n" 
 Spaces            = Space* => [[ ignore ]]
 Name               = . ?[ ast-name?   ]?   => [[ value>> ]] 
-Number             = . ?[ ast-number? ]?   => [[ value>> ]]
-String             = . ?[ ast-string? ]?   => [[ value>> ]]
-RegExp             = . ?[ ast-regexp? ]?   => [[ value>> ]]
+Number             = . ?[ ast-number? ]?
+String             = . ?[ ast-string? ]?
+RegExp             = . ?[ ast-regexp? ]?   
 SpacesNoNl         = (!(nl) Space)* => [[ ignore ]]
 
 Expr               =   OrExpr:e "?" Expr:t ":" Expr:f   => [[ e t f ast-cond-expr boa ]]
@@ -85,9 +85,9 @@ PrimExpr           =   PrimExpr:p "[" Expr:i "]"             => [[ i p ast-getp
 PrimExprHd         =   "(" Expr:e ")"                        => [[ e ]]
                      | "this"                                => [[ ast-this boa ]]
                      | Name                                  => [[ ast-get boa ]]
-                     | Number                                => [[ ast-number boa ]]
-                     | String                                => [[ ast-string boa ]]
-                     | RegExp                                => [[ ast-regexp boa ]]
+                     | Number
+                     | String
+                     | RegExp
                      | "function" FuncRest:fr                => [[ fr ]]
                      | "new" PrimExpr:n "(" Args:as ")"      => [[ n as ast-new boa ]]
                      | "new" PrimExpr:n                      => [[ n f  ast-new boa ]]
index 195184a16c9fb5e319b072df73470fae4947613f..825c8f03d11e36afe1712d67535bb0ea86c85fc8 100644 (file)
@@ -57,8 +57,9 @@ StringChars3       = (EscapeChar | !("'") .)* => [[ >string ]]
 Str                =   '"""' StringChars1:cs '"""' => [[ cs ast-string boa ]]
                      | '"' StringChars2:cs '"' => [[ cs ast-string boa ]]
                      | "'" StringChars3:cs "'" => [[ cs ast-string boa ]]
+RegExpFlags        = NameRest*
 RegExpBody         = (!("/" | "\n" | "\r") .)* => [[ >string ]]
-RegExp             = "/" RegExpBody:r "/" => [[ r ast-regexp boa ]]
+RegExp             = "/" RegExpBody:b "/" RegExpFlags:fl => [[ b fl ast-regexp boa ]]
 Special            =   "("   | ")"   | "{"   | "}"   | "["   | "]"   | ","   | ";"
                      | "?"   | ":"   | "!==" | "!="  | "===" | "=="  | "="   | ">="
                      | ">"   | "<="  | "<"   | "++"  | "+="  | "+"   | "--"  | "-="