hjs-0.1: src/HJS/Parser/JavaScript.hs
module HJS.Parser.JavaScript where
class EmitHaskell a where
eHs :: a -> String
data Literal = LitInt Int
| LitString String
deriving Show
data PrimExpr
= Literal Literal
| Ident String
| Brack Expr
| This
| Regex String
| Array ArrayLit
| Object [Either (PropName, AssignE) GetterPutter ]
deriving Show
data GetterPutter =
GetterPutter String FuncDecl | Putter FuncDecl deriving Show
data PropName = PropNameId String | PropNameStr String | PropNameInt Int
deriving Show
data ArrayLit = ArrSimple [AssignE]
deriving Show
data MemberExpr = MemPrimExpr PrimExpr
| ArrayExpr MemberExpr Expr
| MemberNew MemberExpr [AssignE]
| MemberCall MemberExpr String
deriving Show
data CallExpr = CallMember MemberExpr [AssignE]
| CallCall CallExpr [AssignE]
| CallSquare CallExpr Expr
| CallDot CallExpr String
deriving Show
data NewExpr = MemberExpr MemberExpr
| NewNewExpr NewExpr
deriving Show
data LeftExpr = NewExpr NewExpr
| CallExpr CallExpr
deriving Show
data PostFix = LeftExpr LeftExpr
| PostInc LeftExpr
| PostDec LeftExpr
deriving Show
data UExpr = PostFix PostFix
| Delete UExpr
| Void UExpr
| TypeOf UExpr
| DoublePlus UExpr
| DoubleMinus UExpr
| UnaryPlus UExpr
| UnaryMinus UExpr
| Not UExpr
| BitNot UExpr
deriving Show
data MultExpr = UExpr UExpr
| Times MultExpr UExpr
| Div MultExpr UExpr
| Mod MultExpr UExpr deriving Show
data AddExpr = MultExpr MultExpr
| Plus AddExpr MultExpr
| Minus AddExpr MultExpr
deriving Show
data ShiftE = AddExpr AddExpr
| ShiftLeft ShiftE AddExpr
| ShiftRight ShiftE AddExpr
| ShiftRight2 ShiftE AddExpr
deriving Show
data RelE = ShiftE ShiftE
| LessThan RelE ShiftE
| GreaterThan RelE ShiftE
| LessEqual RelE ShiftE
| GreaterEqual RelE ShiftE
| InstanceOf RelE ShiftE
| InObject RelE ShiftE
deriving Show
data EqualE = RelE RelE
| Equal EqualE RelE
| NotEqual EqualE RelE
| Equal2 EqualE RelE
| NotEqual2 EqualE RelE
deriving Show
data BitAnd = EqualE EqualE
| BABitAnd BitAnd EqualE
deriving Show
data BitXOR = BitAnd BitAnd
| BXBitXOR BitXOR BitAnd
deriving Show
data BitOR = BitXOR BitXOR
| BOBitOR BitOR BitXOR
deriving Show
data LogAnd = BitOR BitOR
| LALogAnd LogAnd BitOR
deriving Show
data LogOr = LogAnd LogAnd
| LOLogOr LogOr LogAnd
deriving Show
data CondE = LogOr LogOr
| CondIf LogOr AssignE AssignE
deriving Show
data AssignOp = AssignNormal
| AssignOpMult
| AssignOpDiv
| AssignOpMod
| AssignOpPlus
| AssignOpMinus deriving Show
data AssignE = CondE CondE
| Assign LeftExpr AssignOp AssignE
| AEFuncDecl FuncDecl
deriving Show
data Expr = AssignE AssignE
deriving Show
data VarDecl = VarDecl String (Maybe AssignE) deriving Show
data IfStmt = IfElse Expr Stmt Stmt
| IfOnly Expr Stmt
| If2 Expr
| If3
deriving Show
data ItStmt = DoWhile Stmt Expr
| While Expr Stmt
| For (Maybe Expr) (Maybe Expr) (Maybe Expr) Stmt
| ForVar [VarDecl] (Maybe Expr) (Maybe Expr) Stmt
| ForIn [VarDecl] Expr Stmt
| It2 Expr
deriving Show
data TryStmt = TryBC [Stmt] [Catch]
| TryBF [Stmt] [Stmt]
| TryBCF [Stmt] [Catch] [Stmt]
deriving Show
data Catch = Catch String [Stmt] | CatchIf String [Stmt] Expr
deriving Show
data Stmt = IfStmt IfStmt | EmptyStmt | ExprStmt Expr | ItStmt ItStmt | Block [Stmt]
| VarStmt [VarDecl ]
| TryStmt TryStmt
| ContStmt (Maybe String)
| BreakStmt (Maybe String)
| ReturnStmt (Maybe Expr)
| WithStmt Expr Stmt
| LabelledStmt String Stmt
| Switch Switch
| ThrowExpr Expr
deriving Show
data Switch = SSwitch Expr CaseBlock
deriving Show
data CaseBlock = CaseBlock [CaseClause] [DefaultClause] [CaseClause]
deriving Show
data CaseClause = CaseClause Expr [Stmt]
deriving Show
data DefaultClause = DefaultClause [Stmt]
deriving Show
data FuncDecl = FuncDecl (Maybe String) [String] [SourceElement]
deriving Show
data SourceElement = Stmt Stmt | SEFuncDecl FuncDecl
deriving Show
data JSProgram = JSProgram [SourceElement]
deriving Show