1: # 4 "./lpsrc/flx_keywords.ipk"
2:
3: open Flx_parse
4: open List
5:
6: let hash_table_from_list n lst =
7: let tbl = Hashtbl.create n
8: in let addEntry (s,kw) = Hashtbl.add tbl s kw
9: in
10: List.iter addEntry lst;
11: tbl
12:
13:
14: let flx_keyword_table = (* 97 is a prime larger than table size *)
15: hash_table_from_list 97 [
16: # 20 "./lpsrc/flx_keywords.ipk"
17: "all", (fun s -> ALL s);
18: # 20 "./lpsrc/flx_keywords.ipk"
19: "assert", (fun s -> ASSERT s);
20: # 20 "./lpsrc/flx_keywords.ipk"
21: "axiom", (fun s -> AXIOM s);
22: # 20 "./lpsrc/flx_keywords.ipk"
23: "body", (fun s -> BODY s);
24: # 20 "./lpsrc/flx_keywords.ipk"
25: "call", (fun s -> CALL s);
26: # 20 "./lpsrc/flx_keywords.ipk"
27: "case", (fun s -> CASE s);
28: # 20 "./lpsrc/flx_keywords.ipk"
29: "caseno", (fun s -> CASENO s);
30: # 20 "./lpsrc/flx_keywords.ipk"
31: "cclass", (fun s -> CCLASS s);
32: # 20 "./lpsrc/flx_keywords.ipk"
33: "cfun", (fun s -> CFUNCTION s);
34: # 20 "./lpsrc/flx_keywords.ipk"
35: "class", (fun s -> CLASS s);
36: # 20 "./lpsrc/flx_keywords.ipk"
37: "comment", (fun s -> COMMENT_KEYWORD s);
38: # 20 "./lpsrc/flx_keywords.ipk"
39: "compound", (fun s -> COMPOUND s);
40: # 20 "./lpsrc/flx_keywords.ipk"
41: "const", (fun s -> CONST s);
42: # 20 "./lpsrc/flx_keywords.ipk"
43: "cparse", (fun s -> CPARSE s);
44: # 20 "./lpsrc/flx_keywords.ipk"
45: "cproc", (fun s -> CPROCEDURE s);
46: # 20 "./lpsrc/flx_keywords.ipk"
47: "cstruct", (fun s -> CSTRUCT s);
48: # 20 "./lpsrc/flx_keywords.ipk"
49: "ctor", (fun s -> CTOR s);
50: # 20 "./lpsrc/flx_keywords.ipk"
51: "ctypes", (fun s -> CTYPES s);
52: # 20 "./lpsrc/flx_keywords.ipk"
53: "def", (fun s -> DEF s);
54: # 20 "./lpsrc/flx_keywords.ipk"
55: "do", (fun s -> DO s);
56: # 20 "./lpsrc/flx_keywords.ipk"
57: "done", (fun s -> DONE s);
58: # 20 "./lpsrc/flx_keywords.ipk"
59: "elif", (fun s -> ELIF s);
60: # 20 "./lpsrc/flx_keywords.ipk"
61: "else", (fun s -> ELSE s);
62: # 20 "./lpsrc/flx_keywords.ipk"
63: "endcase", (fun s -> ENDCASE s);
64: # 20 "./lpsrc/flx_keywords.ipk"
65: "endif", (fun s -> ENDIF s);
66: # 20 "./lpsrc/flx_keywords.ipk"
67: "endmatch", (fun s -> ENDMATCH s);
68: # 20 "./lpsrc/flx_keywords.ipk"
69: "enum", (fun s -> ENUM s);
70: # 20 "./lpsrc/flx_keywords.ipk"
71: "expect", (fun s -> EXPECT s);
72: # 20 "./lpsrc/flx_keywords.ipk"
73: "export", (fun s -> EXPORT s);
74: # 20 "./lpsrc/flx_keywords.ipk"
75: "for", (fun s -> FOR s);
76: # 20 "./lpsrc/flx_keywords.ipk"
77: "forget", (fun s -> FORGET s);
78: # 20 "./lpsrc/flx_keywords.ipk"
79: "fork", (fun s -> FORK s);
80: # 20 "./lpsrc/flx_keywords.ipk"
81: "functor", (fun s -> FUNCTOR s);
82: # 20 "./lpsrc/flx_keywords.ipk"
83: "fun", (fun s -> FUNCTION s);
84: # 20 "./lpsrc/flx_keywords.ipk"
85: "gen", (fun s -> GENERATOR s);
86: # 20 "./lpsrc/flx_keywords.ipk"
87: "goto", (fun s -> GOTO s);
88: # 20 "./lpsrc/flx_keywords.ipk"
89: "halt", (fun s -> HALT s);
90: # 20 "./lpsrc/flx_keywords.ipk"
91: "header", (fun s -> HEADER s);
92: # 20 "./lpsrc/flx_keywords.ipk"
93: "ident", (fun s -> IDENT s);
94: # 20 "./lpsrc/flx_keywords.ipk"
95: "include", (fun s -> INCLUDE s);
96: # 20 "./lpsrc/flx_keywords.ipk"
97: "incomplete", (fun s -> INCOMPLETE s);
98: # 20 "./lpsrc/flx_keywords.ipk"
99: "inf", (fun s -> INF s);
100: # 20 "./lpsrc/flx_keywords.ipk"
101: "in", (fun s -> IN s);
102: # 20 "./lpsrc/flx_keywords.ipk"
103: "instance", (fun s -> INSTANCE s);
104: # 20 "./lpsrc/flx_keywords.ipk"
105: "is", (fun s -> IS s);
106: # 20 "./lpsrc/flx_keywords.ipk"
107: "inherit", (fun s -> INHERIT s);
108: # 20 "./lpsrc/flx_keywords.ipk"
109: "inline", (fun s -> INLINE s);
110: # 20 "./lpsrc/flx_keywords.ipk"
111: "jump", (fun s -> JUMP s);
112: # 20 "./lpsrc/flx_keywords.ipk"
113: "lemma", (fun s -> LEMMA s);
114: # 20 "./lpsrc/flx_keywords.ipk"
115: "let", (fun s -> LET s);
116: # 20 "./lpsrc/flx_keywords.ipk"
117: "loop", (fun s -> LOOP s);
118: # 20 "./lpsrc/flx_keywords.ipk"
119: "lval", (fun s -> LVAL s);
120: # 20 "./lpsrc/flx_keywords.ipk"
121: "macro", (fun s -> MACRO s);
122: # 20 "./lpsrc/flx_keywords.ipk"
123: "module", (fun s -> MODULE s);
124: # 20 "./lpsrc/flx_keywords.ipk"
125: "namespace", (fun s -> NAMESPACE s);
126: # 20 "./lpsrc/flx_keywords.ipk"
127: "NaN", (fun s -> NAN s);
128: # 20 "./lpsrc/flx_keywords.ipk"
129: "new", (fun s -> NEW s);
130: # 20 "./lpsrc/flx_keywords.ipk"
131: "noinline", (fun s -> NOINLINE s);
132: # 20 "./lpsrc/flx_keywords.ipk"
133: "nonterm", (fun s -> NONTERM s);
134: # 20 "./lpsrc/flx_keywords.ipk"
135: "noreturn", (fun s -> NORETURN s);
136: # 20 "./lpsrc/flx_keywords.ipk"
137: "not", (fun s -> NOT s);
138: # 20 "./lpsrc/flx_keywords.ipk"
139: "obj", (fun s -> OBJECT s);
140: # 20 "./lpsrc/flx_keywords.ipk"
141: "open", (fun s -> OPEN s);
142: # 20 "./lpsrc/flx_keywords.ipk"
143: "package", (fun s -> PACKAGE s);
144: # 20 "./lpsrc/flx_keywords.ipk"
145: "pod", (fun s -> POD s);
146: # 20 "./lpsrc/flx_keywords.ipk"
147: "private", (fun s -> PRIVATE s);
148: # 20 "./lpsrc/flx_keywords.ipk"
149: "proc", (fun s -> PROCEDURE s);
150: # 20 "./lpsrc/flx_keywords.ipk"
151: "property", (fun s -> PROPERTY s);
152: # 20 "./lpsrc/flx_keywords.ipk"
153: "reduce", (fun s -> REDUCE s);
154: # 20 "./lpsrc/flx_keywords.ipk"
155: "ref", (fun s -> REF s);
156: # 20 "./lpsrc/flx_keywords.ipk"
157: "rename", (fun s -> RENAME s);
158: # 20 "./lpsrc/flx_keywords.ipk"
159: "requires", (fun s -> REQUIRES s);
160: # 20 "./lpsrc/flx_keywords.ipk"
161: "return", (fun s -> RETURN s);
162: # 20 "./lpsrc/flx_keywords.ipk"
163: "struct", (fun s -> STRUCT s);
164: # 20 "./lpsrc/flx_keywords.ipk"
165: "then", (fun s -> THEN s);
166: # 20 "./lpsrc/flx_keywords.ipk"
167: "todo", (fun s -> TODO s);
168: # 20 "./lpsrc/flx_keywords.ipk"
169: "to", (fun s -> TO s);
170: # 20 "./lpsrc/flx_keywords.ipk"
171: "typedef", (fun s -> TYPEDEF s);
172: # 20 "./lpsrc/flx_keywords.ipk"
173: "type", (fun s -> TYPE s);
174: # 20 "./lpsrc/flx_keywords.ipk"
175: "typeclass", (fun s -> TYPECLASS s);
176: # 20 "./lpsrc/flx_keywords.ipk"
177: "union", (fun s -> UNION s);
178: # 20 "./lpsrc/flx_keywords.ipk"
179: "use", (fun s -> USE s);
180: # 20 "./lpsrc/flx_keywords.ipk"
181: "val", (fun s -> VAL s);
182: # 20 "./lpsrc/flx_keywords.ipk"
183: "var", (fun s -> VAR s);
184: # 20 "./lpsrc/flx_keywords.ipk"
185: "virtual", (fun s -> VIRTUAL s);
186: # 20 "./lpsrc/flx_keywords.ipk"
187: "where", (fun s -> WHERE s);
188: # 20 "./lpsrc/flx_keywords.ipk"
189: "when", (fun s -> WHEN s);
190: # 20 "./lpsrc/flx_keywords.ipk"
191: "with", (fun s -> WITH s);
192: # 20 "./lpsrc/flx_keywords.ipk"
193: "yield", (fun s -> YIELD s);
194: # 20 "./lpsrc/flx_keywords.ipk"
195: "_gc_pointer", (fun s -> GC_POINTER s);
196: # 20 "./lpsrc/flx_keywords.ipk"
197: "_gc_type", (fun s -> GC_TYPE s);
198: # 20 "./lpsrc/flx_keywords.ipk"
199: "_svc", (fun s -> SVC s);
200: # 20 "./lpsrc/flx_keywords.ipk"
201: "_deref", (fun s -> DEREF s);
202: # 20 "./lpsrc/flx_keywords.ipk"
203: "and", (fun s -> AND s);
204: # 20 "./lpsrc/flx_keywords.ipk"
205: "as", (fun s -> AS s);
206: # 20 "./lpsrc/flx_keywords.ipk"
207: "callback", (fun s -> CALLBACK s);
208: # 20 "./lpsrc/flx_keywords.ipk"
209: "code", (fun s -> CODE s);
210: # 20 "./lpsrc/flx_keywords.ipk"
211: "if", (fun s -> IF s);
212: # 20 "./lpsrc/flx_keywords.ipk"
213: "isin", (fun s -> ISIN s);
214: # 20 "./lpsrc/flx_keywords.ipk"
215: "match", (fun s -> MATCH s);
216: # 20 "./lpsrc/flx_keywords.ipk"
217: "noexpand", (fun s -> NOEXPAND s);
218: # 20 "./lpsrc/flx_keywords.ipk"
219: "of", (fun s -> OF s);
220: # 20 "./lpsrc/flx_keywords.ipk"
221: "or", (fun s -> OR s);
222: # 20 "./lpsrc/flx_keywords.ipk"
223: "parse", (fun s -> PARSE s);
224: # 20 "./lpsrc/flx_keywords.ipk"
225: "regexp", (fun s -> REGEXP s);
226: # 20 "./lpsrc/flx_keywords.ipk"
227: "reglex", (fun s -> REGLEX s);
228: # 20 "./lpsrc/flx_keywords.ipk"
229: "regmatch", (fun s -> REGMATCH s);
230: # 20 "./lpsrc/flx_keywords.ipk"
231: "the", (fun s -> THE s);
232: # 20 "./lpsrc/flx_keywords.ipk"
233: "typematch", (fun s -> TYPEMATCH s);
234: # 20 "./lpsrc/flx_keywords.ipk"
235: "typecase", (fun s -> TYPECASE s);
236: # 20 "./lpsrc/flx_keywords.ipk"
237: "whence", (fun s -> WHENCE s);
238: # 20 "./lpsrc/flx_keywords.ipk"
239: "unless", (fun s -> UNLESS s);
240: # 20 "./lpsrc/flx_keywords.ipk"
241: "_", (fun s -> UNDERSCORE s);
242: # 20 "./lpsrc/flx_keywords.ipk"
243: ]
244:
245: let map_flx_keywords srcref lex_item =
246: try (Hashtbl.find flx_keyword_table lex_item) srcref
247: with Not_found -> NAME (srcref, lex_item)
248:
249: let flx_parser_keyword_table =
250: hash_table_from_list 97 [
251: # 30 "./lpsrc/flx_keywords.ipk"
252: "expr", (fun s -> EXPRESSION s);
253: # 30 "./lpsrc/flx_keywords.ipk"
254: "float_literal", (fun s -> FLOAT_LITERAL s);
255: # 30 "./lpsrc/flx_keywords.ipk"
256: "integer_literal", (fun s -> INTEGER_LITERAL s);
257: # 30 "./lpsrc/flx_keywords.ipk"
258: "string_literal", (fun s -> STRING_LITERAL s);
259: # 30 "./lpsrc/flx_keywords.ipk"
260: "statement", (fun s -> STATEMENT s);
261: # 30 "./lpsrc/flx_keywords.ipk"
262: "statements", (fun s -> STATEMENTS s);
263: # 30 "./lpsrc/flx_keywords.ipk"
264: ]
265:
266: let retok_parser_tokens toks =
267: rev
268: (rev_map
269: (function
270: | NAME (sr,s) as x ->
271: begin
272: try (Hashtbl.find flx_parser_keyword_table s) sr
273: with Not_found -> x
274: end
275: | x -> x
276: )
277: toks
278: )
279: