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 3349 - (view) (download)

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

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