@@ -13,6 +13,7 @@ module Language.ECMAScript3.Lexer(lexeme,identifier,reserved,operator,reservedOp
1313 ,hexIntLit ,decIntLit , decDigits , decDigitsOpt , exponentPart , decLit ) where
1414
1515import Prelude hiding (lex )
16+ import Data.Char
1617import Text.Parsec
1718import qualified Text.Parsec.Token as T
1819import Language.ECMAScript3.Parser.State
@@ -21,8 +22,14 @@ import Control.Monad.Identity
2122import Control.Applicative ((<$>) , (<*>) )
2223import Data.Maybe (isNothing )
2324
25+ jsLetter :: (Stream s m Char ) => ParsecT s u m Char
26+ jsLetter = satisfy (\ x -> isAlpha x && x < '\ 65536 ') <?> " letter"
27+
28+ jsAlphaNum :: (Stream s m Char => ParsecT s u m Char )
29+ jsAlphaNum = satisfy (\ x -> isAlphaNum x && x < '\ 65536 ') <?> " letter or digit"
30+
2431identifierStart :: Stream s Identity Char => Parser s Char
25- identifierStart = letter <|> oneOf " $_"
32+ identifierStart = jsLetter <|> oneOf " $_"
2633
2734javascriptDef :: Stream s Identity Char => T. GenLanguageDef s ParserState Identity
2835javascriptDef =
@@ -31,7 +38,7 @@ javascriptDef =
3138 " //"
3239 False -- no nested comments
3340 identifierStart
34- (alphaNum <|> oneOf " $_" ) -- identifier rest
41+ (jsAlphaNum <|> oneOf " $_" ) -- identifier rest
3542 (oneOf " {}<>()~.,?:|&^=!+-*/%!" ) -- operator start
3643 (oneOf " =<>|&+" ) -- operator rest
3744 [" break" , " case" , " catch" , " const" , " continue" , " debugger" ,
0 commit comments