{- Expr: Util の抽象構文木 (goto あり) -} module Expr where import Data.Char import Target -- Expr type Decl = (String, Expr) type Decls = [Decl] -- goto 文を可能にするため、begin 〜 end のなかに変数束縛は許さない data Expr = Const Target | Var String | Let [Decl] Expr | Val Decl Expr | LetGlobal [Decl] Expr | LetLocal [Decl] Expr | Delay Expr | Lambda String Expr | App Expr Expr | If Expr Expr Expr | While Expr Expr | Begin [LabeledExpr] | Break | Continue | Goto String deriving Show type LabeledExpr = (Maybe String, Expr) isMutVar (h:_) = let c = ord h in 945 <= c && c <= 969 {- 'α' .. 'ω' -} isMutVar _ = False -- isLhs (Var x) | isMutVar x = True -- isLhs _ = False