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

SCM Repository

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

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

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

revision 26, Tue Feb 9 00:43:01 2010 UTC revision 27, Tue Feb 9 02:36:31 2010 UTC
# Line 54  Line 54 
54    ;    ;
55    
56  %defs (  %defs (
57      structure PT = ParseTree
58      structure L = Literal
59    
60  (* apply a mark constructor to a span and a tree *)  (* apply a mark constructor to a span and a tree *)
61    fun mark cons (span : AntlrStreamPos.span, tr) = cons{span = span, tree = tr}    fun mark cons (span : AntlrStreamPos.span, tr) = cons{span = span, tree = tr}
62    
63    (* 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  );  );
75    
76  File  File
# Line 65  Line 79 
79    
80  Decl  Decl
81          : InputDecl          : InputDecl
82          | GlobalDecl          | VarDecl
83          | ActorDecl          | ActorDecl
84          ;          ;
85    
# Line 74  Line 88 
88    
89  InputDecl  InputDecl
90          : "input" Type ID ( "=" Expr )? ";"          : "input" Type ID ( "=" Expr )? ";"
91                    => (markDecl(FULL_SPAN, PT.D_Input(Type, ID, SR)))
92          ;          ;
93    
94  (***** Global declarations *****)  (***** variable declarations *****)
95    
96  GlobalDecl  VarDecl
97          : Type ID "=" Expr ";"          : Type ID "=" Expr ";"
98                    => (mark PT.VD_Mark (FULL_SPAN, PT.VD_Decl(Type, ID, Expr)))
99          ;          ;
100    
101    
102  (***** Actors *****)  (***** Actors *****)
103    
104  ActorDecl  ActorDecl
105          : "actor" ID "(" Params ")" "{" ActorState* ActorMethod+ "}"          : "actor" ID "(" Params ")" "{" VarDecl* ActorMethod+ "}"
106                    => (markDecl(FULL_SPAN, PT.D_Actor{
107                          name = ID, params = Params, state = VarDecl,
108                          methods = ActorMethod
109                        }))
110          ;          ;
111    
112  Params  Params
113          : ( Param ( "," Param )* )?          : ( Param ( "," Param )* )?
114                    => (flatten SR)
115          ;          ;
116    
117  Param  Param
118          : Type ID          : Type ID
119          ;                  => (mark PT.P_Mark (FULL_SPAN, PT.P_Param(Type, ID)))
   
 ActorState  
         : Type ID "=" Expr ";"  
120          ;          ;
121    
122  ActorMethod  ActorMethod
123          : ID Block          : ID Block
124                    => (mark PT.P_Mark (FULL_SPAN, PT.M_Method(ID, Block)))
125          ;          ;
126    
127  Block  Block
# Line 122  Line 141 
141  AtomicStmt  AtomicStmt
142          : Block          : Block
143                  => (Block)                  => (Block)
144            | VarDecl
145                    => (PT.S_Decl VarDecl)
146          | "stabilize" ";"          | "stabilize" ";"
147                  => (markStmt(FULL_SPAN, PT.S_Stabilize))                  => (markStmt(FULL_SPAN, PT.S_Stabilize))
148          | "die" ";"          | "die" ";"
149                  => (markStmt(FULL_SPAN, PT.S_Die))                  => (markStmt(FULL_SPAN, PT.S_Die))
150          | "new" ID "(" Arguments ")" ";"          | "new" ID "(" Arguments ")" ";"
151                  => (markStmt(FULL_SPAN, PT.S_New(ID, Arguments)))                  => (markStmt(FULL_SPAN, PT.S_New(ID, Arguments)))
         | Type ID "=" Expr ";"  
                 => (markStmt(FULL_SPAN, PT.S_Decl(Type, ID, Expr)))  
152          | ID "=" Expr ";"          | ID "=" Expr ";"
153                  => (markStmt(FULL_SPAN, PT.S_Assign(ID, Expr)))                  => (markStmt(FULL_SPAN, PT.S_Assign(ID, Expr)))
154          ;          ;
155    
156  Arguments  Arguments
157          : ( Expr ("," Expr)* )?          : ( Expr ("," Expr)* )?
158                    => (flatten SR)
159          ;          ;
160    
161    
# Line 163  Line 183 
183    
184  Dimensions  Dimensions
185          : ( Dimension ("," Dimension)* )?          : ( Dimension ("," Dimension)* )?
186                    => (flatten SR)
187          ;          ;
188    
189  Dimension  Dimension
190          : INT          : INT
191                    => (INT)
192          ;          ;
193    
194  (***** Expressions *****)  (***** Expressions *****)
# Line 209  Line 231 
231    
232  Expr6  Expr6
233          : AtomExp          : AtomExp
234                    => (AtomExp)
235          | "-" Expr6          | "-" Expr6
236                    => (markExpr(FULL_SPAN, PT.E_UnaryOp(uMinus, Expr6)))
237          | "!" Expr6          | "!" Expr6
238                    => (markExpr(FULL_SPAN, PT.E_UnaryOp(bNot, Expr6)))
239          ;          ;
240    
241  AtomExp  AtomExp
242          : ID          : ID
243                    => (markExpr(FULL_SPAN, PT.E_Var ID))
244          | INT          | INT
245                    => (markExpr(FULL_SPAN, PT.E_Lit(L.Int STRING)))
246          | FLOAT          | FLOAT
247                    => (markExpr(FULL_SPAN, PT.E_Lit(L.Float STRING)))
248          | STRING          | STRING
249                    => (markExpr(FULL_SPAN, PT.E_Lit(L.String STRING)))
250          | "(" Expr ("," Expr)* ")"          | "(" Expr ("," Expr)* ")"
251                    => (case SR
252                         of [] => Expr
253                          | l => markExpr(FULL_SPAN, PT.E_Tuple(Expr::l))
254                        (* end case *))
255          ;          ;

Legend:
Removed from v.26  
changed lines
  Added in v.27

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