5.21. Keywords

Start ocaml section to src/flx_keywords.ml[1 /1 ]
     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: 
End ocaml section to src/flx_keywords.ml[1]
Start ocaml section to src/flx_keywords.mli[1 /1 ]
     1: # 48 "./lpsrc/flx_keywords.ipk"
     2: open Flx_parse
     3: val map_flx_keywords : Flx_ast.srcref -> string -> token
     4: val retok_parser_tokens : token list -> token list
End ocaml section to src/flx_keywords.mli[1]