1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
|
open Tokens
module T = Qsp_syntax.T
let keyword_table = Hashtbl.create 53
let char_of_uchar : Uchar.t -> char =
fun u -> match Uchar.is_char u with true -> Uchar.to_char u | _ -> '?'
let of_uchars : Uchar.t array -> string =
fun arr -> Array.to_seq arr |> Seq.map char_of_uchar |> String.of_seq
let _ =
List.iter
(fun (kwd, tok) -> Hashtbl.add keyword_table kwd tok)
[
("ACT", ACT);
("ADDLIB", KEYWORD "INCLIB");
("ADDOBJ", KEYWORD "ADDOBJ");
("ADD OBJ", KEYWORD "ADDOBJ");
("ADDQST", KEYWORD "INCLIB");
("AND", AND);
("ARRCOMP", FUNCTION T.Arrcomp);
("ARRPOS", FUNCTION T.Arrpos);
("ARRSIZE", FUNCTION T.Arrsize)
(*
; "BACKIMAGE", KEYWORD "BACKIMAGE"
; "$BACKIMAGE", KEYWORD "BACKIMAGE"
; "BCOLOR", KEYWORD "BCOLOR" *);
("CLA", KEYWORD "CLA");
("CLEAR", KEYWORD "CLEAR");
("*CLEAR", KEYWORD "*CLEAR");
("CLOSE", KEYWORD "CLOSE");
("CLOSE ALL", KEYWORD "CLOSEALL");
("CLR", KEYWORD "CLEAR");
("*CLR", KEYWORD "*CLEAR");
("CLS", KEYWORD "CLS");
("CMDCLEAR", KEYWORD "CMDCLEAR");
("CMDCLR", KEYWORD "CMDCLEAR");
("COPYARR", KEYWORD "COPYARR");
("COUNTOBJ", FUNCTION T.Countobj);
("CURACTS", IDENT "CURACTS");
("$CURACTS", IDENT "$CURACTS");
("CURLOC", IDENT "CURLOC");
("$CURLOC", IDENT "$CURLOC")
(*
; "DEBUG", KEYWORD "DEBUG"
*);
("DELACT", KEYWORD "DELACT");
("DEL ACT", KEYWORD "DELACT");
("DELLIB", KEYWORD "FREELIB");
("DELOBJ", KEYWORD "DELOBJ");
("DEL OBJ", KEYWORD "DELOBJ");
("DESC", FUNCTION T.Desc);
("$DESC", FUNCTION T.Desc')
(*
; "DISABLESCROLL", KEYWORD "DISABLESCROLL"
; "DISABLESUBEX", KEYWORD "DISABLESUBEX"
*);
("DYNAMIC", KEYWORD "DYNAMIC");
("DYNEVAL", FUNCTION T.Dyneval);
("$DYNEVAL", FUNCTION T.Dyneval');
("ELSE", ELSE);
("ELSEIF", ELIF);
("END", END);
("EXEC", KEYWORD "EXEC");
("EXIT", KEYWORD "EXIT")
(*
; "FCOLOR", KEYWORD "FCOLOR"
; "$FNAME", KEYWORD "$FNAME"
*);
("FREELIB", KEYWORD "FREELIB")
(*
; "FSIZE", KEYWORD "FSIZE"
*);
("FUNC", FUNCTION T.Func);
("$FUNC", FUNCTION T.Func');
("GETOBJ", FUNCTION T.Getobj);
("$GETOBJ", FUNCTION T.Getobj');
("GOSUB", KEYWORD "GOSUB");
("GOTO", KEYWORD "GOTO") (*
; "GC", KEYWORD "GC"
*);
("GS", KEYWORD "GOSUB");
("GT", KEYWORD "GOTO");
("IF", IF);
("IIF", FUNCTION T.Iif);
("$IIF", FUNCTION T.Iif');
("INCLIB", KEYWORD "INCLIB");
("INPUT", FUNCTION T.Input);
("$INPUT", FUNCTION T.Input');
("INSTR", FUNCTION T.Instr);
("ISNUM", FUNCTION T.Isnum);
("ISPLAY", FUNCTION T.Isplay);
("JUMP", KEYWORD "JUMP");
("KILLALL", KEYWORD "KILLALL");
("KILLOBJ", KEYWORD "KILLOBJ");
("KILLQST", KEYWORD "FREELIB");
("KILLVAR", KEYWORD "KILLVAR");
("LCASE", FUNCTION T.Lcase);
("$LCASE", FUNCTION T.Lcase')
(*
; "LCOLOR", KEYWORD "LCOLOR"
*);
("LEN", FUNCTION T.Len);
("LET", LET);
("LOC", FUNCTION T.Loc);
("MAINTXT", IDENT "MAINTXT");
("$MAINTXT", IDENT "MAINTXT");
("MAX", FUNCTION T.Max);
("$MAX", FUNCTION T.Max');
("MENU", KEYWORD "MENU");
("MID", FUNCTION T.Mid);
("$MID", FUNCTION T.Mid');
("MIN", FUNCTION T.Min);
("$MIN", FUNCTION T.Min');
("MOD", MOD);
("MSECSCOUNT", FUNCTION T.Msecscount);
("MSG", KEYWORD "MSG");
("NL", KEYWORD "NL");
("*NL", KEYWORD "*NL");
("NO", NO) (*
; "NOSAVE", KEYWORD "NOSAVE"
*);
("OBJ", OBJ);
("$ONACTSEL", IDENT "$ONACTSEL");
("$ONGLOAD", IDENT "$ONGLOAD");
("$ONGSAVE", IDENT "$ONGSAVE");
("$ONNEWLOC", IDENT "$ONNEWLOC");
("$ONOBJADD", IDENT "$ONOBJADD");
("$ONOBJDEL", IDENT "$ONOBJDEL");
("$ONOBJSEL", IDENT "$ONOBJSEL");
("OPENGAME", KEYWORD "OPENGAME");
("OPENQST", KEYWORD "OPENQST");
("OR", OR);
("P", KEYWORD "P");
("*P", KEYWORD "*P");
("PL", KEYWORD "PL");
("*PL", KEYWORD "*PL");
("PLAY", KEYWORD "PLAY");
("QSPVER", FUNCTION T.Qspver);
("$QSPVER", FUNCTION T.Qspver');
("RAND", FUNCTION T.Rand);
("REFINT", KEYWORD "REFINT");
("REPLACE", FUNCTION T.Replace);
("$REPLACE", FUNCTION T.Replace');
("RGB", FUNCTION T.Rgb);
("RND", FUNCTION T.Rnd);
("SAVEGAME", KEYWORD "SAVEGAME");
("SELACT", FUNCTION T.Selact);
("$SELACT", IDENT "$SELACT");
("SELOBJ", IDENT "SELOBJ");
("$SELOBJ", IDENT "$SELOBJ");
("SET", SET);
("SETTIMER", KEYWORD "SETTIMER");
("SHOWACTS", KEYWORD "SHOWACTS");
("SHOWINPUT", KEYWORD "SHOWINPUT");
("SHOWOBJS", KEYWORD "SHOWOBJS");
("SHOWSTAT", KEYWORD "SHOWSTAT");
("STATTXT", FUNCTION T.Stattxt);
("$STATTXT", FUNCTION T.Stattxt');
("STR", FUNCTION T.Str);
("$STR", FUNCTION T.Str');
("STRCOMP", FUNCTION T.Strcomp);
("STRFIND", FUNCTION T.Strfind);
("$STRFIND", FUNCTION T.Strfind');
("STRPOS", FUNCTION T.Strpos);
("TRIM", FUNCTION T.Trim);
("$TRIM", FUNCTION T.Trim');
("UCASE", FUNCTION T.Ucase);
("$UCASE", FUNCTION T.Ucase');
("UNSEL", KEYWORD "UNSELECT");
("UNSELECT", KEYWORD "UNSELECT");
("USEHTML", IDENT "USEHTML");
("USERCOM", IDENT "USERCOM");
("$USERCOM", IDENT "$USERCOM");
("USER_TEXT", IDENT "USER_TEXT");
("$USER_TEXT", IDENT "USER_TEXT");
("USRTXT", IDENT "USER_TEXT");
("$USRTXT", IDENT "USER_TEXT");
("VAL", FUNCTION T.Val);
("VIEW", KEYWORD "VIEW");
("WAIT", KEYWORD "WAIT");
("XGOTO", KEYWORD "XGOTO");
("XGT", KEYWORD "XGOTO");
]
|