[project @ 1999-06-01 16:15:42 by simonmar]
[ghc-hetmet.git] / ghc / compiler / parser / tree.ugn
1 %{
2 #include "hspincl.h"
3 %}
4 %{{
5 module U_tree where
6
7 #include "HsVersions.h"
8
9 import UgenUtil
10
11 import U_constr         ( U_constr )    -- interface only
12 import U_binding
13 import U_match
14 import U_list
15 import U_literal
16 import U_maybe
17 import U_qid
18 import U_ttype
19 %}}
20 type tree;
21         hmodule : < ghname      : stringId;
22                     ghimplist   : list;         /* [import] */
23                     ghexplist   : maybe;        /* Maybe [entity] */
24                     ghmodlist   : binding;
25                     ghversion   : long;
26                     ghmodline   : long; >;
27
28         ident   : < gident      : qid; >;
29         lit     : < glit        : literal; >;
30
31         ap      : < gfun        : tree;
32                     garg        : tree; >;
33         infixap : < ginffun     : qid;
34                     ginfarg1    : tree;
35                     ginfarg2    : tree; >;
36         negate  : < gnexp       : tree; >;
37
38         lambda  : < glammatch   : match;>;
39
40         let     : < gletvdefs   : binding;
41                     gletvexpr   : tree; >;
42         casee   : < gcaseexpr   : tree;
43                     gcasebody   : list;         /* Of match */
44                     gcaseline   : long; >;
45         ife     : < gifpred     : tree;
46                     gifthen     : tree;
47                     gifelse     : tree;
48                     gifline     : long; >;
49         doe     : < gdo         : list;
50                     gdoline     : long; >;
51
52         dobind  : < gdobindpat  : tree;
53                     gdobindexp  : tree;
54                     gdobindline : long; >;
55         doexp   : < gdoexp      : tree;
56                     gdoexpline  : long; >;
57         seqlet  : < gseqlet     : binding; >;
58
59         record  : < grcon       : qid;
60                     grbinds     : list; >;      /* [rbind] */ 
61         rupdate : < gupdexp     : tree;
62                     gupdbinds   : list; >;      /* [rbind] */ 
63         rbind   : < grbindvar   : qid;
64                     grbindexp   : maybe; >;     /* Maybe expr */
65
66         par     : < gpare       : tree; >;
67         as      : < gasid       : qid;
68                     gase        : tree; >;
69         lazyp   : < glazyp      : tree; >;
70         plusp   : < gplusp      : qid; 
71                     gplusi      : literal; >;
72         wildp   : < >;
73         restr   : < grestre     : tree;         /* type signature */
74                     grestrt     : ttype; >;
75
76         tuple   : < gtuplelist  : list; >;
77         utuple  : < gutuplelist : list; >;
78         llist   : < gllist      : list; >;
79         eenum   : < gefrom      : tree;
80                     gestep      : maybe;
81                     geto        : maybe; >;
82         comprh  : < gcexp       : tree;
83                     gcquals     : list; >;
84         qual    : < gqpat       : tree;
85                     gqexp       : tree; >;
86         guard   : < ggexp       : tree; >;
87
88         lsection: < glsexp      : tree; 
89                     glsop       : qid; >;
90         rsection: < grsop       : qid;
91                     grsexp      : tree; >;
92
93         ccall   : < gccid       : stringId;
94                     gccinfo     : stringId;
95                     gccargs     : list; >;
96         scc     : < gsccid      : hstring;
97                     gsccexp     : tree; >;
98 end;