|
|
1.1 root 1: (* Copyright 1989 by AT&T Bell Laboratories *)
2: structure FirstSets = struct
3:
4: local open Token Basics in
5:
6: fun firstApat lookFIX =
7: fn ID s => lookFIX(s) = NONfix
8: | OP => true
9: | IDDOT _ => true
10: | INT _ => true
11: | REAL _ => true
12: | STRING _ => true
13: | WILD => true
14: | LPAREN => true
15: | LBRACE => true
16: | LBRACKET => true
17: | _ => false
18:
19: fun firstAexp lookFIX =
20: fn ID s => lookFIX(s) = NONfix
21: | OP => true
22: | IDDOT _ => true
23: | INT _ => true
24: | REAL _ => true
25: | STRING _ => true
26: | HASH => true
27: | LPAREN => true
28: | LBRACE => true
29: | LBRACKET => true
30: | LET => true
31: | _ => false
32:
33: fun firstExp lookFIX =
34: fn IF => true
35: | WHILE => true
36: | CASE => true
37: | RAISE => true
38: | FN => true
39: | tok => firstAexp lookFIX tok
40:
41: val firstLdec =
42: fn VAL => true
43: | FUN => true
44: | TYPE => true
45: | DATATYPE => true
46: | ABSTYPE => true
47: | EXCEPTION => true
48: | Token.OPEN => true
49: | LOCAL => true
50: | INFIX => true
51: | INFIXR => true
52: | NONFIX => true
53: | OVERLOAD => true
54: | _ => false
55:
56: val firstSdec =
57: fn VAL => true
58: | FUN => true
59: | TYPE => true
60: | DATATYPE => true
61: | ABSTYPE => true
62: | EXCEPTION => true
63: | Token.OPEN => true
64: | LOCAL => true
65: | INFIX => true
66: | INFIXR => true
67: | NONFIX => true
68: | OVERLOAD => true
69: | STRUCTURE => true
70: | ABSTRACTION => true
71: | Token.FUNCTOR => true (* monster structure hack *)
72: | SIGNATURE => true (* ditto *)
73: | _ => false
74:
75: val firstTdec =
76: fn SIGNATURE => true
77: | STRUCTURE => true
78: | ABSTRACTION => true
79: | Token.FUNCTOR => true
80: | _ => false
81:
82: val firstSpec =
83: fn STRUCTURE => true
84: | TYPE => true
85: | EQTYPE => true
86: | DATATYPE => true
87: | SHARING => true
88: | VAL => true
89: | EXCEPTION => true
90: | INFIX => true
91: | INFIXR => true
92: | NONFIX => true
93: | OVERLOAD => true
94: | INCLUDE => true
95: | LOCAL => true
96: | Token.OPEN => true
97: | _ => false
98:
99: end (* local *)
100:
101: end (* FirstSets *)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.