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 29, Wed Feb 10 21:45:00 2010 UTC revision 30, Wed Feb 10 22:17:50 2010 UTC
# Line 44  Line 44 
44    | LCB                 ("{")    | LCB                 ("{")
45    | RCB                 ("}")    | RCB                 ("}")
46    | COMMA               (",")    | COMMA               (",")
47    | SEMICOLON           (";")    | SEMI                (";")
48    | HASH                ("#")    | HASH                ("#")
49    | BANG                ("!")    | BANG                ("!")
50    | INT of IntInf.int    | INT of IntInf.int
# Line 56  Line 56 
56  %defs (  %defs (
57    structure PT = ParseTree    structure PT = ParseTree
58    structure L = Literal    structure L = Literal
59      structure Op = Operators
60    
61  (* apply a mark constructor to a span and a tree *)  (* apply a mark constructor to a span and a tree *)
62    fun mark cons (span : AntlrStreamPos.span, tr) = cons{span = span, tree = tr}    fun mark cons (span : AntlrStreamPos.span, tr) = cons{span = span, tree = tr}
# Line 66  Line 67 
67      | markTy (sp, tr) = mark PT.T_Mark (sp, tr)      | markTy (sp, tr) = mark PT.T_Mark (sp, tr)
68    fun markStmt (_, e as PT.S_Mark _) = e    fun markStmt (_, e as PT.S_Mark _) = e
69      | markStmt (sp, tr) = mark PT.S_Mark (sp, tr)      | markStmt (sp, tr) = mark PT.S_Mark (sp, tr)
70    fun markExp (_, e as PT.E_Mark _) = e    fun markExpr (_, e as PT.E_Mark _) = e
71      | markExp (sp, tr) = mark PT.E_Mark (sp, tr)      | markExpr (sp, tr) = mark PT.E_Mark (sp, tr)
72    
73  (* build an application for an infix binary operator *)  (* build an application for an infix binary operator *)
74    fun mkBinApp (e1, rator, e2) = PT.E_BinOp(e1, rator, e2)    fun mkBinApp (e1, rator, e2) = PT.E_BinOp(e1, rator, e2)
# Line 82  Line 83 
83      | mkRBinExp (e, (id, e')::r) = mkBinApp(e, id, mkRBinExp(e', r))      | mkRBinExp (e, (id, e')::r) = mkBinApp(e, id, mkRBinExp(e', r))
84    
85    fun flatten NONE = []    fun flatten NONE = []
86      | flatten (SOME l) = l      | flatten (SOME(x, xs)) = x::xs
87    
88  );  );
89    
90  File  File
# Line 91  Line 93 
93    
94  Decl  Decl
95          : InputDecl          : InputDecl
96          | VarDecl          | VarDecl       => (PT.D_Var VarDecl)
97          | ActorDecl          | ActorDecl
98          ;          ;
99    
# Line 133  Line 135 
135    
136  ActorMethod  ActorMethod
137          : ID Block          : ID Block
138                  => (mark PT.P_Mark (FULL_SPAN, PT.M_Method(ID, Block)))                  => (mark PT.M_Mark (FULL_SPAN, PT.M_Method(ID, Block)))
139          ;          ;
140    
141  Block  Block
# Line 206  Line 208 
208  (***** Expressions *****)  (***** Expressions *****)
209    
210  Expr  Expr
211          : Expr1 ( "||" Expr1 )*          : AndExpr ( "||" AndExpr => (Op.orElse, AndExpr) )*
212                    => (mkLBinExp (AndExpr, SR))
213          ;          ;
214    
215  Expr1  AndExpr
216          : Expr2 ( "&&" Expr2 )*          : CmpExpr ( "&&" CmpExpr => (Op.andAlso, CmpExpr) )*
217                    => (mkLBinExp (CmpExpr, SR))
218          ;          ;
219    
220  Expr2  CmpExpr
221          : Expr3 ( CmpOp Expr3 )*          : AddExpr ( CmpOp AddExpr )*
222                    => (mkLBinExp (AddExpr, SR))
223          ;          ;
224    
225  CmpOp  CmpOp
226          : "<" | "<=" | "==" | ">=" | ">"          : "<" => (Op.lt) | "<=" => (Op.lte)
227            | "==" => (Op.equ) | "!=" => (Op.neq)
228            | ">=" => (Op.gte) | ">" => (Op.gt)
229          ;          ;
230    
231  Expr3  AddExpr
232          : Expr4 ( AddOp Expr4 )*          : MulExpr ( AddOp MulExpr )*
233                    => (mkLBinExp (MulExpr, SR))
234          ;          ;
235    
236  AddOp  AddOp
237          : "+" | "-"          : "+" => (Op.plus) | "-" => (Op.minus)
238          ;          ;
239    
240  Expr4  MulExpr
241          : Expr5 ( MulOp Expr5 )*          : SelExpr ( MulOp SelExpr )*
242                    => (mkLBinExp (SelExpr, SR))
243          ;          ;
244    
245  MulOp  MulOp
246          : "*" | "/"          : "*" => (Op.times) | "/" => (Op.divide)
247          ;          ;
248    
249  Expr5  SelExpr
250          : Expr6 ( "@" Expr6 | "[" Expr "]" )*          : PrefixExpr ( "@" PrefixExpr => (Op.at, PrefixExpr) | "[" Expr "]" => (Op.sub, Expr) )*
251                    => (mkRBinExp (PrefixExpr, SR))
252          ;          ;
253    
254  Expr6  PrefixExpr
255          : AtomExp          : AtomExp
256                  => (AtomExp)                  => (AtomExp)
257          | "-" Expr6          | "-" PrefixExpr
258                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(uMinus, Expr6)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.uMinus, PrefixExpr)))
259          | "!" Expr6          | "!" PrefixExpr
260                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(bNot, Expr6)))                  => (markExpr(FULL_SPAN, PT.E_UnaryOp(Op.bNot, PrefixExpr)))
261          ;          ;
262    
263  AtomExp  AtomExp
264          : ID          : ID
265                  => (markExpr(FULL_SPAN, PT.E_Var ID))                  => (markExpr(FULL_SPAN, PT.E_Var ID))
266          | INT          | INT
267                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Int STRING)))                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Int INT)))
268          | FLOAT          | FLOAT
269                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Float STRING)))                  => (markExpr(FULL_SPAN, PT.E_Lit(L.Float FLOAT)))
270          | STRING          | STRING
271                  => (markExpr(FULL_SPAN, PT.E_Lit(L.String STRING)))                  => (markExpr(FULL_SPAN, PT.E_Lit(L.String STRING)))
272          | "(" Expr ("," Expr)* ")"          | "(" Expr ("," Expr)* ")"

Legend:
Removed from v.29  
changed lines
  Added in v.30

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