-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parser for JavaScript -- -- Parses Javascript into an Abstract Syntax Tree (AST). Initially -- intended as frontend to hjsmin. @package language-javascript @version 0.0.2 module Language.JavaScript.Parser.Lexer -- | Lexical tokens. data Token -- | Single line comment. CommentToken :: !SrcSpan -> !String -> Token token_span :: Token -> !SrcSpan token_literal :: Token -> !String -- | Identifier. IdentifierToken :: !SrcSpan -> !String -> Token token_span :: Token -> !SrcSpan token_literal :: Token -> !String -- | Literal: Decimal DecimalToken :: !SrcSpan -> !String -> Token token_span :: Token -> !SrcSpan token_literal :: Token -> !String -- | Literal: Hexadecimal Integer HexIntegerToken :: !SrcSpan -> !String -> Token token_span :: Token -> !SrcSpan token_literal :: Token -> !String -- | Literal: string, delimited by either single or double quotes StringToken :: !SrcSpan -> !String -> !Char -> Token token_span :: Token -> !SrcSpan token_literal :: Token -> !String token_delimiter :: Token -> !Char -- | Literal: Regular Expression RegExToken :: !SrcSpan -> !String -> Token token_span :: Token -> !SrcSpan token_literal :: Token -> !String BreakToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan CaseToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan CatchToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ConstToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ContinueToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan DebuggerToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan DefaultToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan DeleteToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan DoToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ElseToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan EnumToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan FalseToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan FinallyToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ForToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan FunctionToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan IfToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan InToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan InstanceofToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan NewToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan NullToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ReturnToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan SwitchToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ThisToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ThrowToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan TrueToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan TryToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan TypeofToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan VarToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan VoidToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan WhileToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan WithToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan SemiColonToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan CommaToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan HookToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ColonToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan OrToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan AndToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan BitwiseOrToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan BitwiseXorToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan BitwiseAndToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan StrictEqToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan EqToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan AssignToken :: !SrcSpan -> !String -> Token token_span :: Token -> !SrcSpan token_literal :: Token -> !String SimpleAssignToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan StrictNeToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan NeToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan LshToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan LeToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan LtToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan UrshToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan RshToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan GeToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan GtToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan IncrementToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan DecrementToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan PlusToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan MinusToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan MulToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan DivToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan ModToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan NotToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan BitwiseNotToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan DotToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan LeftBracketToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan RightBracketToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan LeftCurlyToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan RightCurlyToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan LeftParenToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan RightParenToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan CondcommentEndToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan -- | End of file EOFToken :: !SrcSpan -> Token token_span :: Token -> !SrcSpan lexCont :: (Token -> P a) -> P a module Language.JavaScript.Parser.AST data JSNode JSArguments :: [[JSNode]] -> JSNode JSArrayLiteral :: [JSNode] -> JSNode JSBlock :: JSNode -> JSNode JSBreak :: [JSNode] -> [JSNode] -> JSNode JSCallExpression :: String -> [JSNode] -> JSNode JSCase :: JSNode -> JSNode -> JSNode JSCatch :: JSNode -> [JSNode] -> JSNode -> JSNode JSContinue :: [JSNode] -> JSNode JSDecimal :: String -> JSNode JSDefault :: JSNode -> JSNode JSDoWhile :: JSNode -> JSNode -> JSNode -> JSNode JSElement :: String -> [JSNode] -> JSNode JSElementList :: [JSNode] -> JSNode JSElision :: [JSNode] -> JSNode JSEmpty :: JSNode -> JSNode JSExpression :: [JSNode] -> JSNode JSExpressionBinary :: String -> [JSNode] -> [JSNode] -> JSNode JSExpressionParen :: JSNode -> JSNode JSExpressionPostfix :: String -> [JSNode] -> JSNode JSExpressionTernary :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode JSFinally :: JSNode -> JSNode JSFor :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> JSNode JSForIn :: [JSNode] -> JSNode -> JSNode -> JSNode JSForVar :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> JSNode JSForVarIn :: JSNode -> JSNode -> JSNode -> JSNode JSFunction :: JSNode -> [JSNode] -> JSNode -> JSNode JSFunctionBody :: [JSNode] -> JSNode JSFunctionExpression :: [JSNode] -> JSNode -> JSNode JSHexInteger :: String -> JSNode JSIdentifier :: String -> JSNode JSIf :: JSNode -> JSNode -> JSNode JSIfElse :: JSNode -> JSNode -> JSNode -> JSNode JSLabelled :: JSNode -> JSNode -> JSNode JSLiteral :: String -> JSNode JSMemberDot :: [JSNode] -> JSNode -> JSNode JSMemberSquare :: [JSNode] -> JSNode -> JSNode JSObjectLiteral :: [JSNode] -> JSNode JSOperator :: String -> JSNode JSPropertyNameandValue :: JSNode -> [JSNode] -> JSNode JSRegEx :: String -> JSNode JSReturn :: [JSNode] -> JSNode JSSourceElements :: [JSNode] -> JSNode JSSourceElementsTop :: [JSNode] -> JSNode JSStatementList :: [JSNode] -> JSNode JSStringLiteral :: Char -> [Char] -> JSNode JSSwitch :: JSNode -> [JSNode] -> JSNode JSThrow :: JSNode -> JSNode JSTry :: JSNode -> [JSNode] -> JSNode JSUnary :: String -> JSNode JSVarDecl :: JSNode -> [JSNode] -> JSNode JSVariables :: String -> [JSNode] -> JSNode JSWhile :: JSNode -> JSNode -> JSNode JSWith :: JSNode -> [JSNode] -> JSNode instance Typeable JSNode instance Show JSNode instance Eq JSNode instance Read JSNode instance Data JSNode module Language.JavaScript.Parser.Grammar parseProgram :: P JSNode parseLiteral :: P JSNode parsePrimaryExpression :: P JSNode parseStatement :: P JSNode module Language.JavaScript.Parser.Parser -- | Parse one compound statement, or a sequence of simple statements. -- Generally used for interactive input, such as from the command line of -- an interpreter. Return comments in addition to the parsed statements. parse :: String -> String -> Either ParseError JSNode readJs :: String -> JSNode parseFile :: FilePath -> IO JSNode -- | Parse one compound statement, or a sequence of simple statements. -- Generally used for interactive input, such as from the command line of -- an interpreter. Return comments in addition to the parsed statements. parseUsing :: P JSNode -> String -> String -> Either ParseError JSNode module Language.JavaScript.Parser -- | Parse one compound statement, or a sequence of simple statements. -- Generally used for interactive input, such as from the command line of -- an interpreter. Return comments in addition to the parsed statements. parse :: String -> String -> Either ParseError JSNode readJs :: String -> JSNode parseFile :: FilePath -> IO JSNode data JSNode JSArguments :: [[JSNode]] -> JSNode JSArrayLiteral :: [JSNode] -> JSNode JSBlock :: JSNode -> JSNode JSBreak :: [JSNode] -> [JSNode] -> JSNode JSCallExpression :: String -> [JSNode] -> JSNode JSCase :: JSNode -> JSNode -> JSNode JSCatch :: JSNode -> [JSNode] -> JSNode -> JSNode JSContinue :: [JSNode] -> JSNode JSDecimal :: String -> JSNode JSDefault :: JSNode -> JSNode JSDoWhile :: JSNode -> JSNode -> JSNode -> JSNode JSElement :: String -> [JSNode] -> JSNode JSElementList :: [JSNode] -> JSNode JSElision :: [JSNode] -> JSNode JSEmpty :: JSNode -> JSNode JSExpression :: [JSNode] -> JSNode JSExpressionBinary :: String -> [JSNode] -> [JSNode] -> JSNode JSExpressionParen :: JSNode -> JSNode JSExpressionPostfix :: String -> [JSNode] -> JSNode JSExpressionTernary :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode JSFinally :: JSNode -> JSNode JSFor :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> JSNode JSForIn :: [JSNode] -> JSNode -> JSNode -> JSNode JSForVar :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> JSNode JSForVarIn :: JSNode -> JSNode -> JSNode -> JSNode JSFunction :: JSNode -> [JSNode] -> JSNode -> JSNode JSFunctionBody :: [JSNode] -> JSNode JSFunctionExpression :: [JSNode] -> JSNode -> JSNode JSHexInteger :: String -> JSNode JSIdentifier :: String -> JSNode JSIf :: JSNode -> JSNode -> JSNode JSIfElse :: JSNode -> JSNode -> JSNode -> JSNode JSLabelled :: JSNode -> JSNode -> JSNode JSLiteral :: String -> JSNode JSMemberDot :: [JSNode] -> JSNode -> JSNode JSMemberSquare :: [JSNode] -> JSNode -> JSNode JSObjectLiteral :: [JSNode] -> JSNode JSOperator :: String -> JSNode JSPropertyNameandValue :: JSNode -> [JSNode] -> JSNode JSRegEx :: String -> JSNode JSReturn :: [JSNode] -> JSNode JSSourceElements :: [JSNode] -> JSNode JSSourceElementsTop :: [JSNode] -> JSNode JSStatementList :: [JSNode] -> JSNode JSStringLiteral :: Char -> [Char] -> JSNode JSSwitch :: JSNode -> [JSNode] -> JSNode JSThrow :: JSNode -> JSNode JSTry :: JSNode -> [JSNode] -> JSNode JSUnary :: String -> JSNode JSVarDecl :: JSNode -> [JSNode] -> JSNode JSVariables :: String -> [JSNode] -> JSNode JSWhile :: JSNode -> JSNode -> JSNode JSWith :: JSNode -> [JSNode] -> JSNode data ParseError -- | An error from the parser. Token found where it should not be. Note: -- tokens contain their own source span. UnexpectedToken :: Token -> ParseError -- | An error from the lexer. Character found where it should not be. UnexpectedChar :: Char -> SrcLocation -> ParseError -- | A generic error containing a string message. No source location. StrError :: String -> ParseError -- | A location for a syntactic entity from the source code. The location -- is specified by its filename, and starting row and column. data SrcLocation Sloc :: !String -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> SrcLocation sloc_filename :: SrcLocation -> !String sloc_row :: SrcLocation -> {-# UNPACK #-} !Int sloc_column :: SrcLocation -> {-# UNPACK #-} !Int NoLocation :: SrcLocation -- | Source location spanning a contiguous section of a file. data SrcSpan -- | A span which starts and ends on the same line. SpanCoLinear :: !String -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> SrcSpan span_filename :: SrcSpan -> !String span_row :: SrcSpan -> {-# UNPACK #-} !Int span_start_column :: SrcSpan -> {-# UNPACK #-} !Int span_end_column :: SrcSpan -> {-# UNPACK #-} !Int -- | A span which starts and ends on different lines. SpanMultiLine :: !String -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> SrcSpan span_filename :: SrcSpan -> !String span_start_row :: SrcSpan -> {-# UNPACK #-} !Int span_start_column :: SrcSpan -> {-# UNPACK #-} !Int span_end_row :: SrcSpan -> {-# UNPACK #-} !Int span_end_column :: SrcSpan -> {-# UNPACK #-} !Int -- | A span which is actually just one point in the file. SpanPoint :: !String -> {-# UNPACK #-} !Int -> {-# UNPACK #-} !Int -> SrcSpan span_filename :: SrcSpan -> !String span_row :: SrcSpan -> {-# UNPACK #-} !Int span_column :: SrcSpan -> {-# UNPACK #-} !Int -- | No span information. SpanEmpty :: SrcSpan -- | Types which have a span. class Span a getSpan :: Span a => a -> SrcSpan type P a = StateT ParseState (Either ParseError) a data ParseState ParseState :: !SrcLocation -> !String -> !Token -> !SrcSpan -> [Token] -> ParseState location :: ParseState -> !SrcLocation input :: ParseState -> !String previousToken :: ParseState -> !Token lastEOL :: ParseState -> !SrcSpan comments :: ParseState -> [Token]