language-javascript-0.5.7: Parser for JavaScript

Safe Haskell | None

Language.JavaScript.Parser

Contents

- Pretty Printing

Synopsis

- parse :: String -> String -> Either String JSNode
- readJs :: String -> JSNode
- parseFile :: FilePath -> IO JSNode
- parseFileUtf8 :: FilePath -> IO JSNode
- showStripped :: JSNode -> String
- showStrippedMaybe :: Show a => Either a JSNode -> String
- data JSNode
  - = NN Node
  - | NT Node TokenPosn [CommentAnnotation]
- data Node
  - = JSIdentifier String
  - | JSDecimal String
  - | JSLiteral String
  - | JSHexInteger String
  - | JSOctal String
  - | JSStringLiteral Char [Char]
  - | JSRegEx String
  - | JSArguments JSNode [JSNode] JSNode
  - | JSArrayLiteral JSNode [JSNode] JSNode
  - | JSBlock [JSNode] [JSNode] [JSNode]
  - | JSBreak JSNode [JSNode] JSNode
  - | JSCallExpression String [JSNode] [JSNode] [JSNode]
  - | JSCase JSNode JSNode JSNode [JSNode]
  - | JSCatch JSNode JSNode JSNode [JSNode] JSNode JSNode
  - | JSContinue JSNode [JSNode] JSNode
  - | JSDefault JSNode JSNode [JSNode]
  - | JSDoWhile JSNode JSNode JSNode JSNode JSNode JSNode JSNode
  - | JSElision JSNode
  - | JSExpression [JSNode]
  - | JSExpressionBinary String [JSNode] JSNode [JSNode]
  - | JSExpressionParen JSNode JSNode JSNode
  - | JSExpressionPostfix String [JSNode] JSNode
  - | JSExpressionTernary [JSNode] JSNode [JSNode] JSNode [JSNode]
  - | JSFinally JSNode JSNode
  - | JSFor JSNode JSNode [JSNode] JSNode [JSNode] JSNode [JSNode] JSNode JSNode
  - | JSForIn JSNode JSNode [JSNode] JSNode JSNode JSNode JSNode
  - | JSForVar JSNode JSNode JSNode [JSNode] JSNode [JSNode] JSNode [JSNode] JSNode JSNode
  - | JSForVarIn JSNode JSNode JSNode JSNode JSNode JSNode JSNode JSNode
  - | JSFunction JSNode JSNode JSNode [JSNode] JSNode JSNode
  - | JSFunctionExpression JSNode [JSNode] JSNode [JSNode] JSNode JSNode
  - | JSIf JSNode JSNode JSNode JSNode [JSNode] [JSNode]
  - | JSLabelled JSNode JSNode JSNode
  - | JSMemberDot [JSNode] JSNode JSNode
  - | JSMemberSquare [JSNode] JSNode JSNode JSNode
  - | JSObjectLiteral JSNode [JSNode] JSNode
  - | JSOperator JSNode
  - | JSPropertyAccessor JSNode JSNode JSNode [JSNode] JSNode JSNode
  - | JSPropertyNameandValue JSNode JSNode [JSNode]
  - | JSReturn JSNode [JSNode] JSNode
  - | JSSourceElementsTop [JSNode]
  - | JSSwitch JSNode JSNode JSNode JSNode JSNode
  - | JSThrow JSNode JSNode
  - | JSTry JSNode JSNode [JSNode]
  - | JSUnary String JSNode
  - | JSVarDecl JSNode [JSNode]
  - | JSVariables JSNode [JSNode] JSNode
  - | JSWhile JSNode JSNode JSNode JSNode JSNode
  - | JSWith JSNode JSNode JSNode JSNode [JSNode]
- data CommentAnnotation
  - = CommentA TokenPosn String
  - | WhiteSpace TokenPosn String
  - | NoComment
- data TokenPosn = TokenPn !Int !Int !Int
- tokenPosnEmpty :: TokenPosn
- renderJS :: JSNode -> Builder
- renderToString :: JSNode -> String

# Documentation

parse

Arguments

:: String | The input stream (Javascript source code).
-> String | The name of the Javascript source (filename or input device).
-> Either String JSNode | An error or maybe the abstract syntax tree (AST) of zero or more Javascript statements, plus comments.

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.

readJs :: String -> JSNode

parseFile :: FilePath -> IO JSNode

Parse the given file. For UTF-8 support, make sure your locale is set such that System.IO.localeEncoding returns utf8

parseFileUtf8 :: FilePath -> IO JSNode

Parse the given file, explicitly setting the encoding to UTF8 when reading it

showStripped :: JSNode -> String

showStrippedMaybe :: Show a => Either a JSNode -> String

data JSNode

The JSNode is the building block of the AST. Each has a syntactic part `Node`. In addition, the leaf elements (terminals) have a position `TokenPosn`, as well as an array of comments and/or whitespace that was collected while parsing.

Constructors

NN Node | Non Terminal node, does not have any position or comment information
NT Node TokenPosn [CommentAnnotation] | Terminal node, including position and comment/whitespace information

Instances

Eq JSNode |
Data JSNode |
Read JSNode |
Show JSNode |
Typeable JSNode |

data Node

Constructors

JSIdentifier String | Terminals
JSDecimal String |
JSLiteral String |
JSHexInteger String |
JSOctal String |
JSStringLiteral Char [Char] |
JSRegEx String |
JSArguments JSNode [JSNode] JSNode | lb, args, rb
JSArrayLiteral JSNode [JSNode] JSNode | lb, contents, rb
JSBlock [JSNode] [JSNode] [JSNode] | optional lb,optional block statements,optional rb
JSBreak JSNode [JSNode] JSNode | break, optional identifier, autosemi
JSCallExpression String [JSNode] [JSNode] [JSNode] | type : ., (), []; opening [ or ., contents, closing
JSCase JSNode JSNode JSNode [JSNode] | case,expr,colon,stmtlist
JSCatch JSNode JSNode JSNode [JSNode] JSNode JSNode | catch,lb,ident,[if,expr],rb,block
JSContinue JSNode [JSNode] JSNode | continue,optional identifier,autosemi
JSDefault JSNode JSNode [JSNode] | default,colon,stmtlist
JSDoWhile JSNode JSNode JSNode JSNode JSNode JSNode JSNode | do,stmt,while,lb,expr,rb,autosemi
JSElision JSNode | comma
JSExpression [JSNode] | expression components
JSExpressionBinary String [JSNode] JSNode [JSNode] | what, lhs, op, rhs
JSExpressionParen JSNode JSNode JSNode | lb,expression,rb
JSExpressionPostfix String [JSNode] JSNode | type, expression, operator
JSExpressionTernary [JSNode] JSNode [JSNode] JSNode [JSNode] | cond, ?, trueval, :, falseval
JSFinally JSNode JSNode | finally,block
JSFor JSNode JSNode [JSNode] JSNode [JSNode] JSNode [JSNode] JSNode JSNode | for,lb,expr,semi,expr,semi,expr,rb.stmt
JSForIn JSNode JSNode [JSNode] JSNode JSNode JSNode JSNode | for,lb,expr,in,expr,rb,stmt
JSForVar JSNode JSNode JSNode [JSNode] JSNode [JSNode] JSNode [JSNode] JSNode JSNode | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForVarIn JSNode JSNode JSNode JSNode JSNode JSNode JSNode JSNode | for,lb,var,vardecl,in,expr,rb,stmt
JSFunction JSNode JSNode JSNode [JSNode] JSNode JSNode | fn,name, lb,parameter list,rb,block | JSFunctionBody [JSNode] -- ^body
JSFunctionExpression JSNode [JSNode] JSNode [JSNode] JSNode JSNode | fn,[name],lb, parameter list,rb,block`
JSIf JSNode JSNode JSNode JSNode [JSNode] [JSNode] | if,(,expr,),stmt,optional rest
JSLabelled JSNode JSNode JSNode | identifier,colon,stmt
JSMemberDot [JSNode] JSNode JSNode | firstpart, dot, name
JSMemberSquare [JSNode] JSNode JSNode JSNode | firstpart, lb, expr, rb
JSObjectLiteral JSNode [JSNode] JSNode | lbrace contents rbrace
JSOperator JSNode | opnode
JSPropertyAccessor JSNode JSNode JSNode [JSNode] JSNode JSNode | (get|set), name, lb, params, rb, block
JSPropertyNameandValue JSNode JSNode [JSNode] | name, colon, value
JSReturn JSNode [JSNode] JSNode | return,optional expression,autosemi | JSSourceElements [JSNode] -- ^source elements
JSSourceElementsTop [JSNode] | source elements | JSStatementBlock JSNode JSNode JSNode -- ^lb,block,rb | JSStatementList [JSNode] -- ^statements
JSSwitch JSNode JSNode JSNode JSNode JSNode | switch,lb,expr,rb,caseblock
JSThrow JSNode JSNode | throw val
JSTry JSNode JSNode [JSNode] | try,block,rest
JSUnary String JSNode | type, operator
JSVarDecl JSNode [JSNode] | identifier, optional initializer
JSVariables JSNode [JSNode] JSNode | var|const, decl, autosemi
JSWhile JSNode JSNode JSNode JSNode JSNode | while,lb,expr,rb,stmt
JSWith JSNode JSNode JSNode JSNode [JSNode] | with,lb,expr,rb,stmt list

Instances

Eq Node |
Data Node |
Read Node |
Show Node |
Typeable Node |

data CommentAnnotation

Constructors

CommentA TokenPosn String |
WhiteSpace TokenPosn String |
NoComment |

Instances

Eq CommentAnnotation |
Data CommentAnnotation |
Read CommentAnnotation |
Show CommentAnnotation |
Typeable CommentAnnotation |

data TokenPosn

`TokenPosn` 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. Note: The lexer assumes the usual eight character tab stops.

Constructors

TokenPn !Int !Int !Int |

Instances

Eq TokenPosn |
Data TokenPosn |
Read TokenPosn |
Show TokenPosn |
Typeable TokenPosn |

tokenPosnEmpty :: TokenPosn

# Pretty Printing

renderJS :: JSNode -> Builder

renderToString :: JSNode -> String