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

SCM Repository

[diderot] Annotation of /trunk/src/parser/diderot.grm
ViewVC logotype

Annotation of /trunk/src/parser/diderot.grm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 27 - (view) (download)

1 : jhr 14 (* diderot.grm
2 :     *
3 :     * COPYRIGHT (c) 2010 The Diderot Project (http://diderot.cs.uchicago.edu)
4 :     * All rights reserved.
5 :     *)
6 :    
7 :     %name Diderot;
8 :    
9 :     %tokens
10 :     : KW_actor ("actor")
11 : jhr 25 | KW_bool ("bool")
12 : jhr 19 | KW_die ("die")
13 : jhr 25 | KW_else ("else")
14 : jhr 14 | KW_field ("field")
15 : jhr 25 | KW_if ("if")
16 : jhr 14 | KW_image ("image")
17 : jhr 25 | KW_input ("input")
18 :     | KW_int ("int")
19 :     | KW_kernel ("kernel")
20 : jhr 19 | KW_new ("new")
21 : jhr 25 | KW_real ("real")
22 :     | KW_stabilize ("stabilize")
23 :     | KW_string ("string")
24 :     | KW_tensor ("tensor")
25 :     | KW_vec ("vec")
26 :     | OP_eq ("=")
27 : jhr 19 | OP_orelse ("||")
28 :     | OP_andalso ("&&")
29 :     | OP_lt ("<")
30 :     | OP_lte ("<=")
31 :     | OP_eqeq ("==")
32 :     | OP_neq ("!=")
33 :     | OP_gte (">=")
34 :     | OP_gt (">")
35 : jhr 14 | OP_plus ("+")
36 :     | OP_minus ("-")
37 :     | OP_star ("*")
38 : jhr 19 | OP_slash ("/")
39 : jhr 14 | OP_at ("@")
40 :     | LP ("(")
41 :     | RP (")")
42 :     | LB ("[")
43 :     | RB ("]")
44 :     | LCB ("{")
45 :     | RCB ("}")
46 : jhr 25 | COMMA (",")
47 :     | SEMICOLON (";")
48 :     | HASH ("#")
49 : jhr 26 | BANG ("!")
50 : jhr 14 | INT of IntInf.int
51 :     | FLOAT of FloatLit.float
52 :     | STRING of string
53 : jhr 19 | ID of Atom.atom
54 : jhr 14 ;
55 :    
56 : jhr 25 %defs (
57 : jhr 27 structure PT = ParseTree
58 :     structure L = Literal
59 :    
60 : jhr 25 (* apply a mark constructor to a span and a tree *)
61 :     fun mark cons (span : AntlrStreamPos.span, tr) = cons{span = span, tree = tr}
62 :    
63 : jhr 27 (* specialize mark functions for common node types *)
64 :     val markDecl = mark PT.D_Mark
65 :     fun markTy (_, e as PT.T_Mark _) = e
66 :     | markTy (sp, tr) = mark PT.T_Mark (sp, tr)
67 :     fun markStmt (_, e as PT.S_Mark _) = e
68 :     | markStmt (sp, tr) = mark PT.S_Mark (sp, tr)
69 :     fun markExp (_, e as PT.E_Mark _) = e
70 :     | markExp (sp, tr) = mark PT.E_Mark (sp, tr)
71 :    
72 :     fun flatten NONE = []
73 :     | flatten (SOME l) = l
74 : jhr 25 );
75 :    
76 : jhr 14 File
77 :     : Decl+
78 :     ;
79 :    
80 :     Decl
81 : jhr 23 : InputDecl
82 : jhr 27 | VarDecl
83 : jhr 14 | ActorDecl
84 :     ;
85 :    
86 : jhr 23
87 :     (***** Inputs *****)
88 :    
89 :     InputDecl
90 :     : "input" Type ID ( "=" Expr )? ";"
91 : jhr 27 => (markDecl(FULL_SPAN, PT.D_Input(Type, ID, SR)))
92 : jhr 14 ;
93 : jhr 19
94 : jhr 27 (***** variable declarations *****)
95 : jhr 19
96 : jhr 27 VarDecl
97 : jhr 23 : Type ID "=" Expr ";"
98 : jhr 27 => (mark PT.VD_Mark (FULL_SPAN, PT.VD_Decl(Type, ID, Expr)))
99 : jhr 23 ;
100 :    
101 :    
102 : jhr 19 (***** Actors *****)
103 :    
104 :     ActorDecl
105 : jhr 27 : "actor" ID "(" Params ")" "{" VarDecl* ActorMethod+ "}"
106 :     => (markDecl(FULL_SPAN, PT.D_Actor{
107 :     name = ID, params = Params, state = VarDecl,
108 :     methods = ActorMethod
109 :     }))
110 : jhr 19 ;
111 :    
112 :     Params
113 :     : ( Param ( "," Param )* )?
114 : jhr 27 => (flatten SR)
115 : jhr 19 ;
116 :    
117 :     Param
118 :     : Type ID
119 : jhr 27 => (mark PT.P_Mark (FULL_SPAN, PT.P_Param(Type, ID)))
120 : jhr 19 ;
121 :    
122 :     ActorMethod
123 : jhr 24 : ID Block
124 : jhr 27 => (mark PT.P_Mark (FULL_SPAN, PT.M_Method(ID, Block)))
125 : jhr 19 ;
126 :    
127 : jhr 24 Block
128 : jhr 25 : "{" Stmt* "}"
129 :     => (markStmt(FULL_SPAN, PT.S_Block Stmt))
130 : jhr 24 ;
131 : jhr 19
132 : jhr 25 Stmt
133 :     : AtomicStmt
134 :     => (AtomicStmt)
135 :     | %try "if" "(" Expr ")" Stmt "else" Stmt
136 :     => (markStmt(FULL_SPAN, PT.S_IfThenElse(Expr, Stmt1, Stmt2)))
137 :     | %try "if" "(" Expr ")" Stmt
138 :     => (markStmt(FULL_SPAN, PT.S_IfThen(Expr, Stmt)))
139 :     ;
140 :    
141 :     AtomicStmt
142 :     : Block
143 :     => (Block)
144 : jhr 27 | VarDecl
145 :     => (PT.S_Decl VarDecl)
146 : jhr 25 | "stabilize" ";"
147 :     => (markStmt(FULL_SPAN, PT.S_Stabilize))
148 :     | "die" ";"
149 :     => (markStmt(FULL_SPAN, PT.S_Die))
150 :     | "new" ID "(" Arguments ")" ";"
151 :     => (markStmt(FULL_SPAN, PT.S_New(ID, Arguments)))
152 : jhr 24 | ID "=" Expr ";"
153 : jhr 25 => (markStmt(FULL_SPAN, PT.S_Assign(ID, Expr)))
154 : jhr 24 ;
155 :    
156 :     Arguments
157 :     : ( Expr ("," Expr)* )?
158 : jhr 27 => (flatten SR)
159 : jhr 24 ;
160 :    
161 :    
162 : jhr 19 (***** Types *****)
163 :    
164 : jhr 24 Type : "image" "<" Dimensions ">"
165 : jhr 26 => (markTy(FULL_SPAN, PT.T_Image Dimensions))
166 : jhr 24 | "tensor" "<" Dimensions ">"
167 : jhr 26 => (markTy(FULL_SPAN, PT.T_Tensor Dimensions))
168 : jhr 24 | "field" "#" Dimension "<" Dimensions ">"
169 : jhr 26 => (markTy(FULL_SPAN, PT.T_Field(Dimension, Dimensions)))
170 : jhr 23 | "kernel" "#" Dimension
171 : jhr 26 => (markTy(FULL_SPAN, PT.T_Kernel Dimension))
172 : jhr 23 | "vec" "<" Dimension ">"
173 : jhr 26 => (markTy(FULL_SPAN, PT.T_Vec Dimension))
174 : jhr 23 | "bool"
175 : jhr 26 => (markTy(FULL_SPAN, PT.T_Bool))
176 : jhr 19 | "int"
177 : jhr 26 => (markTy(FULL_SPAN, PT.T_Int))
178 : jhr 19 | "real"
179 : jhr 26 => (markTy(FULL_SPAN, PT.T_Real))
180 : jhr 24 | "string"
181 : jhr 26 => (markTy(FULL_SPAN, PT.T_String))
182 : jhr 19 ;
183 :    
184 : jhr 24 Dimensions
185 :     : ( Dimension ("," Dimension)* )?
186 : jhr 27 => (flatten SR)
187 : jhr 24 ;
188 :    
189 : jhr 23 Dimension
190 : jhr 25 : INT
191 : jhr 27 => (INT)
192 : jhr 23 ;
193 : jhr 19
194 :     (***** Expressions *****)
195 :    
196 :     Expr
197 :     : Expr1 ( "||" Expr1 )*
198 :     ;
199 :    
200 :     Expr1
201 :     : Expr2 ( "&&" Expr2 )*
202 :     ;
203 :    
204 :     Expr2
205 :     : Expr3 ( CmpOp Expr3 )*
206 :     ;
207 :    
208 : jhr 25 CmpOp
209 : jhr 19 : "<" | "<=" | "==" | ">=" | ">"
210 :     ;
211 :    
212 :     Expr3
213 :     : Expr4 ( AddOp Expr4 )*
214 :     ;
215 :    
216 :     AddOp
217 :     : "+" | "-"
218 :     ;
219 :    
220 :     Expr4
221 :     : Expr5 ( MulOp Expr5 )*
222 :     ;
223 :    
224 :     MulOp
225 :     : "*" | "/"
226 :     ;
227 :    
228 :     Expr5
229 : jhr 24 : Expr6 ( "@" Expr6 | "[" Expr "]" )*
230 : jhr 19 ;
231 :    
232 : jhr 25 Expr6
233 :     : AtomExp
234 : jhr 27 => (AtomExp)
235 : jhr 26 | "-" Expr6
236 : jhr 27 => (markExpr(FULL_SPAN, PT.E_UnaryOp(uMinus, Expr6)))
237 : jhr 26 | "!" Expr6
238 : jhr 27 => (markExpr(FULL_SPAN, PT.E_UnaryOp(bNot, Expr6)))
239 : jhr 25 ;
240 :    
241 : jhr 19 AtomExp
242 :     : ID
243 : jhr 27 => (markExpr(FULL_SPAN, PT.E_Var ID))
244 : jhr 19 | INT
245 : jhr 27 => (markExpr(FULL_SPAN, PT.E_Lit(L.Int STRING)))
246 : jhr 19 | FLOAT
247 : jhr 27 => (markExpr(FULL_SPAN, PT.E_Lit(L.Float STRING)))
248 : jhr 19 | STRING
249 : jhr 27 => (markExpr(FULL_SPAN, PT.E_Lit(L.String STRING)))
250 : jhr 19 | "(" Expr ("," Expr)* ")"
251 : jhr 27 => (case SR
252 :     of [] => Expr
253 :     | l => markExpr(FULL_SPAN, PT.E_Tuple(Expr::l))
254 :     (* end case *))
255 : jhr 19 ;

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