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 25 - (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 14 | INT of IntInf.int
50 :     | FLOAT of FloatLit.float
51 :     | STRING of string
52 : jhr 19 | ID of Atom.atom
53 : jhr 14 ;
54 :    
55 : jhr 25 %defs (
56 :     (* apply a mark constructor to a span and a tree *)
57 :     fun mark cons (span : AntlrStreamPos.span, tr) = cons{span = span, tree = tr}
58 :    
59 :     );
60 :    
61 : jhr 14 File
62 :     : Decl+
63 :     ;
64 :    
65 :     Decl
66 : jhr 23 : InputDecl
67 :     | GlobalDecl
68 : jhr 14 | ActorDecl
69 :     ;
70 :    
71 : jhr 23
72 :     (***** Inputs *****)
73 :    
74 :     InputDecl
75 :     : "input" Type ID ( "=" Expr )? ";"
76 : jhr 14 ;
77 : jhr 19
78 : jhr 23 (***** Global declarations *****)
79 : jhr 19
80 : jhr 23 GlobalDecl
81 :     : Type ID "=" Expr ";"
82 :     ;
83 :    
84 :    
85 : jhr 19 (***** Actors *****)
86 :    
87 :     ActorDecl
88 :     : "actor" ID "(" Params ")" "{" ActorState* ActorMethod+ "}"
89 :     ;
90 :    
91 :     Params
92 :     : ( Param ( "," Param )* )?
93 :     ;
94 :    
95 :     Param
96 :     : Type ID
97 :     ;
98 :    
99 :     ActorState
100 :     : Type ID "=" Expr ";"
101 :     ;
102 :    
103 :     ActorMethod
104 : jhr 24 : ID Block
105 : jhr 19 ;
106 :    
107 : jhr 24 Block
108 : jhr 25 : "{" Stmt* "}"
109 :     => (markStmt(FULL_SPAN, PT.S_Block Stmt))
110 : jhr 24 ;
111 : jhr 19
112 : jhr 25 Stmt
113 :     : AtomicStmt
114 :     => (AtomicStmt)
115 :     | %try "if" "(" Expr ")" Stmt "else" Stmt
116 :     => (markStmt(FULL_SPAN, PT.S_IfThenElse(Expr, Stmt1, Stmt2)))
117 :     | %try "if" "(" Expr ")" Stmt
118 :     => (markStmt(FULL_SPAN, PT.S_IfThen(Expr, Stmt)))
119 :     ;
120 :    
121 :     AtomicStmt
122 :     : Block
123 :     => (Block)
124 :     | "stabilize" ";"
125 :     => (markStmt(FULL_SPAN, PT.S_Stabilize))
126 :     | "die" ";"
127 :     => (markStmt(FULL_SPAN, PT.S_Die))
128 :     | "new" ID "(" Arguments ")" ";"
129 :     => (markStmt(FULL_SPAN, PT.S_New(ID, Arguments)))
130 :     | Type ID "=" Expr ";"
131 :     => (markStmt(FULL_SPAN, PT.S_Decl(Type, ID, Expr)))
132 : jhr 24 | ID "=" Expr ";"
133 : jhr 25 => (markStmt(FULL_SPAN, PT.S_Assign(ID, Expr)))
134 : jhr 24 ;
135 :    
136 :     Arguments
137 :     : ( Expr ("," Expr)* )?
138 :     ;
139 :    
140 :    
141 : jhr 19 (***** Types *****)
142 :    
143 : jhr 24 Type : "image" "<" Dimensions ">"
144 :     | "tensor" "<" Dimensions ">"
145 :     | "field" "#" Dimension "<" Dimensions ">"
146 : jhr 23 | "kernel" "#" Dimension
147 :     | "vec" "<" Dimension ">"
148 :     | "bool"
149 : jhr 19 | "int"
150 :     | "real"
151 : jhr 24 | "string"
152 : jhr 19 ;
153 :    
154 : jhr 24 Dimensions
155 :     : ( Dimension ("," Dimension)* )?
156 :     ;
157 :    
158 : jhr 23 Dimension
159 : jhr 25 : INT
160 : jhr 23 ;
161 : jhr 19
162 :     (***** Expressions *****)
163 :    
164 :     Expr
165 :     : Expr1 ( "||" Expr1 )*
166 :     ;
167 :    
168 :     Expr1
169 :     : Expr2 ( "&&" Expr2 )*
170 :     ;
171 :    
172 :     Expr2
173 :     : Expr3 ( CmpOp Expr3 )*
174 :     ;
175 :    
176 : jhr 25 CmpOp
177 : jhr 19 : "<" | "<=" | "==" | ">=" | ">"
178 :     ;
179 :    
180 :     Expr3
181 :     : Expr4 ( AddOp Expr4 )*
182 :     ;
183 :    
184 :     AddOp
185 :     : "+" | "-"
186 :     ;
187 :    
188 :     Expr4
189 :     : Expr5 ( MulOp Expr5 )*
190 :     ;
191 :    
192 :     MulOp
193 :     : "*" | "/"
194 :     ;
195 :    
196 :     Expr5
197 : jhr 24 : Expr6 ( "@" Expr6 | "[" Expr "]" )*
198 : jhr 19 ;
199 :    
200 : jhr 25 Expr6
201 :     : AtomExp
202 :     | "-" AtomExp
203 :     ;
204 :    
205 : jhr 19 AtomExp
206 :     : ID
207 :     | INT
208 :     | FLOAT
209 :     | STRING
210 :     | "(" Expr ("," Expr)* ")"
211 :     ;

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