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: "class", (fun s -> CLASS s);
32: # 20 "./lpsrc/flx_keywords.ipk"
33: "comment", (fun s -> COMMENT_KEYWORD s);
34: # 20 "./lpsrc/flx_keywords.ipk"
35: "compound", (fun s -> COMPOUND s);
36: # 20 "./lpsrc/flx_keywords.ipk"
37: "const", (fun s -> CONST s);
38: # 20 "./lpsrc/flx_keywords.ipk"
39: "cclass", (fun s -> CCLASS s);
40: # 20 "./lpsrc/flx_keywords.ipk"
41: "cstruct", (fun s -> CSTRUCT s);
42: # 20 "./lpsrc/flx_keywords.ipk"
43: "ctor", (fun s -> CTOR s);
44: # 20 "./lpsrc/flx_keywords.ipk"
45: "ctypes", (fun s -> CTYPES s);
46: # 20 "./lpsrc/flx_keywords.ipk"
47: "def", (fun s -> DEF s);
48: # 20 "./lpsrc/flx_keywords.ipk"
49: "do", (fun s -> DO s);
50: # 20 "./lpsrc/flx_keywords.ipk"
51: "done", (fun s -> DONE s);
52: # 20 "./lpsrc/flx_keywords.ipk"
53: "elif", (fun s -> ELIF s);
54: # 20 "./lpsrc/flx_keywords.ipk"
55: "else", (fun s -> ELSE s);
56: # 20 "./lpsrc/flx_keywords.ipk"
57: "endif", (fun s -> ENDIF s);
58: # 20 "./lpsrc/flx_keywords.ipk"
59: "endmatch", (fun s -> ENDMATCH s);
60: # 20 "./lpsrc/flx_keywords.ipk"
61: "enum", (fun s -> ENUM s);
62: # 20 "./lpsrc/flx_keywords.ipk"
63: "expect", (fun s -> EXPECT s);
64: # 20 "./lpsrc/flx_keywords.ipk"
65: "export", (fun s -> EXPORT s);
66: # 20 "./lpsrc/flx_keywords.ipk"
67: "for", (fun s -> FOR s);
68: # 20 "./lpsrc/flx_keywords.ipk"
69: "forget", (fun s -> FORGET s);
70: # 20 "./lpsrc/flx_keywords.ipk"
71: "fork", (fun s -> FORK s);
72: # 20 "./lpsrc/flx_keywords.ipk"
73: "functor", (fun s -> FUNCTOR s);
74: # 20 "./lpsrc/flx_keywords.ipk"
75: "fun", (fun s -> FUNCTION s);
76: # 20 "./lpsrc/flx_keywords.ipk"
77: "goto", (fun s -> GOTO s);
78: # 20 "./lpsrc/flx_keywords.ipk"
79: "header", (fun s -> HEADER s);
80: # 20 "./lpsrc/flx_keywords.ipk"
81: "ident", (fun s -> IDENT s);
82: # 20 "./lpsrc/flx_keywords.ipk"
83: "include", (fun s -> INCLUDE s);
84: # 20 "./lpsrc/flx_keywords.ipk"
85: "incomplete", (fun s -> INCOMPLETE s);
86: # 20 "./lpsrc/flx_keywords.ipk"
87: "inf", (fun s -> INF s);
88: # 20 "./lpsrc/flx_keywords.ipk"
89: "in", (fun s -> IN s);
90: # 20 "./lpsrc/flx_keywords.ipk"
91: "is", (fun s -> IS s);
92: # 20 "./lpsrc/flx_keywords.ipk"
93: "inherit", (fun s -> INHERIT s);
94: # 20 "./lpsrc/flx_keywords.ipk"
95: "inline", (fun s -> INLINE s);
96: # 20 "./lpsrc/flx_keywords.ipk"
97: "jump", (fun s -> JUMP s);
98: # 20 "./lpsrc/flx_keywords.ipk"
99: "let", (fun s -> LET s);
100: # 20 "./lpsrc/flx_keywords.ipk"
101: "loop", (fun s -> LOOP s);
102: # 20 "./lpsrc/flx_keywords.ipk"
103: "lval", (fun s -> LVAL s);
104: # 20 "./lpsrc/flx_keywords.ipk"
105: "macro", (fun s -> MACRO s);
106: # 20 "./lpsrc/flx_keywords.ipk"
107: "module", (fun s -> MODULE s);
108: # 20 "./lpsrc/flx_keywords.ipk"
109: "NaN", (fun s -> NAN s);
110: # 20 "./lpsrc/flx_keywords.ipk"
111: "new", (fun s -> NEW s);
112: # 20 "./lpsrc/flx_keywords.ipk"
113: "noinline", (fun s -> NOINLINE s);
114: # 20 "./lpsrc/flx_keywords.ipk"
115: "nonterm", (fun s -> NONTERM s);
116: # 20 "./lpsrc/flx_keywords.ipk"
117: "noreturn", (fun s -> NORETURN s);
118: # 20 "./lpsrc/flx_keywords.ipk"
119: "not", (fun s -> NOT s);
120: # 20 "./lpsrc/flx_keywords.ipk"
121: "obj", (fun s -> OBJECT s);
122: # 20 "./lpsrc/flx_keywords.ipk"
123: "open", (fun s -> OPEN s);
124: # 20 "./lpsrc/flx_keywords.ipk"
125: "package", (fun s -> PACKAGE s);
126: # 20 "./lpsrc/flx_keywords.ipk"
127: "pod", (fun s -> POD s);
128: # 20 "./lpsrc/flx_keywords.ipk"
129: "private", (fun s -> PRIVATE s);
130: # 20 "./lpsrc/flx_keywords.ipk"
131: "proc", (fun s -> PROCEDURE s);
132: # 20 "./lpsrc/flx_keywords.ipk"
133: "property", (fun s -> PROPERTY s);
134: # 20 "./lpsrc/flx_keywords.ipk"
135: "reduce", (fun s -> REDUCE s);
136: # 20 "./lpsrc/flx_keywords.ipk"
137: "rename", (fun s -> RENAME s);
138: # 20 "./lpsrc/flx_keywords.ipk"
139: "requires", (fun s -> REQUIRES s);
140: # 20 "./lpsrc/flx_keywords.ipk"
141: "return", (fun s -> RETURN s);
142: # 20 "./lpsrc/flx_keywords.ipk"
143: "struct", (fun s -> STRUCT s);
144: # 20 "./lpsrc/flx_keywords.ipk"
145: "then", (fun s -> THEN s);
146: # 20 "./lpsrc/flx_keywords.ipk"
147: "todo", (fun s -> TODO s);
148: # 20 "./lpsrc/flx_keywords.ipk"
149: "to", (fun s -> TO s);
150: # 20 "./lpsrc/flx_keywords.ipk"
151: "typedef", (fun s -> TYPEDEF s);
152: # 20 "./lpsrc/flx_keywords.ipk"
153: "type", (fun s -> TYPE s);
154: # 20 "./lpsrc/flx_keywords.ipk"
155: "union", (fun s -> UNION s);
156: # 20 "./lpsrc/flx_keywords.ipk"
157: "use", (fun s -> USE s);
158: # 20 "./lpsrc/flx_keywords.ipk"
159: "val", (fun s -> VAL s);
160: # 20 "./lpsrc/flx_keywords.ipk"
161: "var", (fun s -> VAR s);
162: # 20 "./lpsrc/flx_keywords.ipk"
163: "when", (fun s -> WHEN s);
164: # 20 "./lpsrc/flx_keywords.ipk"
165: "with", (fun s -> WITH s);
166: # 20 "./lpsrc/flx_keywords.ipk"
167: "_", (fun s -> UNDERSCORE s);
168: # 20 "./lpsrc/flx_keywords.ipk"
169: "_gc_pointer", (fun s -> GC_POINTER s);
170: # 20 "./lpsrc/flx_keywords.ipk"
171: "_gc_type", (fun s -> GC_TYPE s);
172: # 20 "./lpsrc/flx_keywords.ipk"
173: "_svc", (fun s -> SVC s);
174: # 20 "./lpsrc/flx_keywords.ipk"
175: "_deref", (fun s -> DEREF s);
176: # 20 "./lpsrc/flx_keywords.ipk"
177: "and", (fun s -> AND s);
178: # 20 "./lpsrc/flx_keywords.ipk"
179: "as", (fun s -> AS s);
180: # 20 "./lpsrc/flx_keywords.ipk"
181: "callback", (fun s -> CALLBACK s);
182: # 20 "./lpsrc/flx_keywords.ipk"
183: "code", (fun s -> CODE s);
184: # 20 "./lpsrc/flx_keywords.ipk"
185: "if", (fun s -> IF s);
186: # 20 "./lpsrc/flx_keywords.ipk"
187: "isin", (fun s -> ISIN s);
188: # 20 "./lpsrc/flx_keywords.ipk"
189: "match", (fun s -> MATCH s);
190: # 20 "./lpsrc/flx_keywords.ipk"
191: "noexpand", (fun s -> NOEXPAND s);
192: # 20 "./lpsrc/flx_keywords.ipk"
193: "of", (fun s -> OF s);
194: # 20 "./lpsrc/flx_keywords.ipk"
195: "or", (fun s -> OR s);
196: # 20 "./lpsrc/flx_keywords.ipk"
197: "parse", (fun s -> PARSE s);
198: # 20 "./lpsrc/flx_keywords.ipk"
199: "regexp", (fun s -> REGEXP s);
200: # 20 "./lpsrc/flx_keywords.ipk"
201: "reglex", (fun s -> REGLEX s);
202: # 20 "./lpsrc/flx_keywords.ipk"
203: "regmatch", (fun s -> REGMATCH s);
204: # 20 "./lpsrc/flx_keywords.ipk"
205: "the", (fun s -> THE s);
206: # 20 "./lpsrc/flx_keywords.ipk"
207: "typematch", (fun s -> TYPEMATCH s);
208: # 20 "./lpsrc/flx_keywords.ipk"
209: ]
210:
211: let map_flx_keywords srcref lex_item =
212: try (Hashtbl.find flx_keyword_table lex_item) srcref
213: with Not_found -> NAME (srcref, lex_item)
214:
215: let flx_parser_keyword_table =
216: hash_table_from_list 97 [
217: # 30 "./lpsrc/flx_keywords.ipk"
218: "expr", (fun s -> EXPRESSION s);
219: # 30 "./lpsrc/flx_keywords.ipk"
220: "float_literal", (fun s -> FLOAT_LITERAL s);
221: # 30 "./lpsrc/flx_keywords.ipk"
222: "integer_literal", (fun s -> INTEGER_LITERAL s);
223: # 30 "./lpsrc/flx_keywords.ipk"
224: "string_literal", (fun s -> STRING_LITERAL s);
225: # 30 "./lpsrc/flx_keywords.ipk"
226: "statement", (fun s -> STATEMENT s);
227: # 30 "./lpsrc/flx_keywords.ipk"
228: "statements", (fun s -> STATEMENTS s);
229: # 30 "./lpsrc/flx_keywords.ipk"
230: ]
231:
232: let retok_parser_tokens toks =
233: rev
234: (rev_map
235: (function
236: | NAME (sr,s) as x ->
237: begin
238: try (Hashtbl.find flx_parser_keyword_table s) sr
239: with Not_found -> x
240: end
241: | x -> x
242: )
243: toks
244: )
245: