Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /trunk/src/compiler/ast/ast.sml
ViewVC logotype

Annotation of /trunk/src/compiler/ast/ast.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2636 - (view) (download)

1 : jhr 40 (* ast.sml
2 :     *
3 : jhr 435 * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 : jhr 40 * All rights reserved.
5 :     *
6 :     * A typed abstract-syntax tree representation of Diderot programs.
7 :     *)
8 :    
9 :     structure AST =
10 :     struct
11 :    
12 :     structure Ty = Types
13 :    
14 : jhr 71 (* AST variable kinds *)
15 :     datatype var_kind
16 : jhr 78 = BasisVar
17 :     | InputVar
18 : jhr 71 | GlobalVar
19 : jhr 2356 | FunVar (* user-defined function *)
20 :     | StrandParam (* parameter to strand definition *)
21 :     | StrandStateVar (* strand state variable *)
22 :     | StrandOutputVar (* strand output variable *)
23 :     | LocalVar (* local variable in method *)
24 : jhr 69
25 : jhr 71 datatype var = V of {
26 : jhr 2356 name : string, (* print name of variable *)
27 :     id : Stamp.stamp, (* unique ID *)
28 :     kind : var_kind, (* variable kind *)
29 :     ty : Ty.scheme (* type scheme *)
30 : jhr 71 }
31 :    
32 : jhr 2636 datatype program = Program of {
33 :     props : StrandUtil.program_prop list,
34 :     decls : decl list
35 :     }
36 : jhr 71
37 :     and decl
38 : jhr 2462 = D_Input of var * string option * expr option
39 : jhr 2356 | D_Var of var_decl (* global variable decl *)
40 :     | D_Func of var * var list * stmt (* user-defined function *)
41 :     | D_Strand of strand (* strand decl *)
42 : jhr 71 | D_InitialArray of create * iter list
43 :     | D_InitialCollection of create * iter list
44 :    
45 :     and var_decl
46 :     = VD_Decl of var * expr
47 :    
48 : jhr 2356 and strand = Strand of {
49 :     name : Atom.atom,
50 :     params : var list,
51 : jhr 2636 state : var_decl list,
52 : jhr 2356 methods : method list
53 :     }
54 :    
55 : jhr 71 and method
56 : jhr 1640 = M_Method of StrandUtil.method_name * stmt
57 : jhr 71
58 :     and create
59 : jhr 89 = C_Create of (Atom.atom * expr list)
60 : jhr 71
61 :     and iter
62 : jhr 1113 (* NOTE: the typechecker restricts the variable and expression to have integer type *)
63 : jhr 71 = I_Range of var * expr * expr
64 :    
65 :     and stmt
66 :     = S_Block of stmt list
67 :     | S_Decl of var_decl
68 :     | S_IfThenElse of expr * stmt * stmt
69 :     | S_Assign of var * expr
70 : jhr 72 | S_New of Atom.atom * expr list
71 : jhr 71 | S_Die
72 :     | S_Stabilize
73 : jhr 2356 | S_Return of expr
74 : jhr 1640 | S_Print of expr list
75 : jhr 71
76 :     and expr
77 : jhr 170 = E_Var of var
78 : jhr 71 | E_Lit of Literal.literal
79 :     | E_Tuple of expr list
80 : jhr 82 | E_Apply of var * Ty.meta_var list * expr list * Ty.ty
81 : jhr 2356 (* note: operators can be polymorphic, so we record the meta-variable parameters. *)
82 :     | E_Cons of expr list (* tensor-value construction *)
83 : jhr 2636 | E_Seq of expr list (* sequence-value construction *)
84 : jhr 2356 | E_Slice of expr * expr option list * Ty.ty (* tensor slicing *)
85 :     | E_Cond of expr * expr * expr * Ty.ty (* ty is result type *)
86 : jhr 2636 | E_LoadNrrd of Ty.meta_var list * string * Ty.ty (* image loading *)
87 : jhr 2356 | E_Coerce of { (* coercion between types *)
88 :     srcTy : Ty.ty,
89 :     dstTy : Ty.ty,
90 :     e : expr
91 :     }
92 : jhr 71
93 : jhr 40 end

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0