Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /branches/lamont/src/compiler/parser/keywords.sml
ViewVC logotype

Annotation of /branches/lamont/src/compiler/parser/keywords.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1116 - (view) (download)
Original Path: trunk/src/compiler/parser/keywords.sml

1 : jhr 26 (* keywords.sml
2 :     *
3 : jhr 435 * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)
4 : jhr 26 * All rights reserved.
5 :     *
6 :     * Diderot keywords.
7 :     *)
8 :    
9 :     structure Keywords : sig
10 :    
11 :     val idToken : string -> DiderotTokens.token
12 :    
13 :     end = struct
14 :    
15 : jhr 33 structure T = DiderotTokens
16 : jhr 26
17 :     val keywords = [
18 :     ("bool", T.KW_bool),
19 : jhr 39 ("D", T.KW_D),
20 : jhr 26 ("die", T.KW_die),
21 :     ("else", T.KW_else),
22 : jhr 1116 ("false", T.KW_false),
23 : jhr 26 ("field", T.KW_field),
24 : jhr 1116 ("identity", T.KW_identity),
25 : jhr 26 ("if", T.KW_if),
26 :     ("image", T.KW_image),
27 : jhr 40 ("in", T.KW_in),
28 : jhr 42 ("inf", T.FLOAT FloatLit.posInf),
29 : jhr 40 ("initially", T.KW_initially),
30 : jhr 26 ("input", T.KW_input),
31 :     ("int", T.KW_int),
32 :     ("kernel", T.KW_kernel),
33 : jhr 42 ("nan", T.FLOAT FloatLit.nan),
34 : jhr 26 ("new", T.KW_new),
35 : jhr 164 ("output", T.KW_output),
36 : jhr 26 ("real", T.KW_real),
37 :     ("stabilize", T.KW_stabilize),
38 : jhr 511 ("strand", T.KW_strand),
39 : jhr 26 ("string", T.KW_string),
40 :     ("tensor", T.KW_tensor),
41 : jhr 1116 ("true", T.KW_true),
42 : jhr 164 ("update", T.KW_update),
43 : jhr 48 ("vec2", T.KW_vec2),
44 :     ("vec3", T.KW_vec3),
45 : jhr 1116 ("vec4", T.KW_vec4),
46 :     ("zeros", T.KW_zeros)
47 : jhr 26 ]
48 :    
49 :     (* create a keyword lookup table *)
50 :     local
51 :     fun mkFind kws = let
52 :     val tbl = AtomTable.mkTable (17, Fail "keywords")
53 :     fun ins (id, tok) = AtomTable.insert tbl (Atom.atom id, tok)
54 :     val find = AtomTable.find tbl
55 :     fun idToken id = let
56 :     val id = Atom.atom id
57 :     in
58 :     case find id
59 :     of NONE => T.ID id
60 :     | SOME kw => kw
61 :     (* end case *)
62 :     end
63 :     in
64 :     List.app ins kws;
65 :     idToken
66 :     end
67 :     in
68 :     (* return either a keyword token or an ID token *)
69 :     val idToken = mkFind keywords
70 :     end
71 :    
72 :     end

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0