Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/cm/parse/cm.grm
ViewVC logotype

Diff of /sml/trunk/src/cm/parse/cm.grm

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

revision 262, Thu May 6 06:52:05 1999 UTC revision 265, Fri May 7 08:42:54 1999 UTC
# Line 1  Line 1 
1  (* -*- sml -*- *)  (* -*- sml -*- *)
2    
3  structure A = CMAbsyn  structure S = CMSemant
   
 fun guard (test, (th, el)) =  
     A.GUARDIAN { test = test, then_part = th, else_part = el }  
   
 fun arith (arith_op, left, right) =  
     A.ARITH { arith = arith_op, left = left, right = right }  
   
 fun lconn (conn_op, left, right) =  
     A.LCONN { conn = conn_op, left = left, right = right }  
   
 fun cmp (cmp_op, left, right) =  
     A.CMP { cmp = cmp_op, left = left, right = right }  
4    
5  %%  %%
6    
7  %term EOF  %term EOF
8      | ID of string      | FILE_STANDARD of string
9      | STRING of string      | FILE_NATIVE of string
10        | CM_ID of string
11        | ML_ID of string
12      | NUMBER of int      | NUMBER of int
13      | ALIAS | GROUP | LIBRARY | IS      | ALIAS | GROUP | LIBRARY | IS
14      | LPAREN | RPAREN | COMMA | COLON      | LPAREN | RPAREN | COLON
15      | IF | THEN | ELIF | ELSE | ENDIF      | IF | THEN | ELIF | ELSE | ENDIF
16      | STRUCTURE | SIGNATURE | FUNCTOR | FUNSIG      | STRUCTURE | SIGNATURE | FUNCTOR | FUNSIG
17      | DEFINED      | DEFINED
18      | PLUS | MINUS | TIMES | DIV | MOD | UMINUS      | PLUS | MINUS | TIMES | DIV | MOD | TILDE
19      | ANDALSO | ORELSE | NOT      | ANDALSO | ORELSE | NOT
20      | LT | LE | GT | GE | EQ | NE      | LT | LE | GT | GE | EQ | NE
21    
22  %nonterm description of A.description  %nonterm description of S.group
23         | alias of A.description         | alias of S.group
24         | group of A.description         | group of S.group
25         | opt_perm of string list         | opt_perms of S.perm list
26         | idlist of string list         | perms of S.perm list
27         | lib_exports of A.export list         | perm of S.perm
28         | exports of A.export list         | lib_exports of S.exports
29         | export of A.export         | exports of S.exports
30         | guarded_exports of A.export list * A.export list         | export of S.exports
31         | else_exports of A.export list         | guarded_exports of S.exports * S.exports
32         | members of A.member list         | else_exports of S.exports
33         | member of A.member         | members of S.members
34         | guarded_members of A.member list * A.member list         | member of S.members
35         | else_members of A.member list         | guarded_members of S.members * S.members
36         | arithexp of A.arithexp         | else_members of S.members
37         | boolexp of A.boolexp         | aexp of S.aexp
38         | exp of A.boolexp         | boolexp of S.exp
39         | ml_symbol of A.ml_symbol         | exp of S.exp
40         | filename of A.filename         | ml_symbol of S.ml_symbol
41         | cmpath of A.filename         | pathname of S.pathname
42         | nativepath of A.filename         | cmpath of S.pathname
43           | nativepath of S.pathname
44           | sym of S.cm_symbol
45    
46  %pos int  %pos int
47  %verbose  %verbose
48    %arg (currentDir) : S.pathname
49  %start description  %start description
50  %eop EOF  %eop EOF
51  %noshift EOF  %noshift EOF
# Line 61  Line 55 
55  %keyword ALIAS GROUP LIBRARY IS IF THEN ELIF ELSE ENDIF DEFINED  %keyword ALIAS GROUP LIBRARY IS IF THEN ELIF ELSE ENDIF DEFINED
56    STRUCTURE SIGNATURE FUNCTOR FUNSIG    STRUCTURE SIGNATURE FUNCTOR FUNSIG
57    
58  %prefer THEN ELSE LPAREN  %prefer LPAREN
59    
60  %left ORELSE  %left ORELSE
61  %left ANDALSO  %left ANDALSO
# Line 69  Line 63 
63  %nonassoc EQ NE  %nonassoc EQ NE
64  %left PLUS MINUS  %left PLUS MINUS
65  %left TIMES DIV MOD  %left TIMES DIV MOD
66  %left UMINUS NOT  %left NOT TILDE
67    
68  %%  %%
69    
70  description : alias                             (alias)  description : alias                             (alias)
71              | group                             (group)              | group                             (group)
72    
73  alias : ALIAS filename                          (A.ALIAS filename)  alias : ALIAS pathname                          (S.alias pathname)
74    
75    group : GROUP
76            opt_perms exports IS members            (S.group
77                                                     (opt_perms, exports, members))
78          | LIBRARY
79            opt_perms lib_exports IS members        (S.library
80                                                     (opt_perms, lib_exports,
81                                                      members))
82    
83    opt_perms : (* empty *)                         ([])
84              | LPAREN perms RPAREN                 (perms)
85    
86    perms : perm                                    ([perm])
87          | perm perms                              (perm :: perms)
88    
89    perm : sym                                      (S.require sym)
90         | COLON sym                                (S.grant sym)
91    
92  group : GROUP opt_perm exports IS members       (A.GROUP  lib_exports : export exports                    (S.exports (export, exports))
93                                                    { permissions = opt_perm,  
94                                                      exports = exports,  exports : (* empty *)                           (S.emptyExports)
95                                                      members = members })          | export exports                        (S.exports (export, exports))
96        | LIBRARY opt_perm lib_exports IS members (A.LIBRARY  
97                                                    { permissions = opt_perm,  export : ml_symbol                              (S.export ml_symbol)
98                                                      exports = lib_exports,         | IF exp guarded_exports                 (S.guarded_exports
99                                                      members = members })                                                    (exp, guarded_exports))
   
 opt_perm : (* empty *)                          ([])  
          | LPAREN idlist RPAREN                 (idlist)  
   
 idlist : ID                                     ([ID])  
        | ID COMMA idlist                        (ID :: idlist)  
   
 lib_exports : export exports                    (export :: exports)  
   
 exports : (* empty *)                           ([])  
         | export exports                        (export :: exports)  
   
 export : ml_symbol                              (A.EXPORT ml_symbol)  
        | IF exp guarded_exports                 (A.GUARDED_EXPORT  
                                                  (guard (exp,  
                                                          guarded_exports)))  
100    
101  guarded_exports : THEN exports else_exports     ((exports, else_exports))  guarded_exports : THEN exports else_exports     ((exports, else_exports))
102    
103  else_exports : ENDIF                            ([])  else_exports : ENDIF                            (S.emptyExports)
104               | ELSE exports ENDIF               (exports)               | ELSE exports ENDIF               (exports)
105               | ELIF exp guarded_exports         ([A.GUARDED_EXPORT               | ELIF exp guarded_exports         (S.guarded_exports
106                                                    (guard (exp,                                                   (exp, guarded_exports))
107                                                            guarded_exports))])  
108    members : (* empty *)                           (S.emptyMembers)
109  members : (* empty *)                           ([])          | member members                        (S.members (member, members))
110          | member members                        (member :: members)  
111    member : pathname                               (S.member (pathname, NONE))
112  member : filename                               (A.MEMBER { name = filename,         | pathname COLON sym                     (S.member (pathname, SOME sym))
113                                                              class = NONE })         | IF exp guarded_members                 (S.guarded_members
114         | filename COLON ID                      (A.MEMBER { name = filename,                                                   (exp, guarded_members))
                                                             class = SOME ID })  
        | IF exp guarded_members                 (A.GUARDED_MEMBER  
                                                  (guard (exp,  
                                                          guarded_members)))  
115    
116  guarded_members : THEN members else_members     ((members, else_members))  guarded_members : THEN members else_members     ((members, else_members))
117    
118  else_members : ENDIF                            ([])  else_members : ENDIF                            (S.emptyMembers)
119               | ELSE members ENDIF               (members)               | ELSE members ENDIF               (members)
120               | ELIF exp guarded_members         ([A.GUARDED_MEMBER               | ELIF exp guarded_members         (S.guarded_members
121                                                    (guard (exp,                                                   (exp, guarded_members))
122                                                            guarded_members))])  
123    sym : CM_ID                                     (S.cm_symbol CM_ID)
124    
125  exp : boolexp                                   (boolexp)  exp : boolexp                                   (boolexp)
126    
127  arithexp : NUMBER                               (A.NUMBER NUMBER)  aexp : NUMBER                                   (S.number NUMBER)
128           | ID                                   (A.VARIABLE ID)       | sym                                      (S.variable sym)
129           | LPAREN arithexp RPAREN               (arithexp)       | LPAREN aexp RPAREN                       (aexp)
130           | arithexp PLUS arithexp               (arith (A.PLUS,       | aexp PLUS aexp                           (S.plus (aexp1, aexp2))
131                                                          arithexp1, arithexp2))       | aexp MINUS aexp                          (S.minus (aexp1, aexp2))
132           | arithexp MINUS arithexp              (arith (A.MINUS,       | aexp TIMES aexp                          (S.times (aexp1, aexp2))
133                                                          arithexp1, arithexp2))       | aexp DIV aexp                            (S.divide (aexp1, aexp2))
134           | arithexp TIMES arithexp              (arith (A.TIMES,       | aexp MOD aexp                            (S.modulus (aexp1, aexp2))
135                                                          arithexp1, arithexp2))       | TILDE aexp                               (S.negate aexp)
          | arithexp DIV arithexp                (arith (A.DIV,  
                                                         arithexp1, arithexp2))  
          | arithexp MOD arithexp                (arith (A.MOD,  
                                                         arithexp1, arithexp2))  
          | MINUS arithexp %prec UMINUS          (A.NEGATE arithexp)  
136    
137  boolexp : DEFINED LPAREN ml_symbol RPAREN       (A.ML_DEFINED ml_symbol)  boolexp : DEFINED LPAREN ml_symbol RPAREN       (S.ml_defined ml_symbol)
138          | DEFINED LPAREN ID RPAREN              (A.CM_DEFINED ID)          | DEFINED LPAREN sym RPAREN             (S.cm_defined sym)
139          | LPAREN boolexp RPAREN                 (boolexp)          | LPAREN boolexp RPAREN                 (boolexp)
140          | boolexp ANDALSO boolexp               (lconn (A.ANDALSO,          | boolexp ANDALSO boolexp               (S.conj (boolexp1, boolexp2))
141                                                          boolexp1, boolexp2))          | boolexp ORELSE boolexp                (S.disj (boolexp1, boolexp2))
142          | boolexp ORELSE boolexp                (lconn (A.ORELSE,          | boolexp EQ boolexp                    (S.beq (boolexp1, boolexp2))
143                                                          boolexp1, boolexp2))          | boolexp NE boolexp                    (S.bne (boolexp1, boolexp2))
144          | boolexp EQ boolexp                    (lconn (A.BOOL_EQ,          | NOT boolexp                           (S.not boolexp)
145                                                          boolexp1, boolexp2))          | aexp LT aexp                          (S.lt (aexp1, aexp2))
146          | boolexp NE boolexp                    (lconn (A.BOOL_NE,          | aexp LE aexp                          (S.le (aexp1, aexp2))
147                                                          boolexp1, boolexp2))          | aexp GT aexp                          (S.gt (aexp1, aexp2))
148          | NOT boolexp                           (A.NOT boolexp)          | aexp GE aexp                          (S.ge (aexp1, aexp2))
149          | arithexp LT arithexp                  (cmp (A.LT,          | aexp EQ aexp                          (S.eq (aexp1, aexp2))
150                                                        arithexp1, arithexp2))          | aexp NE aexp                          (S.ne (aexp1, aexp2))
151          | arithexp LE arithexp                  (cmp (A.LE,  
152                                                        arithexp1, arithexp2))  ml_symbol : STRUCTURE ML_ID                     (S.ml_structure ML_ID)
153          | arithexp GT arithexp                  (cmp (A.GT,            | SIGNATURE ML_ID                     (S.ml_signature ML_ID)
154                                                        arithexp1, arithexp2))            | FUNCTOR ML_ID                       (S.ml_functor ML_ID)
155          | arithexp GE arithexp                  (cmp (A.GE,            | FUNSIG ML_ID                        (S.ml_funsig ML_ID)
156                                                        arithexp1, arithexp2))  
157          | arithexp EQ arithexp                  (cmp (A.EQ,  pathname : FILE_STANDARD                        (S.file_standard
158                                                        arithexp1, arithexp2))                                                   (FILE_STANDARD, currentDir))
159          | arithexp NE arithexp                  (cmp (A.NE,           | FILE_NATIVE                          (S.file_native
160                                                        arithexp1, arithexp2))                                                   (FILE_NATIVE, currentDir))
   
 ml_symbol : STRUCTURE ID                        (A.STRUCTURE ID)  
           | SIGNATURE ID                        (A.SIGNATURE ID)  
           | FUNCTOR ID                          (A.FUNCTOR ID)  
           | FUNSIG ID                           (A.FUNSIG ID)  
   
 filename : cmpath                               (cmpath)  
          | nativepath                           (nativepath)  
   
 cmpath : ID                                     (ID)  
   
 nativepath : STRING                             (STRING)  

Legend:
Removed from v.262  
changed lines
  Added in v.265

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