-- 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.4.3 module Language.JavaScript.Parser.Lexer -- | Lexical tokens. data Token -- | Single line comment. CommentToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String -- | Identifier. IdentifierToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String -- | Literal: Decimal DecimalToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String -- | Literal: Hexadecimal Integer HexIntegerToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String -- | Literal: string, delimited by either single or double quotes StringToken :: !AlexSpan -> !String -> !Char -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String token_delimiter :: Token -> !Char -- | Literal: Regular Expression RegExToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String BreakToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String CaseToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String CatchToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String ConstToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String ContinueToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String DebuggerToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String DefaultToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String DeleteToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String DoToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String ElseToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String EnumToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String FalseToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String FinallyToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String ForToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String FunctionToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String IfToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String InToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String InstanceofToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String NewToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String NullToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String ReturnToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String SwitchToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String ThisToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String ThrowToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String TrueToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String TryToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String TypeofToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String VarToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String VoidToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String WhileToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String WithToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String FutureToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String GetToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String SetToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String SemiColonToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan CommaToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan HookToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan ColonToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan OrToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan AndToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan BitwiseOrToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan BitwiseXorToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan BitwiseAndToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan StrictEqToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan EqToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan AssignToken :: !AlexSpan -> !String -> Token token_span :: Token -> !AlexSpan token_literal :: Token -> !String SimpleAssignToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan StrictNeToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan NeToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan LshToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan LeToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan LtToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan UrshToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan RshToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan GeToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan GtToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan IncrementToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan DecrementToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan PlusToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan MinusToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan MulToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan DivToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan ModToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan NotToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan BitwiseNotToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan DotToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan LeftBracketToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan RightBracketToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan LeftCurlyToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan RightCurlyToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan LeftParenToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan RightParenToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan CondcommentEndToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan -- | End of file EOFToken :: !AlexSpan -> Token token_span :: Token -> !AlexSpan lexCont :: (Token -> P a) -> P a instance Functor AlexLastAcc module Language.JavaScript.Parser.AST data Node JSArguments :: [[JSNode]] -> Node JSArrayLiteral :: [JSNode] -> Node JSBlock :: JSNode -> Node JSBreak :: [JSNode] -> [JSNode] -> Node JSCallExpression :: String -> [JSNode] -> Node JSCase :: JSNode -> JSNode -> Node JSCatch :: JSNode -> [JSNode] -> JSNode -> Node JSContinue :: [JSNode] -> Node JSDecimal :: String -> Node JSDefault :: JSNode -> Node JSDoWhile :: JSNode -> JSNode -> JSNode -> Node JSElision :: [JSNode] -> Node JSEmpty :: JSNode -> Node JSExpression :: [JSNode] -> Node JSExpressionBinary :: String -> [JSNode] -> [JSNode] -> Node JSExpressionParen :: JSNode -> Node JSExpressionPostfix :: String -> [JSNode] -> Node JSExpressionTernary :: [JSNode] -> [JSNode] -> [JSNode] -> Node JSFinally :: JSNode -> Node JSFor :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> Node JSForIn :: [JSNode] -> JSNode -> JSNode -> Node JSForVar :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> Node JSForVarIn :: JSNode -> JSNode -> JSNode -> Node JSFunction :: JSNode -> [JSNode] -> JSNode -> Node JSFunctionBody :: [JSNode] -> Node JSFunctionExpression :: [JSNode] -> [JSNode] -> JSNode -> Node JSHexInteger :: String -> Node JSIdentifier :: String -> Node JSIf :: JSNode -> JSNode -> Node JSIfElse :: JSNode -> JSNode -> JSNode -> Node JSLabelled :: JSNode -> JSNode -> Node JSLiteral :: String -> Node JSMemberDot :: [JSNode] -> JSNode -> Node JSMemberSquare :: [JSNode] -> JSNode -> Node JSObjectLiteral :: [JSNode] -> Node JSOperator :: String -> Node JSPropertyNameandValue :: JSNode -> [JSNode] -> Node JSPropertyAccessor :: String -> JSNode -> [JSNode] -> JSNode -> Node JSRegEx :: String -> Node JSReturn :: [JSNode] -> Node JSSourceElements :: [JSNode] -> Node JSSourceElementsTop :: [JSNode] -> Node JSStatementBlock :: JSNode -> Node JSStatementList :: [JSNode] -> Node JSStringLiteral :: Char -> [Char] -> Node JSSwitch :: JSNode -> [JSNode] -> Node JSThrow :: JSNode -> Node JSTry :: JSNode -> [JSNode] -> Node JSUnary :: String -> Node JSVarDecl :: JSNode -> [JSNode] -> Node JSVariables :: String -> [JSNode] -> Node JSWhile :: JSNode -> JSNode -> Node JSWith :: JSNode -> [JSNode] -> Node data JSNode NS :: Node -> SrcSpan -> JSNode -- | 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 showStripped :: JSNode -> String instance Typeable Node instance Typeable JSNode instance Show Node instance Eq Node instance Read Node instance Data Node instance Show JSNode instance Eq JSNode instance Read JSNode instance Data JSNode module Language.JavaScript.Parser.Grammar5 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 showStripped :: JSNode -> String showStrippedMaybe :: Show a => Either a JSNode -> [Char] 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 showStripped :: JSNode -> String showStrippedMaybe :: Show a => Either a JSNode -> [Char] data JSNode NS :: Node -> SrcSpan -> JSNode -- | 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 data Node JSArguments :: [[JSNode]] -> Node JSArrayLiteral :: [JSNode] -> Node JSBlock :: JSNode -> Node JSBreak :: [JSNode] -> [JSNode] -> Node JSCallExpression :: String -> [JSNode] -> Node JSCase :: JSNode -> JSNode -> Node JSCatch :: JSNode -> [JSNode] -> JSNode -> Node JSContinue :: [JSNode] -> Node JSDecimal :: String -> Node JSDefault :: JSNode -> Node JSDoWhile :: JSNode -> JSNode -> JSNode -> Node JSElision :: [JSNode] -> Node JSEmpty :: JSNode -> Node JSExpression :: [JSNode] -> Node JSExpressionBinary :: String -> [JSNode] -> [JSNode] -> Node JSExpressionParen :: JSNode -> Node JSExpressionPostfix :: String -> [JSNode] -> Node JSExpressionTernary :: [JSNode] -> [JSNode] -> [JSNode] -> Node JSFinally :: JSNode -> Node JSFor :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> Node JSForIn :: [JSNode] -> JSNode -> JSNode -> Node JSForVar :: [JSNode] -> [JSNode] -> [JSNode] -> JSNode -> Node JSForVarIn :: JSNode -> JSNode -> JSNode -> Node JSFunction :: JSNode -> [JSNode] -> JSNode -> Node JSFunctionBody :: [JSNode] -> Node JSFunctionExpression :: [JSNode] -> [JSNode] -> JSNode -> Node JSHexInteger :: String -> Node JSIdentifier :: String -> Node JSIf :: JSNode -> JSNode -> Node JSIfElse :: JSNode -> JSNode -> JSNode -> Node JSLabelled :: JSNode -> JSNode -> Node JSLiteral :: String -> Node JSMemberDot :: [JSNode] -> JSNode -> Node JSMemberSquare :: [JSNode] -> JSNode -> Node JSObjectLiteral :: [JSNode] -> Node JSOperator :: String -> Node JSPropertyNameandValue :: JSNode -> [JSNode] -> Node JSPropertyAccessor :: String -> JSNode -> [JSNode] -> JSNode -> Node JSRegEx :: String -> Node JSReturn :: [JSNode] -> Node JSSourceElements :: [JSNode] -> Node JSSourceElementsTop :: [JSNode] -> Node JSStatementBlock :: JSNode -> Node JSStatementList :: [JSNode] -> Node JSStringLiteral :: Char -> [Char] -> Node JSSwitch :: JSNode -> [JSNode] -> Node JSThrow :: JSNode -> Node JSTry :: JSNode -> [JSNode] -> Node JSUnary :: String -> Node JSVarDecl :: JSNode -> [JSNode] -> Node JSVariables :: String -> [JSNode] -> Node JSWhile :: JSNode -> JSNode -> Node JSWith :: JSNode -> [JSNode] -> Node 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 -> AlexPosn -> ParseError -- | A generic error containing a string message. No source location. StrError :: String -> ParseError -- | Posn records the location of a token in the input text. It -- has three fields: the address (number of characters preceding the -- token), line number and column of a token within the file. -- start_pos gives the position of the start of the file and -- eof_pos a standard encoding for the end of file. -- move_pos calculates the new position after traversing a given -- character, assuming the usual eight character tab stops. data AlexPosn AlexPn :: !Int -> !Int -> !Int -> AlexPosn type P a = StateT ParseState (Either ParseError) a data ParseState ParseState :: !AlexPosn -> String -> !Char -> [Byte] -> !Int -> !Token -> [Token] -> ParseState alex_pos :: ParseState -> !AlexPosn alex_inp :: ParseState -> String alex_chr :: ParseState -> !Char alex_bytes :: ParseState -> [Byte] alex_scd :: ParseState -> !Int previousToken :: ParseState -> !Token comments :: ParseState -> [Token]