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

SCM Repository

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

Diff of /trunk/src/compiler/parser/diderot.grm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2355, Sun Apr 7 11:35:08 2013 UTC revision 2356, Sun Apr 7 14:45:25 2013 UTC
# Line 8  Line 8 
8    
9  %tokens  %tokens
10    : KW_bool             ("bool")    : KW_bool             ("bool")
   | KW_D                ("D")           (* either D or ∇ *)  
11    | KW_die              ("die")    | KW_die              ("die")
12    | KW_else             ("else")    | KW_else             ("else")
13    | KW_false            ("false")    | KW_false            ("false")
14    | KW_field            ("field")    | KW_field            ("field")
15      | KW_function         ("function")
16    | KW_identity         ("identity")    (* identity matrix *)    | KW_identity         ("identity")    (* identity matrix *)
17    | KW_if               ("if")    | KW_if               ("if")
18    | KW_image            ("image")    | KW_image            ("image")
# Line 25  Line 25 
25    | KW_output           ("output")    | KW_output           ("output")
26    | KW_print            ("print")    | KW_print            ("print")
27    | KW_real             ("real")    | KW_real             ("real")
28      | KW_return           ("return")
29    | KW_stabilize        ("stabilize")    | KW_stabilize        ("stabilize")
30    | KW_strand           ("strand")    | KW_strand           ("strand")
31    | KW_string           ("string")    | KW_string           ("string")
# Line 60  Line 61 
61    | OP_at               ("@")    | OP_at               ("@")
62    | OP_D                ("∇")    | OP_D                ("∇")
63    | OP_Dotimes          ("∇⊗")    | OP_Dotimes          ("∇⊗")
64    | OP_Dtimes           ("∇×")    | OP_curl             ("∇×")
65    | OP_Ddot             ("∇•")    | OP_Ddot             ("∇•")
66    | LP                  ("(")    | LP                  ("(")
67    | RP                  (")")    | RP                  (")")
# Line 82  Line 83 
83    ;    ;
84    
85  %keywords  %keywords
86    KW_bool, KW_D, KW_die, KW_else, KW_field, KW_identity, KW_if, KW_image, KW_initially,    KW_bool, KW_die, KW_else, KW_field, KW_identity, KW_if, KW_image, KW_initially,
87    KW_int, KW_kernel, KW_new, KW_output, KW_print, KW_real, KW_stabilize, KW_strand,    KW_int, KW_kernel, KW_new, KW_output, KW_print, KW_real, KW_stabilize, KW_strand,
88    KW_string, KW_tensor, KW_update, KW_vec2, KW_vec3, KW_vec4, KW_zeros;    KW_string, KW_tensor, KW_update, KW_vec2, KW_vec3, KW_vec4, KW_zeros;
89    
# Line 132  Line 133 
133  );  );
134    
135  File  File
136          : Decl+         => (PT.Program{span=FULL_SPAN, tree=Decl})          : GlobalDecl* StrandDecl CoordinationDecl
137                    => (PT.Program{span=FULL_SPAN, tree=GlobalDecl @ [StrandDecl, CoordinationDecl]})
138          ;          ;
139    
140  Decl  GlobalDecl
141          : InputDecl          : InputDecl
142          | VarDecl       => (mark PT.D_Mark (FULL_SPAN, PT.D_Var VarDecl))          | VarDecl
143          | StrandDecl                  => (mark PT.D_Mark (FULL_SPAN, PT.D_Var VarDecl))
144          | CoordinationDecl          | FunDecl
145          ;          ;
146    
147    
# Line 150  Line 152 
152                  => (markDecl(FULL_SPAN, PT.D_Input(ValueType, ID, Option.getOpt(SR1, ""), SR2)))                  => (markDecl(FULL_SPAN, PT.D_Input(ValueType, ID, Option.getOpt(SR1, ""), SR2)))
153          ;          ;
154    
155  (***** variable declarations *****)  
156    (***** Variable declarations *****)
157    
158  VarDecl  VarDecl
159          : Type ID "=" Expr ";"          : Type ID "=" Expr ";"
# Line 158  Line 161 
161          ;          ;
162    
163    
164  (***** Strands *****)  (***** Function declarations *****)
165    
166  StrandDecl  FunDecl
167          : "strand" ID "(" Params ")" "{" StrandStateDecl* StrandMethod+ "}"          : "function" ConcreteType ID "(" Params ")" FunBody
168                  => (markDecl(FULL_SPAN, PT.D_Strand{                  => (markDecl(FULL_SPAN, PT.D_Func(ConcreteType, ID, Params, FunBody)))
                       name = ID, params = Params, state = StrandStateDecl,  
                       methods = StrandMethod  
                     }))  
169          ;          ;
170    
171  Params  Params
# Line 178  Line 178 
178                  => (mark PT.P_Mark (FULL_SPAN, PT.P_Param(ValueType, ID)))                  => (mark PT.P_Mark (FULL_SPAN, PT.P_Param(ValueType, ID)))
179          ;          ;
180    
181    FunBody
182            : "=" Expr ";"
183                    => (PT.FB_Expr Expr)
184            | Block
185                    => (PT.FB_Stmt Block)
186            ;
187    
188    
189    (***** Strands *****)
190    
191    StrandDecl
192            : "strand" ID "(" Params ")" "{" StrandStateDecl* StrandMethod+ "}"
193                    => (markDecl(FULL_SPAN, PT.D_Strand{
194                          name = ID, params = Params, state = StrandStateDecl,
195                          methods = StrandMethod
196                        }))
197            ;
198    
199  StrandStateDecl  StrandStateDecl
200          : "output" VarDecl          : "output" VarDecl
201                  => (true, mark PT.VD_Mark (FULL_SPAN, VarDecl))                  => (true, mark PT.VD_Mark (FULL_SPAN, VarDecl))
# Line 232  Line 250 
250                  => (markStmt(FULL_SPAN, PT.S_OpAssign(ID, B.asgn_mul, Expr)))                  => (markStmt(FULL_SPAN, PT.S_OpAssign(ID, B.asgn_mul, Expr)))
251          | ID "/=" Expr ";"          | ID "/=" Expr ";"
252                  => (markStmt(FULL_SPAN, PT.S_OpAssign(ID, B.asgn_div, Expr)))                  => (markStmt(FULL_SPAN, PT.S_OpAssign(ID, B.asgn_div, Expr)))
253            | "return" Expr ";"
254                    => (markStmt(FULL_SPAN, PT.S_Return Expr))
255          ;          ;
256    
257  Arguments  Arguments
# Line 286  Line 306 
306                        }))                        }))
307          | "kernel" "#" Dimension          | "kernel" "#" Dimension
308                  => (markTy(FULL_SPAN, PT.T_Kernel Dimension))                  => (markTy(FULL_SPAN, PT.T_Kernel Dimension))
309          | ValueType ("{" Dimension "}")*          | ConcreteType
310                  => (case SR          ;
311                       of [] => ValueType  
312                        | d => markTy(FULL_SPAN, List.foldl (fn (dim, ty) => PT.T_Seq(ty, dim)) ValueType d)  ConcreteType
313                      (* end case *))          : ValueType SeqDimensions
314                    => (markTy(FULL_SPAN, SeqDimensions ValueType))
315            ;
316    SeqDimensions
317            : (* empty *)
318                    => (fn ty => ty)
319            | "{" Dimension "}" SeqDimensions
320                    => (fn ty => SeqDimensions(PT.T_Seq(ty, Dimension)))
321          ;          ;
322    
323  ValueType  ValueType
# Line 370  Line 397 
397  MulOp  MulOp
398          : "*" => (B.op_mul) | "/" => (B.op_div) | "⊛" => (B.op_convolve)          : "*" => (B.op_mul) | "/" => (B.op_div) | "⊛" => (B.op_convolve)
399          | "•" => (B.op_dot) | "×" => (B.op_cross) | "⊗" => (B.op_outer)          | "•" => (B.op_dot) | "×" => (B.op_cross) | "⊗" => (B.op_outer)
400            | ":" => (B.op_colon)
401          ;          ;
402    
403  PowerExpr  PowerExpr
404          : ProbeExpr ( "^" ProbeExpr => (B.op_exp, ProbeExpr) )*          : PrefixExpr ( "^" PrefixExpr => (B.op_exp, PrefixExpr) )*
405                  => (mkLBinExp (ProbeExpr, SR))                  => (mkLBinExp (PrefixExpr, SR))
         ;  
   
 ProbeExpr  
         : PrefixExpr ( "@" AtomExpr => (AtomExpr) )?  
                 => (case SR  
                      of NONE => PrefixExpr  
                       | SOME e => markExpr(FULL_SPAN, PT.E_BinOp(PrefixExpr, B.op_at, e))  
                     (* end case *))  
406          ;          ;
407    
408  PrefixExpr  PrefixExpr
# Line 392  Line 412 
412                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_neg, PrefixExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_neg, PrefixExpr)))
413          | "!" PrefixExpr          | "!" PrefixExpr
414                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_not, PrefixExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_not, PrefixExpr)))
         | "D" PrefixExpr  
                 => (markExpr(FULL_SPAN, PT.E_Apply(PT.E_Var  B.fn_D, [PrefixExpr])))  
415          ;          ;
416    
417  SuffixExpr  SuffixExpr
# Line 433  Line 451 
451          | "∇⊗" DerivExpr          | "∇⊗" DerivExpr
452                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_Dotimes, DerivExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_Dotimes, DerivExpr)))
453          | "∇×" DerivExpr          | "∇×" DerivExpr
454                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_Dtimes, DerivExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_curl, DerivExpr)))
455          | "∇•" DerivExpr          | "∇•" DerivExpr
456                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_Ddot, DerivExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_Ddot, DerivExpr)))
457          ;          ;
# Line 441  Line 459 
459  AtomExpr  AtomExpr
460          : ID          : ID
461                  => (markExpr(FULL_SPAN, PT.E_Var ID))                  => (markExpr(FULL_SPAN, PT.E_Var ID))
462          | KW_identity "[" Dimension "]"          | "identity" "[" Dimension "]"
463                  => (markExpr(FULL_SPAN, PT.E_Id Dimension))                  => (markExpr(FULL_SPAN, PT.E_Id Dimension))
464          | KW_zeros Dimensions          | "zeros" Dimensions
465                  => (markExpr(FULL_SPAN, PT.E_Zero Dimensions))                  => (markExpr(FULL_SPAN, PT.E_Zero Dimensions))
466    (* should the following be classified as SuffixExprs? *)
467          | "real" "(" Expr ")"          | "real" "(" Expr ")"
468                  => (markExpr(FULL_SPAN, PT.E_Real Expr))                  => (markExpr(FULL_SPAN, PT.E_Real Expr))
469          | "(" Expr ("," Expr)* ")"          | "(" Expr ("," Expr)* ")"
# Line 481  Line 500 
500                  => (markExpr(FULL_SPAN, PT.E_Sequence(Initializer::SR)))                  => (markExpr(FULL_SPAN, PT.E_Sequence(Initializer::SR)))
501          | "[" Initializer ("," Initializer)* "]"          | "[" Initializer ("," Initializer)* "]"
502                  => (markExpr(FULL_SPAN, PT.E_Cons(Initializer::SR)))                  => (markExpr(FULL_SPAN, PT.E_Cons(Initializer::SR)))
503            | "-" INT
504                    => (markExpr(FULL_SPAN, PT.E_Lit(L.Int(~INT))))
505            | "-" FLOAT
506                    => (markExpr(FULL_SPAN, PT.E_Lit(L.Float(FloatLit.negate FLOAT))))
507          | INT          | INT
508                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Int INT)))                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Int INT)))
509          | FLOAT          | FLOAT

Legend:
Removed from v.2355  
changed lines
  Added in v.2356

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