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

SCM Repository

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

Diff of /branches/vis12/src/compiler/parser/diderot.grm

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

revision 1925, Sat Jun 23 14:16:09 2012 UTC revision 1926, Sat Jun 23 18:01:57 2012 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")
# Line 21  Line 20 
20    | KW_initially        ("initially")    | KW_initially        ("initially")
21    | KW_int              ("int")    | KW_int              ("int")
22    | KW_kernel           ("kernel")    | KW_kernel           ("kernel")
23      | KW_load             ("load")
24    | KW_new              ("new")    | KW_new              ("new")
25    | KW_output           ("output")    | KW_output           ("output")
26    | KW_print            ("print")    | KW_print            ("print")
# Line 82  Line 82 
82    ;    ;
83    
84  %keywords  %keywords
85    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,
86    KW_int, KW_kernel, KW_new, KW_output, KW_print, KW_real, KW_stabilize, KW_strand,    KW_int, KW_kernel, KW_load, KW_new, KW_output, KW_print, KW_real, KW_stabilize,
87    KW_string, KW_tensor, KW_update, KW_vec2, KW_vec3, KW_vec4, KW_zeros;    KW_strand, KW_string, KW_tensor, KW_update, KW_vec2, KW_vec3, KW_vec4, KW_zeros;
88    
89  %defs (  %defs (
90    structure PT = ParseTree    structure PT = ParseTree
# Line 132  Line 132 
132  );  );
133    
134  File  File
135          : Decl+         => (PT.Program{span=FULL_SPAN, tree=Decl})          : GlobalDecl+ StrandDecl CoordinationDecl
136                    => (PT.Program{span=FULL_SPAN, tree=GlobalDecl @ [StrandDecl, CoordinationDecl]})
137          ;          ;
138    
139  Decl  GlobalDecl
140          : InputDecl          : InputDecl
141          | VarDecl       => (mark PT.D_Mark (FULL_SPAN, PT.D_Var VarDecl))          | VarDecl
142          | StrandDecl                  => (mark PT.D_Mark (FULL_SPAN, PT.D_Var VarDecl))
         | CoordinationDecl  
143          ;          ;
144    
   
145  (***** Inputs *****)  (***** Inputs *****)
146    
147  InputDecl  InputDecl
148          : "input" ValueType ID ("(" STRING ")")? ( "=" Initializer )? ";"          : "input" InputType ID ("(" STRING ")")? ( "=" Initializer )? ";"
149                  => (markDecl(FULL_SPAN, PT.D_Input(ValueType, ID, Option.getOpt(SR1, ""), SR2)))                  => (markDecl(FULL_SPAN, PT.D_Input(InputType, ID, Option.getOpt(SR1, ""), SR2)))
150          ;          ;
151    
152  (***** variable declarations *****)  (***** variable declarations *****)
# Line 299  Line 298 
298                  => (fn ty => SeqDimensions(PT.T_Seq(ty, Dimension)))                  => (fn ty => SeqDimensions(PT.T_Seq(ty, Dimension)))
299          ;          ;
300    
301    InputType
302            : "image" "(" Dimension ")" Dimensions
303                    => (markTy(FULL_SPAN, PT.T_Image{
304                            shape = Dimensions, dim = Dimension
305                          }))
306            | ValueType SeqDimensions
307                    => (markTy(FULL_SPAN, SeqDimensions ValueType))
308            ;
309    
310  ValueType  ValueType
311          : "tensor" Dimensions          : "tensor" Dimensions
312                  => (markTy(FULL_SPAN, PT.T_Tensor Dimensions))                  => (markTy(FULL_SPAN, PT.T_Tensor Dimensions))
# Line 390  Line 398 
398                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_neg, PrefixExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_neg, PrefixExpr)))
399          | "!" PrefixExpr          | "!" PrefixExpr
400                  => (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])))  
401          ;          ;
402    
403  SuffixExpr  SuffixExpr
# Line 443  Line 449 
449                  => (markExpr(FULL_SPAN, PT.E_Id Dimension))                  => (markExpr(FULL_SPAN, PT.E_Id Dimension))
450          | KW_zeros Dimensions          | KW_zeros Dimensions
451                  => (markExpr(FULL_SPAN, PT.E_Zero Dimensions))                  => (markExpr(FULL_SPAN, PT.E_Zero Dimensions))
452    (* should the following be classified as SuffixExprs? *)
453          | "real" "(" Expr ")"          | "real" "(" Expr ")"
454                  => (markExpr(FULL_SPAN, PT.E_Real Expr))                  => (markExpr(FULL_SPAN, PT.E_Real Expr))
455            | LoadExpr
456                    => (LoadExpr)
457          | "(" Expr ("," Expr)* ")"          | "(" Expr ("," Expr)* ")"
458                  => (case SR                  => (case SR
459                       of [] => Expr                       of [] => Expr
# Line 475  Line 484 
484                  => (markExpr(FULL_SPAN, PT.E_Id Dimension))                  => (markExpr(FULL_SPAN, PT.E_Id Dimension))
485          | KW_zeros Dimensions          | KW_zeros Dimensions
486                  => (markExpr(FULL_SPAN, PT.E_Zero Dimensions))                  => (markExpr(FULL_SPAN, PT.E_Zero Dimensions))
487            | LoadExpr
488                    => (LoadExpr)
489          | "{" Initializer ("," Initializer)* "}"          | "{" Initializer ("," Initializer)* "}"
490                  => (markExpr(FULL_SPAN, PT.E_Sequence(Initializer::SR)))                  => (markExpr(FULL_SPAN, PT.E_Sequence(Initializer::SR)))
491          | "[" Initializer ("," Initializer)* "]"          | "[" Initializer ("," Initializer)* "]"
# Line 494  Line 505 
505          | "false"          | "false"
506                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Bool false)))                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Bool false)))
507          ;          ;
508    
509    LoadExpr
510            : KW_image "(" STRING ")"
511                    => (markExpr(FULL_SPAN,
512                          PT.E_Apply(PT.E_Var B.fn_image, [PT.E_Lit(L.String STRING)])))
513            | KW_load "(" STRING ")"
514                    => (markExpr(FULL_SPAN,
515                          PT.E_Apply(PT.E_Var B.fn_load, [PT.E_Lit(L.String STRING)])))
516            ;

Legend:
Removed from v.1925  
changed lines
  Added in v.1926

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