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 78, Mon May 24 22:31:49 2010 UTC revision 79, Tue May 25 01:55:48 2010 UTC
# Line 77  Line 77 
77    fun markExpr (_, e as PT.E_Mark _) = e    fun markExpr (_, e as PT.E_Mark _) = e
78      | markExpr (sp, tr) = mark PT.E_Mark (sp, tr)      | markExpr (sp, tr) = mark PT.E_Mark (sp, tr)
79    
80    fun mkCondExp cons (e, []) = e    fun mkCondExp cons = let
81      | mkCondExp cons (e, [e']) = cons(e, e')          fun mk (e, []) = e
82      | mkCondExp (e, e'::r) = cons(e, mkCondExp(e', r))            | mk (e, [e']) = cons(e, e')
83              | mk (e, e'::r) = cons(e, mk(e', r))
84            in
85              mk
86            end
87    
88  (* build an application for an infix binary operator *)  (* build an application for an infix binary operator *)
89    fun mkBinApp (e1, rator, e2) = PT.E_BinOp(e1, rator, e2)    fun mkBinApp (e1, rator, e2) = PT.E_BinOp(e1, rator, e2)
# Line 271  Line 275 
275    
276  Expr  Expr
277          : AndExpr ("||" AndExpr)*          : AndExpr ("||" AndExpr)*
278                  => (List.foldr PT.AndAlso                  => (mkCondExp PT.E_OrElse (AndExpr, SR))
279          ;          ;
280    
281  AndExpr  AndExpr
282          : CmpExpr ( "&&" CmpExpr => (Op.andAlso, CmpExpr) )*          : CmpExpr ( "&&" CmpExpr )*
283                  => (mkLBinExp (CmpExpr, SR))                  => (mkCondExp PT.E_AndAlso (CmpExpr, SR))
284          ;          ;
285    
286  CmpExpr  CmpExpr
# Line 285  Line 289 
289          ;          ;
290    
291  CmpOp  CmpOp
292          : "<" => (Op.lt) | "<=" => (Op.lte)          : "<" => (B.op_lt) | "<=" => (B.op_lte)
293          | "==" => (Op.equ) | "!=" => (Op.neq)          | "==" => (B.op_equ) | "!=" => (B.op_neq)
294          | ">=" => (Op.gte) | ">" => (Op.gt)          | ">=" => (B.op_gte) | ">" => (B.op_gt)
295          ;          ;
296    
297  AddExpr  AddExpr
# Line 296  Line 300 
300          ;          ;
301    
302  AddOp  AddOp
303          : "+" => (Op.plus) | "-" => (Op.minus)          : "+" => (B.op_add) | "-" => (B.op_sub)
304          ;          ;
305    
306  MulExpr  MulExpr
# Line 305  Line 309 
309          ;          ;
310    
311  MulOp  MulOp
312          : "*" => (Op.times) | "/" => (Op.divide)          : "*" => (B.op_mul) | "/" => (B.op_div)
313          ;          ;
314    
315  PrefixExpr  PrefixExpr
316          : SelExpr          : SelExpr
317                  => (SelExpr)                  => (SelExpr)
318          | "-" PrefixExpr          | "-" PrefixExpr
319                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.uMinus, PrefixExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_neg, PrefixExpr)))
320          | "!" PrefixExpr          | "!" PrefixExpr
321                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.bNot, PrefixExpr)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_not, PrefixExpr)))
322          | "D" PrefixExpr          | "D" PrefixExpr
323                  => (markExpr(FULL_SPAN, PT.E_Diff PrefixExpr))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(B.op_D, PrefixExpr)))
324          ;          ;
325    
326  SelExpr  SelExpr
327          : AtomExp ( "@" AtomExp => (Op.at, AtomExp) | "[" Expr "]" => (Op.sub, Expr) )*          : AtomExp ( "@" AtomExp => (B.op_at, AtomExp) | "[" Expr "]" => (B.op_subscript, Expr) )*
328                  => (mkRBinExp (AtomExp, SR))                  => (mkRBinExp (AtomExp, SR))
329          ;          ;
330    

Legend:
Removed from v.78  
changed lines
  Added in v.79

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