language-javascript 0.5.3 → 0.5.4
raw patch · 6 files changed
+41/−31 lines, 6 files
Files
- README +3/−0
- language-javascript.cabal +1/−1
- runalex.sh +2/−0
- runtests.hs +5/−0
- src-dev/Language/JavaScript/Parser/Lexer.x +16/−17
- src/Language/JavaScript/Parser/Lexer.hs +14/−13
README view
@@ -35,6 +35,9 @@ Changes +0.5.4 Fixed bug where lexer switches to regexp mode after a ']'+ char, reported by @aszlig+ 0.5.3 Merge pull requests from @aszlig to add octal support, and to allow leading zeros in exponents
language-javascript.cabal view
@@ -1,5 +1,5 @@ Name: language-javascript-Version: 0.5.3+Version: 0.5.4 Synopsis: Parser for JavaScript Description: Parses Javascript into an Abstract Syntax Tree (AST). Initially intended as frontend to hjsmin. .
runalex.sh view
@@ -5,5 +5,7 @@ # to have alex > 3.0 installed alex -g -o src/Language/JavaScript/Parser/Lexer.hs src-dev/Language/JavaScript/Parser/Lexer.x+# To debug the lexer+#alex -d -g -o src/Language/JavaScript/Parser/Lexer.hs src-dev/Language/JavaScript/Parser/Lexer.x
runtests.hs view
@@ -338,6 +338,8 @@ , testCase "issue5ok3" (testProg "{ y: 18 }" "Right (JSSourceElementsTop [JSBlock ([JSLabelled (JSIdentifier \"y\") (JSExpression [JSDecimal \"18\"])]),JSLiteral \"\"])") , testCase "issue5ok4" (testProg "x = { y: 18 }" "Right (JSSourceElementsTop [JSExpression [JSIdentifier \"x\",JSOperator JSLiteral \"=\",JSObjectLiteral [JSPropertyNameandValue (JSIdentifier \"y\") [JSDecimal \"18\"]]],JSLiteral \"\"])") + -- https://github.com/alanz/language-javascript/issues/14+ , testCase "issue14" (testProg "var z = x[i] / y;" "Right (JSSourceElementsTop [JSVariables JSLiteral \"var\" [JSVarDecl (JSIdentifier \"z\") [JSLiteral \"=\",JSExpressionBinary \"/\" [JSMemberSquare [JSIdentifier \"x\"] (JSExpression [JSIdentifier \"i\"])] [JSIdentifier \"y\"]]],JSLiteral \"\"])") ] @@ -728,6 +730,9 @@ -- Parse failure in hjsmin , testCase "parsefail" (testRoundTrip "switch(t){case DIV: v = u / v; break;}")++ -- https://github.com/alanz/language-javascript/issues/14+ , testCase "issue14" (testRoundTrip "var z = x[i] / y;") ] -- ---------------------------------------------------------------------
src-dev/Language/JavaScript/Parser/Lexer.x view
@@ -174,13 +174,10 @@ <0> () ; -- { registerStates lexToken reg divide } -- Skip Whitespace--- <reg,divide> $white_char+ ; <reg,divide> $white_char+ { adapt (mkString wsToken) } -- Skip one line comment--- <reg,divide> "//"($not_eol_char)* ; <reg,divide> "//"($not_eol_char)* { adapt (mkString commentToken) }--- <reg,divide> "//"($not_eol_char)* { mkComment } -- --------------------------------------------------------------------- -- Comment definition from the ECMAScript spec, ver 3@@ -270,8 +267,9 @@ } <reg,divide> {- \; { adapt (symbolToken SemiColonToken)}- "," { adapt (symbolToken CommaToken)}+ -- \; { adapt (symbolToken SemiColonToken)}+ ";" { adapt (symbolToken SemiColonToken)}+ "," { adapt (symbolToken CommaToken)} "?" { adapt (symbolToken HookToken)} ":" { adapt (symbolToken ColonToken)} "||" { adapt (symbolToken OrToken)}@@ -327,18 +325,19 @@ classifyToken :: Token -> Int classifyToken aToken = case aToken of- IdentifierToken {} -> divide- NullToken {} -> divide- TrueToken {} -> divide- FalseToken {} -> divide- ThisToken {} -> divide- OctalToken {} -> divide- DecimalToken {} -> divide- HexIntegerToken {} -> divide- StringToken {} -> divide- RightCurlyToken {} -> divide- RightParenToken {} -> divide- _other -> reg+ IdentifierToken {} -> divide+ NullToken {} -> divide+ TrueToken {} -> divide+ FalseToken {} -> divide+ ThisToken {} -> divide+ OctalToken {} -> divide+ DecimalToken {} -> divide+ HexIntegerToken {} -> divide+ StringToken {} -> divide+ RightCurlyToken {} -> divide+ RightParenToken {} -> divide+ RightBracketToken {} -> divide+ _other -> reg {-
src/Language/JavaScript/Parser/Lexer.hs view
@@ -275,7 +275,7 @@ alex_deflt = AlexA# "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x01\xff\xff\x8c\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x69\x00\x69\x00\x6b\x00\x6b\x00\x6d\x00\x6d\x00\xff\xff\x73\x00\x73\x00\x7a\x00\x7a\x00\x7e\x00\x7e\x00\x82\x00\x82\x00\xff\xff\xff\xff\x8c\x00\x8c\x00\x8c\x00\x8e\x00\x8e\x00\xff\xff\x3e\x00\xff\xff\x3e\x00\x3e\x00\x3c\x00\xff\xff\x3c\x00\x3c\x00\x9a\x00\xff\xff\x9a\x00\x9a\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8c\x00\x82\x01\x82\x01\x82\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8e\x01\x8c\x01\x8c\x01\x8c\x01\x8c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x8c\x01\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"# alex_accept = listArray (0::Int,447) [[(AlexAccSkip)],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[(AlexAcc (alex_action_1))],[(AlexAcc (alex_action_2))],[(AlexAcc (alex_action_3))],[(AlexAcc (alex_action_4))],[(AlexAcc (alex_action_5))],[(AlexAcc (alex_action_6))],[(AlexAcc (alex_action_7))],[(AlexAcc (alex_action_8))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_9))],[(AlexAcc (alex_action_9))],[(AlexAccSkip)],[(AlexAcc (alex_action_11))],[(AlexAcc (alex_action_12))],[(AlexAcc (alex_action_13))],[(AlexAcc (alex_action_14))],[(AlexAcc (alex_action_15))],[(AlexAcc (alex_action_16))],[(AlexAcc (alex_action_17))],[(AlexAcc (alex_action_18))],[(AlexAcc (alex_action_19))],[(AlexAcc (alex_action_20))],[(AlexAcc (alex_action_21))],[(AlexAcc (alex_action_22))],[(AlexAcc (alex_action_23))],[(AlexAcc (alex_action_24))],[(AlexAcc (alex_action_25))],[(AlexAcc (alex_action_26))],[(AlexAcc (alex_action_27))],[(AlexAcc (alex_action_28))],[(AlexAcc (alex_action_29))],[(AlexAcc (alex_action_30))],[(AlexAcc (alex_action_31))],[(AlexAcc (alex_action_32))],[(AlexAcc (alex_action_33))],[(AlexAcc (alex_action_34))],[(AlexAcc (alex_action_35))],[(AlexAcc (alex_action_36))],[(AlexAcc (alex_action_37))],[(AlexAcc (alex_action_38))],[(AlexAcc (alex_action_39))],[(AlexAcc (alex_action_40))],[(AlexAcc (alex_action_41))],[(AlexAcc (alex_action_42))],[(AlexAcc (alex_action_43))],[(AlexAcc (alex_action_44))],[(AlexAcc (alex_action_45))],[(AlexAcc (alex_action_46))],[(AlexAcc (alex_action_47))],[(AlexAcc (alex_action_48))],[(AlexAcc (alex_action_49))],[(AlexAcc (alex_action_50))]]-{-# LINE 318 "src-dev/Language/JavaScript/Parser/Lexer.x" #-}+{-# LINE 316 "src-dev/Language/JavaScript/Parser/Lexer.x" #-} {-@@ -288,18 +288,19 @@ classifyToken :: Token -> Int classifyToken aToken = case aToken of- IdentifierToken {} -> divide- NullToken {} -> divide- TrueToken {} -> divide- FalseToken {} -> divide- ThisToken {} -> divide- OctalToken {} -> divide- DecimalToken {} -> divide- HexIntegerToken {} -> divide- StringToken {} -> divide- RightCurlyToken {} -> divide- RightParenToken {} -> divide- _other -> reg+ IdentifierToken {} -> divide+ NullToken {} -> divide+ TrueToken {} -> divide+ FalseToken {} -> divide+ ThisToken {} -> divide+ OctalToken {} -> divide+ DecimalToken {} -> divide+ HexIntegerToken {} -> divide+ StringToken {} -> divide+ RightCurlyToken {} -> divide+ RightParenToken {} -> divide+ RightBracketToken {} -> divide+ _other -> reg {-