001import java.util.ArrayList;
002import java.util.Arrays;
003import java.util.List;
004
005class keywordRec {
006    public String keyword;
007    public String type;
008    boolean fromLexer = true;
009    public keywordRec(String pKeyword, String pType, boolean pfromLexer){
010        this.keyword = pKeyword;
011        this.type = pType;
012        fromLexer = pfromLexer;
013    }
014
015    public keywordRec(String pKeyword, String pType){
016        this.keyword = pKeyword;
017        this.type = pType;
018        fromLexer = true;
019    }
020
021    public String toString(){
022        return "addkeyword('"+keyword+"',RW_"+keyword+","+type+");";
023        //newList.add("addkeyword('"+kw+"',RW_"+kw+",ttreserved);");
024    }
025}
026
027
028/**
029 * 收到新关键字列表后的处理流程,关键字分为 reserved words 和 non-reserved keywords 两种
030 *
031 * 这两类都是用逗号隔开的字符串表示,如果收到的是 同时包含 reserved words 和 non-reserved keywords 的列表,
032 * 需要先分成这两类独立的列表。 可以调用 extractNonReservedKeywords() 把 non-reserved keywords 从 full list 中分类出来。
033 *
034 * 1. 处理 reserved words
035 * 1.1 根据提供的 keyword list 列表, 确保当前 lexer 中已有的对应keyword 类型一致。调用 adjustKeywords() 实现
036 * 1.2 根据提供的 keyword list 列表, 把不在当前 lexer 中的 keyword 加入到 lexer keyword 列表中。调用 addNewKeywords() 实现
037 *     新增的 keyword 需要在 .y 文件中也加一下。
038 * 1.3 移除在 lexer 中的 keyword,但不在提供的 keyword list 列表中的 keyword, 考虑到这些 keyword 可能在 y 文件中使用,
039 *     不进行实际的移除,只是把类型从 ttreserved 改为 ttidentifier
040 *     通过调用 checkFalseKeywords() 实现
041 *
042 *
043 * 2. 处理 non-reserved keywords
044 * 2.1 根据提供的 non-keyword list 列表, 确保当前 lexer 中已有的对应 keyword 类型一致。调用 adjustKeywords() 实现
045 * 2.2 根据提供的 non-keyword list 列表, 把不在当前 lexer 中的 keyword 加入到 lexer keyword 列表中。调用 addNewKeywords() 实现
046 *     新增的 keyword 需要在 .y 文件中也加一下,并且在 rule 中要加入成为 ident。
047 * 2.3 移除在 lexer 中的 keyword,但不在提供的 non-keyword list 列表中的 keyword, 考虑到这些 keyword 可能在 y 文件中使用,
048 *     不进行实际的移除,只是把类型从 ttkeyword 改为 ttidentifier
049 *     通过调用 checkFalseKeywords() 实现
050 *
051 *
052 * 3. 检查处理结果
053 * 3.1 调用 adjustKeywords(), keywords num with different type 应该为零。
054 * 3.2 调用 addNewKeywords(), 新增的 keyword num 应该为零。
055 * 3.3 调用 checkFalseKeywords(), 发现的 false keyword 应该为零。
056 *
057 *
058 *
059 */
060
061public class keywordsPrepare {
062
063    public static String TTRESERVED = "ttreserved";
064    public static String TTKEYWORD = "ttkeyword";
065    public static String TTCOLUMN = "ttcolumn";
066    public static String TTIDENTIFIER = "ttidentifier";
067
068    public static void main(String args[])  throws Exception{
069
070        //  adjustKeywords (reservedWords,keywordsInLexer,TTRESERVED);
071        // addNewKeywords (reservedWords,keywordsInLexer,TTRESERVED);
072         checkFalseKeywords(reservedWords,keywordsInLexer,TTRESERVED);
073
074        //addReservedWords(reservedWords,keywordsInLexer);
075       // compareKeywordsWithLexerKeywords(reservedWords,keywordsInLexer);
076       // System.out.println(extractNonReservedKeywords(allKeywordList,reservedWords));
077
078    }
079
080    public static String outNewAddReservedWords(ArrayList<keywordRec> targetList){
081        String ret = "";
082        int count = 0;
083        for(keywordRec k:targetList){
084            if (k.fromLexer) continue;
085            ret = ret+"RW_"+k.keyword+"\t";
086            count++;
087            if (count % 10 == 0){
088                ret = ret +"\n\r";
089            }
090        }
091
092        System.out.println("Total new added reserved words: "+count);
093
094        return ret;
095    }
096    public static int searchKwInList(String kw, ArrayList<keywordRec> targetList){
097        if (targetList.size() == 0) return -1;
098        int i = 0,pos = -1;
099        for(keywordRec k:targetList){
100            if (k.keyword.equalsIgnoreCase(kw)) {
101                pos = i;
102                break;
103            }
104            i++;
105        }
106        return pos;
107    }
108    public static int insertReservedWord(String kw, ArrayList<keywordRec> targetList, int startFrom){
109
110        boolean isAdded = false;
111        for(int i=startFrom;i<targetList.size();i++){
112            if (targetList.get(i).keyword.compareToIgnoreCase(kw)>0){
113                targetList.add(i, new keywordRec(kw,TTRESERVED,false));
114                startFrom = i+1;
115                isAdded = true;
116                break;
117            }
118        }
119        if (!isAdded){
120            targetList.add(targetList.size(),new keywordRec(kw,TTRESERVED,false));
121            startFrom = targetList.size();
122        }
123        return startFrom;
124    }
125
126
127    public static ArrayList<String> keywordsStringToArrayList( String pReservedWords){
128        String[] keywords = pReservedWords.split(",");
129        List<String> kwFixedLenghtList = Arrays.asList(keywords);
130        ArrayList<String> kwListOfString = new ArrayList<String>(kwFixedLenghtList);
131        return kwListOfString;
132    }
133
134    public static ArrayList<keywordRec> keywordsInLexerToArrayList( String pKeywordsInLexer){
135        String[] lexerKeywords = pKeywordsInLexer.split("\n");
136        List<String> lexerKwFixedLenghtList = Arrays.asList(lexerKeywords);
137        ArrayList<String> lexerKwListOfString = new ArrayList<String>(lexerKwFixedLenghtList);
138
139        ArrayList<keywordRec> newList = new ArrayList<>();
140        for(String s:lexerKwListOfString){
141            String s1 = s.replace("addkeyword(","").replace(");","").replace("'","");
142            String[] e2 = s1.split(",");
143            String kw = e2[0], kwMark = e2[2].trim();
144            newList.add( new keywordRec(kw,kwMark));
145        }
146        return newList;
147    }
148
149    public static void compareKeywordsWithLexerKeywords(String pReservedWords,String pKeywordsInLexer){
150        ArrayList<String> keywordList = keywordsStringToArrayList(pReservedWords);
151        ArrayList<keywordRec> keywordListInLexer = keywordsInLexerToArrayList(pKeywordsInLexer);
152
153        // 先统计lexer 缺少的 reserved words
154        int count = 0, typeNotMatched = 0;
155        for(String kw:keywordList){
156            int pos = searchKwInList(kw,keywordListInLexer);
157            if ( pos == -1){
158                count++;
159            }else{
160                if (!keywordListInLexer.get(pos).type.equalsIgnoreCase(TTRESERVED)){
161                    typeNotMatched++;
162                }
163            }
164        }
165        System.out.println(String.format("Provided list -> Lexer list, Missing: %d, Type not matched: %d, total miss: %d",count,typeNotMatched,count+typeNotMatched));
166
167        // 统计  lexer 中目前标记为 ttreserved, 但不在 新提供的 reserved word list 中
168        count = 0;
169        for(keywordRec kr: keywordListInLexer){
170            if ((!keywordList.contains(kr.keyword)) && (kr.type.equalsIgnoreCase(TTRESERVED))) {
171                count++;
172                System.out.println(kr.toString());
173            }
174        }
175
176        System.out.println(String.format("Lexer list: %d -> Provided list: %d, Extra keywords: %d",keywordListInLexer.size(),keywordList.size() ,count));
177
178    }
179    public static void addNewKeywords(String pKeywords, String pKeywordsInLexer, String kwType) {
180        // 把 lexer.cod 文档中现有的 keyword list 按照 reservedWords 中指定的keyword,把对应的属性设为 ttreserved
181        // 把这些重新整理的 keyword list 复制回 lexer.cod 文件中。
182        // 这轮整理不改变原来 keyword list 的数量,无需往 .y 文件中增加新 keyword
183
184//        String[] keywords = pKeywords.split(",");
185//        List<String> kwFixedLenghtList = Arrays.asList(keywords);
186//        ArrayList<String> kwList = new ArrayList<String>(kwFixedLenghtList);
187//
188//
189//        String[] lexerKeywords = pKeywordsInLexer.split("\n");
190//        List<String> lexerKwFixedLenghtList = Arrays.asList(lexerKeywords);
191//        ArrayList<String> lexerKwList = new ArrayList<String>(lexerKwFixedLenghtList);
192
193        ArrayList<String> kwList = keywordsStringToArrayList(pKeywords);
194        ArrayList<keywordRec> lexerKwList = keywordsInLexerToArrayList(pKeywordsInLexer);
195
196        int newReserveKeywords = 0;
197
198        ArrayList<keywordRec> newList = new ArrayList<>();
199        for(keywordRec s:lexerKwList){
200//            String s1 = s.replace("addkeyword(","").replace(");","").replace("'","");
201//            String[] e2 = s1.split(",");
202//            String kw = e2[0], kwMark = e2[2].trim();
203            newList.add( new keywordRec(s.keyword,s.type));
204        }
205
206        //newList.add();
207        int insertFrom = 0;
208
209        for(String s:kwList){
210            if ( searchKwInList(s,newList) != -1){
211
212            }else{
213               // System.out.println("Reserved word not in lexer list: "+s);
214
215                insertFrom = insertReservedWord(s,newList,insertFrom);
216                newReserveKeywords++;
217            }
218        }
219
220        for(keywordRec k:newList){
221            System.out.println(k.toString());
222        }
223
224        System.out.println("\n以上为原来 lexer 中 reserved words 和 新提供的 reserved words list 合并后新的 reserved words list, 请复制到 l.cod 文件中\n");
225
226        System.out.println(outNewAddReservedWords(newList));
227
228        System.out.println("\n以上为从新提供 reserved words list 中发现的,并没有出现在原来 lexer 中 reserved words 中的 reserved words list, 请复制到 .y 文件中\n");
229
230        System.out.println(String.format("keywords in lexer list %d, in suggested list %d, new found keyword: %d, new list size after insert: %d "
231                ,lexerKwList.size(), kwList.size(),newReserveKeywords,newList.size() ));
232
233    }
234
235    /**
236     * 核对 lexer keyword 列表中的 keyword,如果这些 keyword 在 规定 keyword 列表中出现,必须保证类型的也相同,
237     * 如果不同,把 lexer keyword 列表中keyword的类型调整为指定的类型。
238     *
239     * 这个操作不改变 lexer keyword 列表中 keyword 的个数
240     *
241     * @param pKeywords
242     * @param pKeywordsInLexer
243     * @param pKwMark
244     */
245    public static void adjustKeywords(String pKeywords, String pKeywordsInLexer, String pKwMark){
246        // 把 lexer.cod 文档中现有的 keyword list 按照 reservedWords 中指定的keyword,把对应的属性设为 ttreserved
247        // 把这些重新整理的 keyword list 复制回 lexer.cod 文件中。
248        // 这轮整理不改变原来 keyword list 的数量,无需往 .y 文件中增加新 keyword
249
250        ArrayList<String> kwList =  keywordsStringToArrayList(pKeywords) ;// new ArrayList<String>(kwFixedLenghtList);
251        ArrayList<keywordRec> lexerKwList = keywordsInLexerToArrayList(pKeywordsInLexer) ;//new ArrayList<String>(lexerKwFixedLenghtList);
252
253        int keywordWithDifferentType = 0;
254        int keywordNumInLexer = lexerKwList.size();
255
256        ArrayList<String> newList = new ArrayList<>();
257
258        // 第一轮: 把现有 lexer 中 keyword list 的 ttreserved 按照 reservedWords 列表的内容标记准确
259        System.out.println(keywordNumInLexer);
260        for(keywordRec s:lexerKwList){
261            String kw = s.keyword, kwMark = s.type;
262
263            if (kwList.contains (kw))
264            {
265                newList.add("addkeyword('"+kw+"',RW_"+kw+","+pKwMark+");");
266
267                if (kwMark.equalsIgnoreCase(pKwMark)){
268                }else {
269                    keywordWithDifferentType++;
270                   // System.out.println(String.format("Lexer keyword: %s with type: %s, changed to new type: %s",kw,kwMark,pKwMark));
271                }
272            }else {
273                newList.add("addkeyword('"+kw+"',RW_"+kw+","+kwMark+");");
274            }
275        }
276
277        // 整理后 ttreserved 标记准确的 list 包含的 keyword 数量应该和原来相同
278
279        for(String s:newList){
280            System.out.println(s);
281        }
282
283        System.out.println(String.format("keywords in lexer list %d should equal to keyword in new list %d, %d keywords changed to %s "
284                ,lexerKwList.size(), newList.size(),keywordWithDifferentType,pKwMark ));
285
286
287        // end of 第一轮, 这时原来列表的 keyword 数量应该没有发生变化,只是把需要标记为  ttreserved 的 keyword 按照 reservedWords 列表重新标记了一遍
288        // 把这些重新整理的 keyword list 复制回 lexer.cod 文件中。
289        // 用新的 lexer list 再跑一边的话,发现新 ttreserved 数量应该为零。
290    }
291
292    /**
293     * 检查 lexer keywords 列表中的指定类型的 keyword 是否在 规定的 keyword 列表中出现。
294     *  理想的结果是没有发现 false keyword
295     *
296     * @param pKeywords  规定的 keyword 列表
297     * @param pKeywordsInLexer lexer keywords 列表
298     * @param pKwMark 需要检查的 keyword 类型, 有 TTRESERVED 和 TTKEYWORD
299     */
300    public static void checkFalseKeywords( String pKeywords,String pKeywordsInLexer, String pKwMark){
301
302        ArrayList<String> kwListOfKeyword =  keywordsStringToArrayList(pKeywords) ;
303        ArrayList<keywordRec> kwListInLexer = keywordsInLexerToArrayList(pKeywordsInLexer) ;
304
305        int falseKeywordFound = 0;
306        int keywordInLexer = kwListInLexer.size();
307
308
309        ArrayList<String> newList = new ArrayList<>();
310
311        // 第一轮: 把现有 lexer 中 keyword list 的 ttreserved 按照 reservedWords 列表的内容标记准确
312        System.out.println(keywordInLexer);
313        for(keywordRec s:kwListInLexer){
314            String kw = s.keyword, kwMark = s.type;
315            if (kwMark.equalsIgnoreCase(pKwMark)){
316                if (!kwListOfKeyword.contains (kw))
317                {
318                    System.out.println(String.format("False keyword %s in lexer with type: %s, but it is not in the real keyword list",kw,kwMark));
319                    falseKeywordFound++;
320                }
321
322            }
323        }
324
325        System.out.println(String.format("keywords in lexer list %d, in required keyword list %d, false keyword found: %d "
326                ,kwListInLexer.size(), kwListOfKeyword.size(),falseKeywordFound ));
327
328    }
329
330
331    /**
332     * 输入完整的 keyword 列表 和 reserved words 列表, 输出 non-reserved keywords 列表
333     *
334     * @param allKeywords
335     * @param reservedWords
336     * @return
337     */
338    public static String extractNonReservedKeywords(String allKeywords, String reservedWords){
339        String nonReservedKeywords="";
340        ArrayList<String> allKeywordList = keywordsStringToArrayList(allKeywords);
341        ArrayList<String> reservedWordList = keywordsStringToArrayList(reservedWords);
342        int count = 0;
343        for(String s: allKeywordList){
344            if (!reservedWordList.contains(s)){
345                nonReservedKeywords = nonReservedKeywords+s+",";
346                count++;
347            }
348        }
349
350        System.out.println(String.format("All keywords: %d, reserved words: %d, non-reserved keywords found: %d, gap should be 0 = %d"
351                ,allKeywordList.size(),reservedWordList.size(),count,allKeywordList.size()-reservedWordList.size()-count ));
352
353        return nonReservedKeywords;
354    }
355
356    static String nonReservedKeywords = "ABSENT,ABSOLUTE,ACCORDING,ACTION,ADA,ADD,ADMIN,AFTER,ALWAYS,ASC,ASSERTION,ASSIGNMENT,ATTRIBUTE,ATTRIBUTES,BASE64,BEFORE,BERNOULLI,BLOCKED,BOM,BREADTH,C,CASCADE,CATALOG,CATALOG_NAME,CHAIN,CHARACTERISTICS,CHARACTERS,CHARACTER_SET_CATALOG,CHARACTER_SET_NAME,CHARACTER_SET_SCHEMA,CLASS_ORIGIN,COBOL,COLLATION,COLLATION_CATALOG,COLLATION_NAME,COLLATION_SCHEMA,COLUMNS,COLUMN_NAME,COMMAND_FUNCTION,COMMAND_FUNCTION_CODE,COMMITTED,CONDITION_NUMBER,CONNECTION,CONNECTION_NAME,CONSTRAINTS,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONSTRUCTOR,CONTAINS,CONTENT,CONTINUE,CONTROL,CURSOR_NAME,DATA,DATETIME_INTERVAL_CODE,DATETIME_INTERVAL_PRECISION,DB,DEFAULTS,DEFERRABLE,DEFERRED,DEFINED,DEFINER,DEGREE,DEPTH,DERIVED,DESC,DESCRIPTOR,DIAGNOSTICS,DISPATCH,DOCUMENT,DOMAIN,DYNAMIC_FUNCTION,DYNAMIC_FUNCTION_CODE,EMPTY,ENCODING,EQUALS,EXCLUDE,EXCLUDING,FILE,FINAL,FIRST,FLAG,FOLLOWING,FORTRAN,FOUND,FS,G,GENERAL,GENERATED,GO,GOTO,GRANTED,HEX,HIERARCHY,ID,IGNORE,IMMEDIATE,IMPLEMENTATION,INCLUDING,INCREMENT,INDENT,INITIALLY,INPUT,INSTANCE,INSTANTIABLE,INSTEAD,INTEGRITY,INVOKER,ISOLATION,K,KEY,KEY_MEMBER,KEY_TYPE,LAST,LENGTH,LEVEL,LIBRARY,LIMIT,LINK,LOCATION,LOCATOR,M,MAP,MAPPING,MATCHED,MAXVALUE,MESSAGE_LENGTH,MESSAGE_OCTET_LENGTH,MESSAGE_TEXT,MINVALUE,MORE,MUMPS,NAME,NAMES,NAMESPACE,NESTING,NEXT,NFC,NFD,NFKC,NFKD,NIL,NORMALIZED,NULLABLE,NULLS,NUMBER,OBJECT,OCTETS,OFF,OPTION,OPTIONS,ORDERING,ORDINALITY,OTHERS,OUTPUT,OVERRIDING,P,PAD,PARAMETER_MODE,PARAMETER_NAME,PARAMETER_ORDINAL_POSITION,PARAMETER_SPECIFIC_CATALOG,PARAMETER_SPECIFIC_NAME,PARAMETER_SPECIFIC_SCHEMA,PARTIAL,PASCAL,PASSING,PASSTHROUGH,PATH,PERMISSION,PLACING,PLI,PRECEDING,PRESERVE,PRIOR,PRIVILEGES,PUBLIC,READ,RECOVERY,RELATIVE,REPEATABLE,REQUIRING,RESPECT,RESTART,RESTORE,RESTRICT,RETURNED_CARDINALITY,RETURNED_LENGTH,RETURNED_OCTET_LENGTH,RETURNED_SQLSTATE,RETURNING,ROLE,ROUTINE,ROUTINE_CATALOG,ROUTINE_NAME,ROUTINE_SCHEMA,ROW_COUNT,SCALE,SCHEMA,SCHEMA_NAME,SCOPE_CATALOG,SCOPE_NAME,SCOPE_SCHEMA,SECTION,SECURITY,SELECTIVE,SELF,SEQUENCE,SERIALIZABLE,SERVER,SERVER_NAME,SESSION,SETS,SIMPLE,SIZE,SOURCE,SPACE,SPECIFIC_NAME,STANDALONE,STATE,STATEMENT,STRIP,STRUCTURE,STYLE,SUBCLASS_ORIGIN,T,TABLE_NAME,TEMPORARY,TIES,TOKEN,TOP_LEVEL_COUNT,TRANSACTION,TRANSACTIONS_COMMITTED,TRANSACTIONS_ROLLED_BACK,TRANSACTION_ACTIVE,TRANSFORM,TRANSFORMS,TRIGGER_CATALOG,TRIGGER_NAME,TRIGGER_SCHEMA,TYPE,UNBOUNDED,UNCOMMITTED,UNDER,UNLINK,UNNAMED,UNTYPED,URI,USAGE,USER_DEFINED_TYPE_CATALOG,USER_DEFINED_TYPE_CODE,USER_DEFINED_TYPE_NAME,USER_DEFINED_TYPE_SCHEMA,VALID,VERSION,VIEW,WHITESPACE,WORK,WRAPPER,WRITE,XMLDECLARATION,XMLSCHEMA,YES,ZONE";
357    static String reservedWords = "ADD,AFTER,ALL,ALLOCATE,ALLOW,ALTER,AND,ANY,AS,ASENSITIVE,ASSOCIATE,ASUTIME,AT,AUDIT,AUX,AUXILIARY,BEFORE,BEGIN,BETWEEN,BUFFERPOOL,BY,CALL,CAPTURE,CASCADED,CASE,CAST,CCSID,CHAR,CHARACTER,CHECK,CLONE,CLOSE,CLUSTER,COLLECTION,COLLID,COLUMN,COMMENT,COMMIT,CONCAT,CONDITION,CONNECT,CONNECTION,CONSTRAINT,CONTAINS,CONTENT,CONTINUE,CREATE,CURRENT,CURRENT_DATE,CURRENT_LC_CTYPE,CURRENT_PATH,CURRENT_SCHEMA,CURRENT_TIME,CURRENT_TIMESTAMP,CURSOR,DATA,DATABASE,DAY,DAYS,DBINFO,DECLARE,DEFAULT,DELETE,DESCRIPTOR,DETERMINISTIC,DISABLE,DISALLOW,DISTINCT,DO,DOCUMENT,DOUBLE,DROP,DSSIZE,DYNAMIC,EDITPROC,ELSE,ELSEIF,ENCODING,ENCRYPTION,END,ENDING,END-EXEC,ERASE,ESCAPE,EXCEPT,EXCEPTION,EXECUTE,EXISTS,EXIT,EXPLAIN,EXTERNAL,FENCED,FETCH,FIELDPROC,FINAL,FIRST,FOR,FREE,FROM,FULL,FUNCTION,GENERATED,GET,GLOBAL,GO,GOTO,GRANT,GROUP,HANDLER,HAVING,HOLD,HOUR,HOURS,IF,IMMEDIATE,IN,INCLUSIVE,INDEX,INHERIT,INNER,INOUT,INSENSITIVE,INSERT,INTERSECT,INTO,IS,ISOBID,ITERATE,JAR,JOIN,KEEP,KEY,LABEL,LANGUAGE,LAST,LC_CTYPE,LEAVE,LEFT,LIKE,LOCAL,LOCALE,LOCATOR,LOCATORS,LOCK,LOCKMAX,LOCKSIZE,LONG,LOOP,MAINTAINED,MATERIALIZED,MICROSECOND,MICROSECONDS,MINUTE,MINUTES,MODIFIES,MONTH,MONTHS,NEXT,NEXTVAL,NO,NONE,NOT,NULL,NULLS,NUMPARTS,OBID,OF,OLD,ON,OPEN,OPTIMIZATION,OPTIMIZE,OR,ORDER,ORGANIZATION,OUT,OUTER,PACKAGE,PARAMETER,PART,PADDED,PARTITION,PARTITIONED,PARTITIONING,PATH,PIECESIZE,PERIOD,PLAN,PRECISION,PREPARE,PREVVAL,PRIOR,PRIQTY,PRIVILEGES,PROCEDURE,PROGRAM,PSID,PUBLIC,QUERY,QUERYNO,READS,REFERENCES,REFRESH,RESIGNAL,RELEASE,RENAME,REPEAT,RESTRICT,RESULT,RESULT_SET_LOCATOR,RETURN,RETURNS,REVOKE,RIGHT,ROLE,ROLLBACK,ROUND_CEILING,ROUND_DOWN,ROUND_FLOOR,ROUND_HALF_DOWN,ROUND_HALF_EVEN,ROUND_HALF_UP,ROUND_UP,ROW,ROWSET,RUN,SAVEPOINT,SCHEMA,SCRATCHPAD,SECOND,SECONDS,SECQTY,SECURITY,SEQUENCE,SELECT,SENSITIVE,SESSION_USER,SET,SIGNAL,SIMPLE,SOME,SOURCE,SPECIFIC,STANDARD,STATIC,STATEMENT,STAY,STOGROUP,STORES,STYLE,SUMMARY,SYNONYM,SYSFUN,SYSIBM,SYSPROC,SYSTEM,TABLE,TABLESPACE,THEN,TO,TRIGGER,TRUNCATE,TYPE,UNDO,UNION,UNIQUE,UNTIL,UPDATE,USER,USING,VALIDPROC,VALUE,VALUES,VARIABLE,VARIANT,VCAT,VIEW,VOLATILE,VOLUMES,WHEN,WHENEVER,WHERE,WHILE,WITH,WLM,XMLEXISTS,XMLNAMESPACES,XMLCAST,YEAR,YEARS,ZONE";
358    static String allKeywordList = "A,ABS,ABSENT,ABSOLUTE,ACCORDING,ACTION,ADA,ADD,ADMIN,AFTER,ALL,ALLOCATE,ALTER,ALWAYS,AND,ANY,ARE,ARRAY,ARRAY_AGG,AS,ASC,ASENSITIVE,ASSERTION,ASSIGNMENT,ASYMMETRIC,AT,ATOMIC,ATTRIBUTE,ATTRIBUTES,AUTHORIZATION,AVG,BASE64,BEFORE,BEGIN,BERNOULLI,BETWEEN,BIGINT,BINARY,BLOB,BLOCKED,BOM,BOOLEAN,BOTH,BREADTH,BY,C,CALL,CALLED,CARDINALITY,CASCADE,CASCADED,CASE,CAST,CATALOG,CATALOG_NAME,CEIL,CEILING,CHAIN,CHAR,CHARACTER,CHARACTERISTICS,CHARACTERS,CHARACTER_LENGTH,CHARACTER_SET_CATALOG,CHARACTER_SET_NAME,CHARACTER_SET_SCHEMA,CHAR_LENGTH,CHECK,CLASS_ORIGIN,CLOB,CLOSE,COALESCE,COBOL,COLLATE,COLLATION,COLLATION_CATALOG,COLLATION_NAME,COLLATION_SCHEMA,COLLECT,COLUMN,COLUMNS,COLUMN_NAME,COMMAND_FUNCTION,COMMAND_FUNCTION_CODE,COMMIT,COMMITTED,CONDITION,CONDITION_NUMBER,CONNECT,CONNECTION,CONNECTION_NAME,CONSTRAINT,CONSTRAINTS,CONSTRAINT_CATALOG,CONSTRAINT_NAME,CONSTRAINT_SCHEMA,CONSTRUCTOR,CONTAINS,CONTENT,CONTINUE,CONTROL,CONVERT,CORR,CORRESPONDING,COUNT,COVAR_POP,COVAR_SAMP,CREATE,CROSS,CUBE,CUME_DIST,CURRENT,CURRENT_CATALOG,CURRENT_DATE,CURRENT_DEFAULT_TRANSFORM_GROUP,CURRENT_PATH,CURRENT_ROLE,CURRENT_SCHEMA,CURRENT_TIME,CURRENT_TIMESTAMP,CURRENT_TRANSFORM_GROUP_FOR_TYPE,CURRENT_USER,CURSOR,CURSOR_NAME,CYCLE,DATA,DATALINK,DATE,DATETIME_INTERVAL_CODE,DATETIME_INTERVAL_PRECISION,DAY,DB,DEALLOCATE,DEC,DECIMAL,DECLARE,DEFAULT,DEFAULTS,DEFERRABLE,DEFERRED,DEFINED,DEFINER,DEGREE,DELETE,DENSE_RANK,DEPTH,DEREF,DERIVED,DESC,DESCRIBE,DESCRIPTOR,DETERMINISTIC,DIAGNOSTICS,DISCONNECT,DISPATCH,DISTINCT,DLNEWCOPY,DLPREVIOUSCOPY,DLURLCOMPLETE,DLURLCOMPLETEONLY,DLURLCOMPLETEWRITE,DLURLPATH,DLURLPATHONLY,DLURLPATHWRITE,DLURLSCHEME,DLURLSERVER,DLVALUE,DOCUMENT,DOMAIN,DOUBLE,DROP,DYNAMIC,DYNAMIC_FUNCTION,DYNAMIC_FUNCTION_CODE,EACH,ELEMENT,ELSE,EMPTY,ENCODING,END,END-EXEC,EQUALS,ESCAPE,EVERY,EXCEPT,EXCLUDE,EXCLUDING,EXEC,EXECUTE,EXISTS,EXP,EXTERNAL,EXTRACT,FALSE,FETCH,FILE,FILTER,FINAL,FIRST,FIRST_VALUE,FLAG,FLOAT,FLOOR,FOLLOWING,FOR,FOREIGN,FORTRAN,FOUND,FREE,FROM,FS,FULL,FUNCTION,FUSION,G,GENERAL,GENERATED,GET,GLOBAL,GO,GOTO,GRANT,GRANTED,GROUP,GROUPING,HAVING,HEX,HIERARCHY,HOLD,HOUR,ID,IDENTITY,IGNORE,IMMEDIATE,IMPLEMENTATION,IMPORT,IN,INCLUDING,INCREMENT,INDENT,INDICATOR,INITIALLY,INNER,INOUT,INPUT,INSENSITIVE,INSERT,INSTANCE,INSTANTIABLE,INSTEAD,INT,INTEGER,INTEGRITY,INTERSECT,INTERSECTION,INTERVAL,INTO,INVOKER,IS,ISOLATION,JOIN,K,KEY,KEY_MEMBER,KEY_TYPE,LAG,LANGUAGE,LARGE,LAST,LAST_VALUE,LATERAL,LEAD,LEADING,LEFT,LENGTH,LEVEL,LIBRARY,LIKE,LIKE_REGEX,LIMIT,LINK,LN,LOCAL,LOCALTIME,LOCALTIMESTAMP,LOCATION,LOCATOR,LOWER,M,MAP,MAPPING,MATCH,MATCHED,MAX,MAXVALUE,MAX_CARDINALITY,MEMBER,MERGE,MESSAGE_LENGTH,MESSAGE_OCTET_LENGTH,MESSAGE_TEXT,METHOD,MIN,MINUTE,MINVALUE,MOD,MODIFIES,MODULE,MONTH,MORE,MULTISET,MUMPS,NAME,NAMES,NAMESPACE,NATIONAL,NATURAL,NCHAR,NCLOB,NESTING,NEW,NEXT,NFC,NFD,NFKC,NFKD,NIL,NO,NONE,NORMALIZE,NORMALIZED,NOT,NTH_VALUE,NTILE,NULL,NULLABLE,NULLIF,NULLS,NUMBER,NUMERIC,OBJECT,OCCURRENCES_REGEX,OCTETS,OCTET_LENGTH,OF,OFF,OFFSET,OLD,ON,ONLY,OPEN,OPTION,OPTIONS,OR,ORDER,ORDERING,ORDINALITY,OTHERS,OUT,OUTER,OUTPUT,OVER,OVERLAPS,OVERLAY,OVERRIDING,P,PAD,PARAMETER,PARAMETER_MODE,PARAMETER_NAME,PARAMETER_ORDINAL_POSITION,PARAMETER_SPECIFIC_CATALOG,PARAMETER_SPECIFIC_NAME,PARAMETER_SPECIFIC_SCHEMA,PARTIAL,PARTITION,PASCAL,PASSING,PASSTHROUGH,PATH,PERCENTILE_CONT,PERCENTILE_DISC,PERCENT_RANK,PERMISSION,PLACING,PLI,POSITION,POSITION_REGEX,POWER,PRECEDING,PRECISION,PREPARE,PRESERVE,PRIMARY,PRIOR,PRIVILEGES,PROCEDURE,PUBLIC,RANGE,RANK,READ,READS,REAL,RECOVERY,RECURSIVE,REF,REFERENCES,REFERENCING,REGR_AVGX,REGR_AVGY,REGR_COUNT,REGR_INTERCEPT,REGR_R2,REGR_SLOPE,REGR_SXX,REGR_SXY,REGR_SYY,RELATIVE,RELEASE,REPEATABLE,REQUIRING,RESPECT,RESTART,RESTORE,RESTRICT,RESULT,RETURN,RETURNED_CARDINALITY,RETURNED_LENGTH,RETURNED_OCTET_LENGTH,RETURNED_SQLSTATE,RETURNING,RETURNS,REVOKE,RIGHT,ROLE,ROLLBACK,ROLLUP,ROUTINE,ROUTINE_CATALOG,ROUTINE_NAME,ROUTINE_SCHEMA,ROW,ROWS,ROW_COUNT,ROW_NUMBER,SAVEPOINT,SCALE,SCHEMA,SCHEMA_NAME,SCOPE,SCOPE_CATALOG,SCOPE_NAME,SCOPE_SCHEMA,SCROLL,SEARCH,SECOND,SECTION,SECURITY,SELECT,SELECTIVE,SELF,SENSITIVE,SEQUENCE,SERIALIZABLE,SERVER,SERVER_NAME,SESSION,SESSION_USER,SET,SETS,SIMILAR,SIMPLE,SIZE,SMALLINT,SOME,SOURCE,SPACE,SPECIFIC,SPECIFICTYPE,SPECIFIC_NAME,SQL,SQLEXCEPTION,SQLSTATE,SQLWARNING,SQRT,STANDALONE,START,STATE,STATEMENT,STATIC,STDDEV_POP,STDDEV_SAMP,STRIP,STRUCTURE,STYLE,SUBCLASS_ORIGIN,SUBMULTISET,SUBSTRING,SUBSTRING_REGEX,SUM,SYMMETRIC,SYSTEM,SYSTEM_USER,T,TABLE,TABLESAMPLE,TABLE_NAME,TEMPORARY,THEN,TIES,TIME,TIMESTAMP,TIMEZONE_HOUR,TIMEZONE_MINUTE,TO,TOKEN,TOP_LEVEL_COUNT,TRAILING,TRANSACTION,TRANSACTIONS_COMMITTED,TRANSACTIONS_ROLLED_BACK,TRANSACTION_ACTIVE,TRANSFORM,TRANSFORMS,TRANSLATE,TRANSLATE_REGEX,TRANSLATION,TREAT,TRIGGER,TRIGGER_CATALOG,TRIGGER_NAME,TRIGGER_SCHEMA,TRIM,TRIM_ARRAY,TRUE,TRUNCATE,TYPE,UESCAPE,UNBOUNDED,UNCOMMITTED,UNDER,UNION,UNIQUE,UNKNOWN,UNLINK,UNNAMED,UNNEST,UNTYPED,UPDATE,UPPER,URI,USAGE,USER,USER_DEFINED_TYPE_CATALOG,USER_DEFINED_TYPE_CODE,USER_DEFINED_TYPE_NAME,USER_DEFINED_TYPE_SCHEMA,USING,VALID,VALUE,VALUES,VARBINARY,VARCHAR,VARYING,VAR_POP,VAR_SAMP,VERSION,VIEW,WHEN,WHENEVER,WHERE,WHITESPACE,WIDTH_BUCKET,WINDOW,WITH,WITHIN,WITHOUT,WORK,WRAPPER,WRITE,XML,XMLAGG,XMLATTRIBUTES,XMLBINARY,XMLCAST,XMLCOMMENT,XMLCONCAT,XMLDECLARATION,XMLDOCUMENT,XMLELEMENT,XMLEXISTS,XMLFOREST,XMLITERATE,XMLNAMESPACES,XMLPARSE,XMLPI,XMLQUERY,XMLSCHEMA,XMLSERIALIZE,XMLTABLE,XMLTEXT,XMLVALIDATE,YEAR,YES,ZONE";
359    static String keywordsInLexer ="addkeyword('ACCESS',RW_ACCESS,ttcolumn);\n" +
360            "addkeyword('ACCTNG',RW_ACCTNG,ttcolumn);\n" +
361            "addkeyword('ACTION',RW_ACTION,ttcolumn);\n" +
362            "addkeyword('ACTIVATE',RW_ACTIVATE,ttcolumn);\n" +
363            "addkeyword('ADD',RW_ADD,ttreserved);\n" +
364            "addkeyword('AFTER',RW_AFTER,ttreserved);\n" +
365            "addkeyword('AGE',RW_AGE,ttcolumn);\n" +
366            "addkeyword('ALIAS',RW_ALIAS,ttcolumn);\n" +
367            "addkeyword('ALL',RW_ALL,ttreserved);\n" +
368            "addkeyword('ALLOCATE',RW_ALLOCATE,ttreserved);\n" +
369            "addkeyword('ALLOW',RW_ALLOW,ttreserved);\n" +
370            "addkeyword('ALTER',RW_ALTER,ttreserved);\n" +
371            "addkeyword('ALWAYS',RW_ALWAYS,ttcolumn);\n" +
372            "addkeyword('AND',RW_AND,ttreserved);\n" +
373            "addkeyword('ANY',RW_ANY,ttreserved);\n" +
374            "addkeyword('APPEND',RW_APPEND,ttcolumn);\n" +
375            "addkeyword('APPLNAME',RW_APPLNAME,ttcolumn);\n" +
376            "addkeyword('ARRAY',RW_ARRAY,ttcolumn);\n" +
377            "addkeyword('AS',RW_AS,ttreserved);\n" +
378            "addkeyword('ASC',RW_ASC,ttcolumn);\n" +
379            "addkeyword('ASCII',RW_ASCII,ttcolumn);\n" +
380            "addkeyword('ASENSITIVE',RW_ASENSITIVE,ttreserved);\n" +
381            "addkeyword('ASSOCIATE',RW_ASSOCIATE,ttreserved);\n" +
382            "addkeyword('ASUTIME',RW_ASUTIME,ttreserved);\n" +
383            "addkeyword('AT',RW_AT,ttreserved);\n" +
384            "addkeyword('AUDIT',RW_AUDIT,ttreserved);\n" +
385            "addkeyword('ATOMIC',RW_ATOMIC,ttcolumn);\n" +
386            "addkeyword('AUX',RW_AUX,ttreserved);\n" +
387            "addkeyword('AUXILIARY',RW_AUXILIARY,ttreserved);\n" +
388            "addkeyword('BEFORE',RW_BEFORE,ttreserved);\n" +
389            "addkeyword('BEGIN',RW_BEGIN,ttreserved);\n" +
390            "addkeyword('BERNOULLI',RW_BERNOULLI,ttcolumn);\n" +
391            "addkeyword('BETWEEN',RW_BETWEEN,ttreserved);\n" +
392            "addkeyword('BIGINT',RW_BIGINT,ttcolumn);\n" +
393            "addkeyword('BINARY',RW_BINARY,ttcolumn);\n" +
394            "addkeyword('BIT',RW_BIT,ttcolumn);\n" +
395            "addkeyword('BLOB',RW_BLOB,ttcolumn);\n" +
396            "addkeyword('BLOCKED',RW_BLOCKED,ttcolumn);\n" +
397            "addkeyword('BOTH',RW_BOTH,ttcolumn);\n" +
398            "addkeyword('BUFFERPOOL',RW_BUFFERPOOL,ttreserved);\n" +
399            "addkeyword('BUILD',RW_BUILD,ttcolumn);\n" +
400            "addkeyword('BUSINESS_TIME',RW_BUSINESS_TIME,ttcolumn);\n" +
401            "addkeyword('BY',RW_BY,ttreserved);\n" +
402            "addkeyword('CACHE',RW_CACHE,ttcolumn);\n" +
403            "addkeyword('CALL',RW_CALL,ttreserved);\n" +
404            "addkeyword('CALLED',RW_CALLED,ttcolumn);\n" +
405            "addkeyword('CALLER',RW_CALLER,ttcolumn);\n" +
406            "addkeyword('CAPTURE',RW_CAPTURE,ttreserved);\n" +
407            "addkeyword('CARDINALITY',RW_CARDINALITY,ttcolumn);\n" +
408            "addkeyword('CASCADE',RW_CASCADE,ttcolumn);\n" +
409            "addkeyword('CASCADED',RW_CASCADED,ttreserved);\n" +
410            "addkeyword('CASE',RW_CASE,ttreserved);\n" +
411            "addkeyword('CAST',RW_CAST,ttreserved);\n" +
412            "addkeyword('CATEGORIES',RW_CATEGORIES,ttcolumn);\n" +
413            "addkeyword('CCSID',RW_CCSID,ttreserved);\n" +
414            "addkeyword('CHANGE',RW_CHANGE,ttcolumn);\n" +
415            "addkeyword('CHANGES',RW_CHANGES,ttcolumn);\n" +
416            "addkeyword('CHAR',RW_CHAR,ttreserved);\n" +
417            "addkeyword('CHARACTER',RW_CHARACTER,ttreserved);\n" +
418            "addkeyword('CHECK',RW_CHECK,ttreserved);\n" +
419            "addkeyword('CLIENT',RW_CLIENT,ttcolumn);\n" +
420            "addkeyword('CLIENT_ACCTNG',RW_CLIENT_ACCTNG,ttcolumn);\n" +
421            "addkeyword('CLIENT_APPLNAME',RW_CLIENT_APPLNAME,ttcolumn);\n" +
422            "addkeyword('CLIENT_USERID',RW_CLIENT_USERID,ttcolumn);\n" +
423            "addkeyword('CLIENT_WRKSTNNAME',RW_CLIENT_WRKSTNNAME,ttcolumn);\n" +
424            "addkeyword('CLOB',RW_CLOB,ttcolumn);\n" +
425            "addkeyword('CLONE',RW_CLONE,ttreserved);\n" +
426            "addkeyword('CLOSE',RW_CLOSE,ttreserved);\n" +
427            "addkeyword('CLUSTER',RW_CLUSTER,ttreserved);\n" +
428            "addkeyword('CODEUNITS16',RW_CODEUNITS16,ttcolumn);\n" +
429            "addkeyword('CODEUNITS32',RW_CODEUNITS32,ttcolumn);\n" +
430            "addkeyword('COLLECT',RW_COLLECT,ttcolumn);\n" +
431            "addkeyword('COLLECTION',RW_COLLECTION,ttreserved);\n" +
432            "addkeyword('COLLID',RW_COLLID,ttreserved);\n" +
433            "addkeyword('COLUMN',RW_COLUMN,ttreserved);\n" +
434            "addkeyword('COLUMNS',RW_COLUMNS,ttcolumn);\n" +
435            "addkeyword('COMMENT',RW_COMMENT,ttreserved);\n" +
436            "addkeyword('COMMIT',RW_COMMIT,ttreserved);\n" +
437            "addkeyword('COMPACT',RW_COMPACT,ttcolumn);\n" +
438            "addkeyword('COMPRESS',RW_COMPRESS,ttcolumn);\n" +
439            "addkeyword('COMPRESSION',RW_COMPRESSION,ttcolumn);\n" +
440            "addkeyword('CONCAT',RW_CONCAT,ttreserved);\n" +
441            "addkeyword('CONDITION',RW_CONDITION,ttreserved);\n" +
442            "addkeyword('CONNECT',RW_CONNECT,ttreserved);\n" +
443            "addkeyword('CONNECTION',RW_CONNECTION,ttreserved);\n" +
444            "addkeyword('CONSTANT',RW_CONSTANT,ttcolumn);\n" +
445            "addkeyword('CONSTRAINT',RW_CONSTRAINT,ttreserved);\n" +
446            "addkeyword('CONSTRAINTS',RW_CONSTRAINTS,ttcolumn);\n" +
447            "addkeyword('CONTAINS',RW_CONTAINS,ttreserved);\n" +
448            "addkeyword('CONTENT',RW_CONTENT,ttreserved);\n" +
449            "addkeyword('CONTINUE',RW_CONTINUE,ttreserved);\n" +
450            "addkeyword('CONTROL',RW_CONTROL,ttcolumn);\n" +
451            "addkeyword('COUNT',RW_COUNT,ttcolumn);\n" +
452            "addkeyword('CREATE',RW_CREATE,ttreserved);\n" +
453            "addkeyword('CROSS',RW_CROSS,ttcolumn);\n" +
454            "addkeyword('CS',RW_CS,ttcolumn);\n" +
455            "addkeyword('CUBE',RW_CUBE,ttcolumn);\n" +
456            "addkeyword('CURRENT',RW_CURRENT,ttreserved);\n" +
457            "addkeyword('CURRENT_DATE',RW_CURRENT_DATE,ttreserved);\n" +
458            "addkeyword('CURRENT_LC_CTYPE',RW_CURRENT_LC_CTYPE,ttreserved);\n" +
459            "addkeyword('CURRENT_LC_PATH',RW_CURRENT_LC_PATH,ttcolumn);\n" +
460            "addkeyword('CURRENT_PATH',RW_CURRENT_PATH,ttreserved);\n" +
461            "addkeyword('CURRENT_SCHEMA',RW_CURRENT_SCHEMA,ttreserved);\n" +
462            "addkeyword('CURRENT_SERVER',RW_CURRENT_SERVER,ttcolumn);\n" +
463            "addkeyword('CURRENT_TIME',RW_CURRENT_TIME,ttreserved);\n" +
464            "addkeyword('CURRENT_TIMESTAMP',RW_CURRENT_TIMESTAMP,ttreserved);\n" +
465            "addkeyword('CURRENT_TIMEZONE',RW_CURRENT_TIMEZONE,ttcolumn);\n" +
466            "addkeyword('CURRENT_USER',RW_CURRENT_USER,ttcolumn);\n" +
467            "addkeyword('CURSOR',RW_CURSOR,ttreserved);\n" +
468            "addkeyword('CURSORS',RW_CURSORS,ttcolumn);\n" +
469            "addkeyword('CYCLE',RW_CYCLE,ttcolumn);\n" +
470            "addkeyword('DATA',RW_DATA,ttreserved);\n" +
471            "addkeyword('DATABASE',RW_DATABASE,ttreserved);\n" +
472            "addkeyword('DATALINK',RW_DATALINK,ttcolumn);\n" +
473            "addkeyword('DATE',RW_DATE,ttcolumn);\n" +
474            "addkeyword('DAY',RW_DAY,ttreserved);\n" +
475            "addkeyword('DAYS',RW_DAYS,ttreserved);\n" +
476            "addkeyword('DB',RW_DB,ttcolumn);\n" +
477            "addkeyword('DB2GENERAL',RW_DB2GENERAL,ttcolumn);\n" +
478            "addkeyword('DB2OPTIONS',RW_DB2OPTIONS,ttcolumn);\n" +
479            "addkeyword('DB2SQL',RW_DB2SQL,ttcolumn);\n" +
480            "addkeyword('DBA',RW_DBA,ttcolumn);\n" +
481            "addkeyword('DBCLOB',RW_DBCLOB,ttcolumn);\n" +
482            "addkeyword('DBINFO',RW_DBINFO,ttreserved);\n" +
483            "addkeyword('DBPARTITIONNUM',RW_DBPARTITIONNUM,ttcolumn);\n" +
484            "addkeyword('DBSPACE',RW_DBSPACE,ttcolumn);\n" +
485            "addkeyword('DEACTIVATE',RW_DEACTIVATE,ttcolumn);\n" +
486            "addkeyword('DEC',RW_DEC,ttcolumn);\n" +
487            "addkeyword('DECFLOAT',RW_DECFLOAT,ttcolumn);\n" +
488            "addkeyword('DECIMAL',RW_DECIMAL,ttcolumn);\n" +
489            "addkeyword('DECLARE',RW_DECLARE,ttreserved);\n" +
490            "addkeyword('DECODE',RW_DECODE,ttcolumn);\n" +
491            "addkeyword('DEFAULT',RW_DEFAULT,ttreserved);\n" +
492            "addkeyword('DEFAULTS',RW_DEFAULTS,ttcolumn);\n" +
493            "addkeyword('DEFERRABLE',RW_DEFERRABLE,ttcolumn);\n" +
494            "addkeyword('DEFERRED',RW_DEFERRED,ttcolumn);\n" +
495            "addkeyword('DEGREE',RW_DEGREE,ttcolumn);\n" +
496            "addkeyword('DELETE',RW_DELETE,ttreserved);\n" +
497            "addkeyword('DESC',RW_DESC,ttcolumn);\n" +
498            "addkeyword('DESCRIBE',RW_DESCRIBE,ttcolumn);\n" +
499            "addkeyword('DESCRIPTOR',RW_DESCRIPTOR,ttreserved);\n" +
500            "addkeyword('DETAILED',RW_DETAILED,ttcolumn);\n" +
501            "addkeyword('DETERMINED',RW_DETERMINED,ttcolumn);\n" +
502            "addkeyword('DETERMINISTIC',RW_DETERMINISTIC,ttreserved);\n" +
503            "addkeyword('DIAGNOSTICS',RW_DIAGNOSTICS,ttcolumn);\n" +
504            "addkeyword('DIMENSIONS',RW_DIMENSIONS,ttcolumn);\n" +
505            "addkeyword('DISABLE',RW_DISABLE,ttreserved);\n" +
506            "addkeyword('DISALLOW',RW_DISALLOW,ttreserved);\n" +
507            "addkeyword('DISCONNECT',RW_DISCONNECT,ttcolumn);\n" +
508            "addkeyword('DISPATCH',RW_DISPATCH,ttcolumn);\n" +
509            "addkeyword('DISTINCT',RW_DISTINCT,ttreserved);\n" +
510            "addkeyword('DO',RW_DO,ttreserved);\n" +
511            "addkeyword('DOCUMENT',RW_DOCUMENT,ttreserved);\n" +
512            "addkeyword('DOUBLE',RW_DOUBLE,ttreserved);\n" +
513            "addkeyword('DROP',RW_DROP,ttreserved);\n" +
514            "addkeyword('DSSIZE',RW_DSSIZE,ttreserved);\n" +
515            "addkeyword('DYNAMIC',RW_DYNAMIC,ttreserved);\n" +
516            "addkeyword('EACH',RW_EACH,ttcolumn);\n" +
517            "addkeyword('EDITPROC',RW_EDITPROC,ttreserved);\n" +
518            "addkeyword('ELSE',RW_ELSE,ttreserved);\n" +
519            "addkeyword('ELSEIF',RW_ELSEIF,ttreserved);\n" +
520            "addkeyword('EMPTY',RW_EMPTY,ttcolumn);\n" +
521            "addkeyword('ENABLE',RW_ENABLE,ttcolumn);\n" +
522            "addkeyword('ENCODING',RW_ENCODING,ttreserved);\n" +
523            "addkeyword('ENCRYPTION',RW_ENCRYPTION,ttreserved);\n" +
524            "addkeyword('END',RW_END,ttreserved);\n" +
525            "addkeyword('END-EXEC',RW_END-EXEC,ttreserved);\n" +
526            "addkeyword('ENDING',RW_ENDING,ttreserved);\n" +
527            "addkeyword('ENFORCED',RW_ENFORCED,ttcolumn);\n" +
528            "addkeyword('ERASE',RW_ERASE,ttreserved);\n" +
529            "addkeyword('ESCAPE',RW_ESCAPE,ttreserved);\n" +
530            "addkeyword('EXACT',RW_EXACT,ttcolumn);\n" +
531            "addkeyword('EXCEPT',RW_EXCEPT,ttreserved);\n" +
532            "addkeyword('EXCEPTION',RW_EXCEPTION,ttreserved);\n" +
533            "addkeyword('EXCLUDING',RW_EXCLUDING,ttcolumn);\n" +
534            "addkeyword('EXCLUSIVE',RW_EXCLUSIVE,ttcolumn);\n" +
535            "addkeyword('EXECUTE',RW_EXECUTE,ttreserved);\n" +
536            "addkeyword('EXECUTION',RW_EXECUTION,ttcolumn);\n" +
537            "addkeyword('EXISTS',RW_EXISTS,ttreserved);\n" +
538            "addkeyword('EXIT',RW_EXIT,ttreserved);\n" +
539            "addkeyword('EXPLAIN',RW_EXPLAIN,ttreserved);\n" +
540            "addkeyword('EXPRESSION',RW_EXPRESSION,ttcolumn);\n" +
541            "addkeyword('EXTENSION',RW_EXTENSION,ttcolumn);\n" +
542            "addkeyword('EXTERNAL',RW_EXTERNAL,ttreserved);\n" +
543            "addkeyword('EXTRACT',RW_EXTRACT,ttcolumn);\n" +
544            "addkeyword('FEDERATED_TOOL',RW_FEDERATED_TOOL,ttcolumn);\n" +
545            "addkeyword('FENCED',RW_FENCED,ttreserved);\n" +
546            "addkeyword('FETCH',RW_FETCH,ttreserved);\n" +
547            "addkeyword('FIELDPROC',RW_FIELDPROC,ttreserved);\n" +
548            "addkeyword('FILE',RW_FILE,ttcolumn);\n" +
549            "addkeyword('FILTER',RW_FILTER,ttcolumn);\n" +
550            "addkeyword('FINAL',RW_FINAL,ttreserved);\n" +
551            "addkeyword('FIRST',RW_FIRST,ttreserved);\n" +
552            "addkeyword('FLOAT',RW_FLOAT,ttcolumn);\n" +
553            "addkeyword('FLUSH',RW_FLUSH,ttcolumn);\n" +
554            "addkeyword('FOLLOWING',RW_FOLLOWING,ttcolumn);\n" +
555            "addkeyword('FOR',RW_FOR,ttreserved);\n" +
556            "addkeyword('FORCE',RW_FORCE,ttcolumn);\n" +
557            "addkeyword('FOREIGN',RW_FOREIGN,ttcolumn);\n" +
558            "addkeyword('FOUND',RW_FOUND,ttcolumn);\n" +
559            "addkeyword('FREE',RW_FREE,ttreserved);\n" +
560            "addkeyword('FROM',RW_FROM,ttreserved);\n" +
561            "addkeyword('FS',RW_FS,ttcolumn);\n" +
562            "addkeyword('FULL',RW_FULL,ttreserved);\n" +
563            "addkeyword('FUNCTION',RW_FUNCTION,ttreserved);\n" +
564            "addkeyword('GENERAL',RW_GENERAL,ttcolumn);\n" +
565            "addkeyword('GENERATED',RW_GENERATED,ttreserved);\n" +
566            "addkeyword('GET',RW_GET,ttreserved);\n" +
567            "addkeyword('GLOBAL',RW_GLOBAL,ttreserved);\n" +
568            "addkeyword('GO',RW_GO,ttreserved);\n" +
569            "addkeyword('GOTO',RW_GOTO,ttreserved);\n" +
570            "addkeyword('GRANT',RW_GRANT,ttreserved);\n" +
571            "addkeyword('GRAPHIC',RW_GRAPHIC,ttcolumn);\n" +
572            "addkeyword('GROUP',RW_GROUP,ttreserved);\n" +
573            "addkeyword('GROUPING',RW_GROUPING,ttcolumn);\n" +
574            "addkeyword('GROUPS',RW_GROUPS,ttcolumn);\n" +
575            "addkeyword('HANDLER',RW_HANDLER,ttreserved);\n" +
576            "addkeyword('HASHING',RW_HASHING,ttcolumn);\n" +
577            "addkeyword('HAVING',RW_HAVING,ttreserved);\n" +
578            "addkeyword('HOLD',RW_HOLD,ttreserved);\n" +
579            "addkeyword('HOUR',RW_HOUR,ttreserved);\n" +
580            "addkeyword('HOURS',RW_HOURS,ttreserved);\n" +
581            "addkeyword('IDENTITY',RW_IDENTITY,ttcolumn);\n" +
582            "addkeyword('IF',RW_IF,ttreserved);\n" +
583            "addkeyword('IGNORE',RW_IGNORE,ttcolumn);\n" +
584            "addkeyword('IMMEDIATE',RW_IMMEDIATE,ttreserved);\n" +
585            "addkeyword('IN',RW_IN,ttreserved);\n" +
586            "addkeyword('INCLUDE',RW_INCLUDE,ttcolumn);\n" +
587            "addkeyword('INCLUDING',RW_INCLUDING,ttcolumn);\n" +
588            "addkeyword('INCLUSIVE',RW_INCLUSIVE,ttreserved);\n" +
589            "addkeyword('INCREMENT',RW_INCREMENT,ttcolumn);\n" +
590            "addkeyword('INDEX',RW_INDEX,ttreserved);\n" +
591            "addkeyword('INDICATOR',RW_INDICATOR,ttcolumn);\n" +
592            "addkeyword('INHERIT',RW_INHERIT,ttreserved);\n" +
593            "addkeyword('INITIALLY',RW_INITIALLY,ttcolumn);\n" +
594            "addkeyword('INLINE',RW_INLINE,ttcolumn);\n" +
595            "addkeyword('INNER',RW_INNER,ttreserved);\n" +
596            "addkeyword('INOUT',RW_INOUT,ttreserved);\n" +
597            "addkeyword('INPUT',RW_INPUT,ttcolumn);\n" +
598            "addkeyword('INSENSITIVE',RW_INSENSITIVE,ttreserved);\n" +
599            "addkeyword('INSERT',RW_INSERT,ttreserved);\n" +
600            "addkeyword('INSTEAD',RW_INSTEAD,ttcolumn);\n" +
601            "addkeyword('INT',RW_INT,ttcolumn);\n" +
602            "addkeyword('INTEGER',RW_INTEGER,ttcolumn);\n" +
603            "addkeyword('INTEGRITY',RW_INTEGRITY,ttcolumn);\n" +
604            "addkeyword('INTERSECT',RW_INTERSECT,ttreserved);\n" +
605            "addkeyword('INTO',RW_INTO,ttreserved);\n" +
606            "addkeyword('INVALIDATE',RW_INVALIDATE,ttcolumn);\n" +
607            "addkeyword('IS',RW_IS,ttreserved);\n" +
608            "addkeyword('ISOBID',RW_ISOBID,ttreserved);\n" +
609            "addkeyword('ISOLATION',RW_ISOLATION,ttcolumn);\n" +
610            "addkeyword('ITERATE',RW_ITERATE,ttreserved);\n" +
611            "addkeyword('JAR',RW_JAR,ttreserved);\n" +
612            "addkeyword('JAVA',RW_JAVA,ttcolumn);\n" +
613            "addkeyword('JOIN',RW_JOIN,ttreserved);\n" +
614            "addkeyword('KEEP',RW_KEEP,ttreserved);\n" +
615            "addkeyword('KEY',RW_KEY,ttreserved);\n" +
616            "addkeyword('L',RW_L,ttcolumn);\n" +
617            "addkeyword('LABEL',RW_LABEL,ttreserved);\n" +
618            "addkeyword('LANGUAGE',RW_LANGUAGE,ttreserved);\n" +
619            "addkeyword('LARGE',RW_LARGE,ttcolumn);\n" +
620            "addkeyword('LAST',RW_LAST,ttreserved);\n" +
621            "addkeyword('LATERAL',RW_LATERAL,ttcolumn);\n" +
622            "addkeyword('LC_CTYPE',RW_LC_CTYPE,ttreserved);\n" +
623            "addkeyword('LEADING',RW_LEADING,ttcolumn);\n" +
624            "addkeyword('LEAVE',RW_LEAVE,ttreserved);\n" +
625            "addkeyword('LEFT',RW_LEFT,ttreserved);\n" +
626            "addkeyword('LENGTH',RW_LENGTH,ttcolumn);\n" +
627            "addkeyword('LEVEL',RW_LEVEL,ttcolumn);\n" +
628            "addkeyword('LIKE',RW_LIKE,ttreserved);\n" +
629            "addkeyword('LIMIT',RW_LIMIT,ttcolumn);\n" +
630            "addkeyword('LINK',RW_LINK,ttcolumn);\n" +
631            "addkeyword('LINKTYPE',RW_LINKTYPE,ttcolumn);\n" +
632            "addkeyword('LISTAGG',RW_LISTAGG,ttcolumn);\n" +
633            "addkeyword('LOB',RW_LOB,ttcolumn);\n" +
634            "addkeyword('LOCAL',RW_LOCAL,ttreserved);\n" +
635            "addkeyword('LOCALE',RW_LOCALE,ttreserved);\n" +
636            "addkeyword('LOCATOR',RW_LOCATOR,ttreserved);\n" +
637            "addkeyword('LOCATORS',RW_LOCATORS,ttreserved);\n" +
638            "addkeyword('LOCK',RW_LOCK,ttreserved);\n" +
639            "addkeyword('LOCKMAX',RW_LOCKMAX,ttreserved);\n" +
640            "addkeyword('LOCKS',RW_LOCKS,ttcolumn);\n" +
641            "addkeyword('LOCKSIZE',RW_LOCKSIZE,ttreserved);\n" +
642            "addkeyword('LOG',RW_LOG,ttcolumn);\n" +
643            "addkeyword('LOGGED',RW_LOGGED,ttcolumn);\n" +
644            "addkeyword('LONG',RW_LONG,ttreserved);\n" +
645            "addkeyword('LONGVAR',RW_LONGVAR,ttcolumn);\n" +
646            "addkeyword('LOOP',RW_LOOP,ttreserved);\n" +
647            "addkeyword('MAIN',RW_MAIN,ttcolumn);\n" +
648            "addkeyword('MAINTAINED',RW_MAINTAINED,ttreserved);\n" +
649            "addkeyword('MATCHED',RW_MATCHED,ttcolumn);\n" +
650            "addkeyword('MATERIALIZED',RW_MATERIALIZED,ttreserved);\n" +
651            "addkeyword('MAX',RW_MAX,ttcolumn);\n" +
652            "addkeyword('MAXVALUE',RW_MAXVALUE,ttcolumn);\n" +
653            "addkeyword('MEMBER',RW_MEMBER,ttcolumn);\n" +
654            "addkeyword('MERGE',RW_MERGE,ttcolumn);\n" +
655            "addkeyword('MESSAGE_TEXT',RW_MESSAGE_TEXT,ttcolumn);\n" +
656            "addkeyword('MICROSECOND',RW_MICROSECOND,ttreserved);\n" +
657            "addkeyword('MICROSECONDS',RW_MICROSECONDS,ttreserved);\n" +
658            "addkeyword('MIN',RW_MIN,ttcolumn);\n" +
659            "addkeyword('MINUS',RW_MINUS,ttcolumn);\n" +
660            "addkeyword('MINUTE',RW_MINUTE,ttreserved);\n" +
661            "addkeyword('MINUTES',RW_MINUTES,ttreserved);\n" +
662            "addkeyword('MINVALUE',RW_MINVALUE,ttcolumn);\n" +
663            "addkeyword('MODE',RW_MODE,ttcolumn);\n" +
664            "addkeyword('MODIFIES',RW_MODIFIES,ttreserved);\n" +
665            "addkeyword('MODIFY',RW_MODIFY,ttcolumn);\n" +
666            "addkeyword('MONTH',RW_MONTH,ttreserved);\n" +
667            "addkeyword('MONTHS',RW_MONTHS,ttreserved);\n" +
668            "addkeyword('MOVEMENT',RW_MOVEMENT,ttcolumn);\n" +
669            "addkeyword('NAME',RW_NAME,ttcolumn);\n" +
670            "addkeyword('NATURAL',RW_NATURAL,ttcolumn);\n" +
671            "addkeyword('NCHAR',RW_NCHAR,ttcolumn);\n" +
672            "addkeyword('NCLOB',RW_NCLOB,ttcolumn);\n" +
673            "addkeyword('NEW',RW_NEW,ttcolumn);\n" +
674            "addkeyword('NEW_TABLE',RW_NEW_TABLE,ttcolumn);\n" +
675            "addkeyword('NEXT',RW_NEXT,ttreserved);\n" +
676            "addkeyword('NEXTVAL',RW_NEXTVAL,ttreserved);\n" +
677            "addkeyword('NO',RW_NO,ttreserved);\n" +
678            "addkeyword('NOCYCLE',RW_NOCYCLE,ttcolumn);\n" +
679            "addkeyword('NONE',RW_NONE,ttreserved);\n" +
680            "addkeyword('NOT',RW_NOT,ttreserved);\n" +
681            "addkeyword('NULL',RW_NULL,ttreserved);\n" +
682            "addkeyword('NULLS',RW_NULLS,ttreserved);\n" +
683            "addkeyword('NUM',RW_NUM,ttcolumn);\n" +
684            "addkeyword('NUMBER',RW_NUMBER,ttcolumn);\n" +
685            "addkeyword('NUMERIC',RW_NUMERIC,ttcolumn);\n" +
686            "addkeyword('NUMPARTS',RW_NUMPARTS,ttreserved);\n" +
687            "addkeyword('NVARCHAR',RW_NVARCHAR,ttcolumn);\n" +
688            "addkeyword('OBID',RW_OBID,ttreserved);\n" +
689            "addkeyword('OBJECT',RW_OBJECT,ttcolumn);\n" +
690            "addkeyword('OCTETS',RW_OCTETS,ttcolumn);\n" +
691            "addkeyword('OF',RW_OF,ttreserved);\n" +
692            "addkeyword('OFFSET',RW_OFFSET,ttcolumn);\n" +
693            "addkeyword('OLD',RW_OLD,ttreserved);\n" +
694            "addkeyword('OLD_TABLE',RW_OLD_TABLE,ttcolumn);\n" +
695            "addkeyword('ON',RW_ON,ttreserved);\n" +
696            "addkeyword('ONLY',RW_ONLY,ttcolumn);\n" +
697            "addkeyword('OPEN',RW_OPEN,ttreserved);\n" +
698            "addkeyword('OPTIMIZATION',RW_OPTIMIZATION,ttreserved);\n" +
699            "addkeyword('OPTIMIZE',RW_OPTIMIZE,ttreserved);\n" +
700            "addkeyword('OPTION',RW_OPTION,ttcolumn);\n" +
701            "addkeyword('OPTIONS',RW_OPTIONS,ttcolumn);\n" +
702            "addkeyword('OR',RW_OR,ttreserved);\n" +
703            "addkeyword('ORDER',RW_ORDER,ttreserved);\n" +
704            "addkeyword('ORDINALITY',RW_ORDINALITY,ttcolumn);\n" +
705            "addkeyword('ORGANIZATION',RW_ORGANIZATION,ttreserved);\n" +
706            "addkeyword('ORGANIZE',RW_ORGANIZE,ttcolumn);\n" +
707            "addkeyword('OUT',RW_OUT,ttreserved);\n" +
708            "addkeyword('OUTER',RW_OUTER,ttreserved);\n" +
709            "addkeyword('OVER',RW_OVER,ttcolumn);\n" +
710            "addkeyword('OVERFLOW',RW_OVERFLOW,ttcolumn);\n" +
711            "addkeyword('PACKAGE',RW_PACKAGE,ttreserved);\n" +
712            "addkeyword('PARALLEL',RW_PARALLEL,ttcolumn);\n" +
713            "addkeyword('PARAMETER',RW_PARAMETER,ttreserved);\n" +
714            "addkeyword('PART',RW_PART,ttreserved);\n" +
715            "addkeyword('PADDED',RW_PADDED,ttreserved);\n" +
716            "addkeyword('PARTITION',RW_PARTITION,ttreserved);\n" +
717            "addkeyword('PARTITIONED',RW_PARTITIONED,ttreserved);\n" +
718            "addkeyword('PARTITIONING',RW_PARTITIONING,ttreserved);\n" +
719            "addkeyword('PASSING',RW_PASSING,ttcolumn);\n" +
720            "addkeyword('PATH',RW_PATH,ttreserved);\n" +
721            "addkeyword('PCTFREE',RW_PCTFREE,ttcolumn);\n" +
722            "addkeyword('PERMISSION',RW_PERMISSION,ttcolumn);\n" +
723            "addkeyword('PIECESIZE',RW_PIECESIZE,ttreserved);\n" +
724            "addkeyword('PERIOD',RW_PERIOD,ttreserved);\n" +
725            "addkeyword('PLAN',RW_PLAN,ttreserved);\n" +
726            "addkeyword('POLICY',RW_POLICY,ttcolumn);\n" +
727            "addkeyword('PORTION',RW_PORTION,ttcolumn);\n" +
728            "addkeyword('PRECEDING',RW_PRECEDING,ttcolumn);\n" +
729            "addkeyword('PRECISION',RW_PRECISION,ttreserved);\n" +
730            "addkeyword('PREDICATES',RW_PREDICATES,ttcolumn);\n" +
731            "addkeyword('PREPARE',RW_PREPARE,ttreserved);\n" +
732            "addkeyword('PRESERVE',RW_PRESERVE,ttcolumn);\n" +
733            "addkeyword('PREVIOUS',RW_PREVIOUS,ttcolumn);\n" +
734            "addkeyword('PREVVAL',RW_PREVVAL,ttreserved);\n" +
735            "addkeyword('PRIMARY',RW_PRIMARY,ttcolumn);\n" +
736            "addkeyword('PRIOR',RW_PRIOR,ttreserved);\n" +
737            "addkeyword('PRIQTY',RW_PRIQTY,ttreserved);\n" +
738            "addkeyword('PRIVATE',RW_PRIVATE,ttcolumn);\n" +
739            "addkeyword('PRIVILEGES',RW_PRIVILEGES,ttreserved);\n" +
740            "addkeyword('PROCEDURE',RW_PROCEDURE,ttreserved);\n" +
741            "addkeyword('PROGRAM',RW_PROGRAM,ttreserved);\n" +
742            "addkeyword('PROPAGATE',RW_PROPAGATE,ttcolumn);\n" +
743            "addkeyword('PSID',RW_PSID,ttreserved);\n" +
744            "addkeyword('PUBLIC',RW_PUBLIC,ttreserved);\n" +
745            "addkeyword('QUERY',RW_QUERY,ttreserved);\n" +
746            "addkeyword('QUERYNO',RW_QUERYNO,ttreserved);\n" +
747            "addkeyword('R',RW_R,ttcolumn);\n" +
748            "addkeyword('RANGE',RW_RANGE,ttcolumn);\n" +
749            "addkeyword('READ',RW_READ,ttcolumn);\n" +
750            "addkeyword('READS',RW_READS,ttreserved);\n" +
751            "addkeyword('REAL',RW_REAL,ttcolumn);\n" +
752            "addkeyword('RECOVERY',RW_RECOVERY,ttcolumn);\n" +
753            "addkeyword('REF',RW_REF,ttcolumn);\n" +
754            "addkeyword('REFERENCES',RW_REFERENCES,ttreserved);\n" +
755            "addkeyword('REFERENCING',RW_REFERENCING,ttcolumn);\n" +
756            "addkeyword('REFRESH',RW_REFRESH,ttreserved);\n" +
757            "addkeyword('REGISTERS',RW_REGISTERS,ttcolumn);\n" +
758            "addkeyword('RELEASE',RW_RELEASE,ttreserved);\n" +
759            "addkeyword('RENAME',RW_RENAME,ttreserved);\n" +
760            "addkeyword('REPEAT',RW_REPEAT,ttreserved);\n" +
761            "addkeyword('REPEATABLE',RW_REPEATABLE,ttcolumn);\n" +
762            "addkeyword('REPLACE',RW_REPLACE,ttcolumn);\n" +
763            "addkeyword('REPLICATED',RW_REPLICATED,ttcolumn);\n" +
764            "addkeyword('REQUEST',RW_REQUEST,ttcolumn);\n" +
765            "addkeyword('REQUIRING',RW_REQUIRING,ttcolumn);\n" +
766            "addkeyword('RESIGNAL',RW_RESIGNAL,ttreserved);\n" +
767            "addkeyword('RESTART',RW_RESTART,ttcolumn);\n" +
768            "addkeyword('RESTORE',RW_RESTORE,ttcolumn);\n" +
769            "addkeyword('RESTRICT',RW_RESTRICT,ttreserved);\n" +
770            "addkeyword('RESULT',RW_RESULT,ttreserved);\n" +
771            "addkeyword('RESULT_SET_LOCATOR',RW_RESULT_SET_LOCATOR,ttreserved);\n" +
772            "addkeyword('RETAIN',RW_RETAIN,ttcolumn);\n" +
773            "addkeyword('RETURN',RW_RETURN,ttreserved);\n" +
774            "addkeyword('RETURNING',RW_RETURNING,ttcolumn);\n" +
775            "addkeyword('RETURNS',RW_RETURNS,ttreserved);\n" +
776            "addkeyword('REVOKE',RW_REVOKE,ttreserved);\n" +
777            "addkeyword('RIGHT',RW_RIGHT,ttreserved);\n" +
778            "addkeyword('ROLE',RW_ROLE,ttreserved);\n" +
779            "addkeyword('ROLLBACK',RW_ROLLBACK,ttreserved);\n" +
780            "addkeyword('ROLLUP',RW_ROLLUP,ttcolumn);\n" +
781            "addkeyword('ROUND_CEILING',RW_ROUND_CEILING,ttreserved);\n" +
782            "addkeyword('ROUND_DOWN',RW_ROUND_DOWN,ttreserved);\n" +
783            "addkeyword('ROUND_FLOOR',RW_ROUND_FLOOR,ttreserved);\n" +
784            "addkeyword('ROUND_HALF_DOWN',RW_ROUND_HALF_DOWN,ttreserved);\n" +
785            "addkeyword('ROUND_HALF_EVEN',RW_ROUND_HALF_EVEN,ttreserved);\n" +
786            "addkeyword('ROUND_HALF_UP',RW_ROUND_HALF_UP,ttreserved);\n" +
787            "addkeyword('ROUND_UP',RW_ROUND_UP,ttreserved);\n" +
788            "addkeyword('ROW',RW_ROW,ttreserved);\n" +
789            "addkeyword('ROWS',RW_ROWS,ttcolumn);\n" +
790            "addkeyword('ROWSET',RW_ROWSET,ttreserved);\n" +
791            "addkeyword('ROWTYPE',RW_ROWTYPE,ttcolumn);\n" +
792            "addkeyword('RR',RW_RR,ttcolumn);\n" +
793            "addkeyword('RS',RW_RS,ttcolumn);\n" +
794            "addkeyword('RUN',RW_RUN,ttreserved);\n" +
795            "addkeyword('RUNSTATS',RW_RUNSTATS,ttcolumn);\n" +
796            "addkeyword('SAFE',RW_SAFE,ttcolumn);\n" +
797            "addkeyword('SAMPLED',RW_SAMPLED,ttcolumn);\n" +
798            "addkeyword('SAVEPOINT',RW_SAVEPOINT,ttreserved);\n" +
799            "addkeyword('SBCS',RW_SBCS,ttcolumn);\n" +
800            "addkeyword('SCHEMA',RW_SCHEMA,ttreserved);\n" +
801            "addkeyword('SCRATCHPAD',RW_SCRATCHPAD,ttreserved);\n" +
802            "addkeyword('SEARCH',RW_SEARCH,ttcolumn);\n" +
803            "addkeyword('SECOND',RW_SECOND,ttreserved);\n" +
804            "addkeyword('SECONDS',RW_SECONDS,ttreserved);\n" +
805            "addkeyword('SECQTY',RW_SECQTY,ttreserved);\n" +
806            "addkeyword('SECURED',RW_SECURED,ttcolumn);\n" +
807            "addkeyword('SECURITY',RW_SECURITY,ttreserved);\n" +
808            "addkeyword('SELECT',RW_SELECT,ttreserved);\n" +
809            "addkeyword('SELECTIVITY',RW_SELECTIVITY,ttcolumn);\n" +
810            "addkeyword('SENSITIVE',RW_SENSITIVE,ttreserved);\n" +
811            "addkeyword('SEQUENCE',RW_SEQUENCE,ttreserved);\n" +
812            "addkeyword('SERVER',RW_SERVER,ttcolumn);\n" +
813            "addkeyword('SESSION',RW_SESSION,ttcolumn);\n" +
814            "addkeyword('SESSION_USER',RW_SESSION_USER,ttreserved);\n" +
815            "addkeyword('SET',RW_SET,ttreserved);\n" +
816            "addkeyword('SETS',RW_SETS,ttcolumn);\n" +
817            "addkeyword('SHARE',RW_SHARE,ttcolumn);\n" +
818            "addkeyword('SIGNAL',RW_SIGNAL,ttreserved);\n" +
819            "addkeyword('SIMPLE',RW_SIMPLE,ttreserved);\n" +
820            "addkeyword('SMALLINT',RW_SMALLINT,ttcolumn);\n" +
821            "addkeyword('SNAPSHOT',RW_SNAPSHOT,ttcolumn);\n" +
822            "addkeyword('SOME',RW_SOME,ttreserved);\n" +
823            "addkeyword('SOURCE',RW_SOURCE,ttreserved);\n" +
824            "addkeyword('SPECIAL',RW_SPECIAL,ttcolumn);\n" +
825            "addkeyword('SPECIFIC',RW_SPECIFIC,ttreserved);\n" +
826            "addkeyword('SQL',RW_SQL,ttcolumn);\n" +
827            "addkeyword('SQLCODE',RW_SQLCODE,ttcolumn);\n" +
828            "addkeyword('SQLEXCEPTION',RW_SQLEXCEPTION,ttcolumn);\n" +
829            "addkeyword('SQLSTATE',RW_SQLSTATE,ttcolumn);\n" +
830            "addkeyword('SQLWARNING',RW_SQLWARNING,ttcolumn);\n" +
831            "addkeyword('STANDARD',RW_STANDARD,ttreserved);\n" +
832            "addkeyword('START',RW_START,ttcolumn);\n" +
833            "addkeyword('STARTING',RW_STARTING,ttcolumn);\n" +
834            "addkeyword('STATEMENT',RW_STATEMENT,ttreserved);\n" +
835            "addkeyword('STATIC',RW_STATIC,ttreserved);\n" +
836            "addkeyword('STATISTICS',RW_STATISTICS,ttcolumn);\n" +
837            "addkeyword('STAY',RW_STAY,ttreserved);\n" +
838            "addkeyword('STOGROUP',RW_STOGROUP,ttreserved);\n" +
839            "addkeyword('STORES',RW_STORES,ttreserved);\n" +
840            "addkeyword('STYLE',RW_STYLE,ttreserved);\n" +
841            "addkeyword('SUB',RW_SUB,ttcolumn);\n" +
842            "addkeyword('SUBSTRING',RW_SUBSTRING,ttcolumn);\n" +
843            "addkeyword('SUMMARY',RW_SUMMARY,ttreserved);\n" +
844            "addkeyword('SYNONYM',RW_SYNONYM,ttreserved);\n" +
845            "addkeyword('SYSFUN',RW_SYSFUN,ttreserved);\n" +
846            "addkeyword('SYSIBM',RW_SYSIBM,ttreserved);\n" +
847            "addkeyword('SYSPROC',RW_SYSPROC,ttreserved);\n" +
848            "addkeyword('SYSTEM',RW_SYSTEM,ttreserved);\n" +
849            "addkeyword('SYSTEM_USER',RW_SYSTEM_USER,ttcolumn);\n" +
850            "addkeyword('TABLE',RW_TABLE,ttreserved);\n" +
851            "addkeyword('TABLESAMPLE',RW_TABLESAMPLE,ttcolumn);\n" +
852            "addkeyword('TABLESPACE',RW_TABLESPACE,ttreserved);\n" +
853            "addkeyword('TEMPLATE',RW_TEMPLATE,ttcolumn);\n" +
854            "addkeyword('TEMPORARY',RW_TEMPORARY,ttcolumn);\n" +
855            "addkeyword('TERMINATE',RW_TERMINATE,ttcolumn);\n" +
856            "addkeyword('THEN',RW_THEN,ttreserved);\n" +
857            "addkeyword('THREADSAFE',RW_THREADSAFE,ttcolumn);\n" +
858            "addkeyword('TIME',RW_TIME,ttcolumn);\n" +
859            "addkeyword('TIMEOUT',RW_TIMEOUT,ttcolumn);\n" +
860            "addkeyword('TIMESTAMP',RW_TIMESTAMP,ttcolumn);\n" +
861            "addkeyword('TIMEZONE',RW_TIMEZONE,ttcolumn);\n" +
862            "addkeyword('TO',RW_TO,ttreserved);\n" +
863            "addkeyword('TOKEN',RW_TOKEN,ttcolumn);\n" +
864            "addkeyword('TRAILING',RW_TRAILING,ttcolumn);\n" +
865            "addkeyword('TRANSACTION',RW_TRANSACTION,ttcolumn);\n" +
866            "addkeyword('TRANSFORM',RW_TRANSFORM,ttcolumn);\n" +
867            "addkeyword('TREAT',RW_TREAT,ttcolumn);\n" +
868            "addkeyword('TRIGGER',RW_TRIGGER,ttreserved);\n" +
869            "addkeyword('TRIM',RW_TRIM,ttcolumn);\n" +
870            "addkeyword('TRUNCATE',RW_TRUNCATE,ttreserved);\n" +
871            "addkeyword('TRUSTED',RW_TRUSTED,ttcolumn);\n" +
872            "addkeyword('TYPE',RW_TYPE,ttreserved);\n" +
873            "addkeyword('TYPES',RW_TYPES,ttcolumn);\n" +
874            "addkeyword('UNBOUNDED',RW_UNBOUNDED,ttcolumn);\n" +
875            "addkeyword('UNDO',RW_UNDO,ttreserved);\n" +
876            "addkeyword('UNICODE',RW_UNICODE,ttcolumn);\n" +
877            "addkeyword('UNION',RW_UNION,ttreserved);\n" +
878            "addkeyword('UNIQUE',RW_UNIQUE,ttreserved);\n" +
879            "addkeyword('UNLINK',RW_UNLINK,ttcolumn);\n" +
880            "addkeyword('UNNEST',RW_UNNEST,ttcolumn);\n" +
881            "addkeyword('UNTIL',RW_UNTIL,ttreserved);\n" +
882            "addkeyword('UNUSED',RW_UNUSED,ttcolumn);\n" +
883            "addkeyword('UPDATE',RW_UPDATE,ttreserved);\n" +
884            "addkeyword('UR',RW_UR,ttcolumn);\n" +
885            "addkeyword('URL',RW_URL,ttcolumn);\n" +
886            "addkeyword('USE',RW_USE,ttcolumn);\n" +
887            "addkeyword('USER',RW_USER,ttreserved);\n" +
888            "addkeyword('USING',RW_USING,ttreserved);\n" +
889            "addkeyword('VALIDATE',RW_VALIDATE,ttcolumn);\n" +
890            "addkeyword('VALIDPROC',RW_VALIDPROC,ttreserved);\n" +
891            "addkeyword('VALUE',RW_VALUE,ttreserved);\n" +
892            "addkeyword('VALUES',RW_VALUES,ttreserved);\n" +
893            "addkeyword('VARBINARY',RW_VARBINARY,ttcolumn);\n" +
894            "addkeyword('VARCHAR',RW_VARCHAR,ttcolumn);\n" +
895            "addkeyword('VARCHAR2',RW_VARCHAR2,ttcolumn);\n" +
896            "addkeyword('VARGRAPHIC',RW_VARGRAPHIC,ttcolumn);\n" +
897            "addkeyword('VARIABLE',RW_VARIABLE,ttreserved);\n" +
898            "addkeyword('VARIANT',RW_VARIANT,ttreserved);\n" +
899            "addkeyword('VARYING',RW_VARYING,ttcolumn);\n" +
900            "addkeyword('VCAT',RW_VCAT,ttreserved);\n" +
901            "addkeyword('VIEW',RW_VIEW,ttreserved);\n" +
902            "addkeyword('VOLATILE',RW_VOLATILE,ttreserved);\n" +
903            "addkeyword('VOLUMES',RW_VOLUMES,ttreserved);\n" +
904            "addkeyword('WAIT',RW_WAIT,ttcolumn);\n" +
905            "addkeyword('WHEN',RW_WHEN,ttreserved);\n" +
906            "addkeyword('WHENEVER',RW_WHENEVER,ttreserved);\n" +
907            "addkeyword('WHERE',RW_WHERE,ttreserved);\n" +
908            "addkeyword('WHILE',RW_WHILE,ttreserved);\n" +
909            "addkeyword('WITH',RW_WITH,ttreserved);\n" +
910            "addkeyword('WITHIN',RW_WITHIN,ttcolumn);\n" +
911            "addkeyword('WITHOUT',RW_WITHOUT,ttcolumn);\n" +
912            "addkeyword('WLM',RW_WLM,ttreserved);\n" +
913            "addkeyword('WORK',RW_WORK,ttcolumn);\n" +
914            "addkeyword('WRITE',RW_WRITE,ttcolumn);\n" +
915            "addkeyword('WRKSTNNAME',RW_WRKSTNNAME,ttcolumn);\n" +
916            "addkeyword('XMLATTRIBUTES',RW_XMLATTRIBUTES,ttcolumn);\n" +
917            "addkeyword('XMLCAST',RW_XMLCAST,ttreserved);\n" +
918            "addkeyword('XMLELEMENT',RW_XMLELEMENT,ttcolumn);\n" +
919            "addkeyword('XMLEXISTS',RW_XMLEXISTS,ttreserved);\n" +
920            "addkeyword('XMLNAMESPACES',RW_XMLNAMESPACES,ttreserved);\n" +
921            "addkeyword('XMLQUERY',RW_XMLQUERY,ttcolumn);\n" +
922            "addkeyword('XMLSERIALIZE',RW_XMLSERIALIZE,ttcolumn);\n" +
923            "addkeyword('XMLTABLE',RW_XMLTABLE,ttcolumn);\n" +
924            "addkeyword('YEAR',RW_YEAR,ttreserved);\n" +
925            "addkeyword('YEARS',RW_YEARS,ttreserved);\n" +
926            "addkeyword('YES',RW_YES,ttcolumn);\n" +
927            "addkeyword('ZONE',RW_ZONE,ttreserved);";
928}