/******************************************************************************* * Copyright (c) 2006 Eclipse.org * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.eclipse.gmf.internal.xpand.parser; public class XpandKWLexer extends XpandKWLexerprs implements XpandParsersym { private char[] inputChars; private final int keywordKind[] = new int[47 + 1]; public int[] getKeywordKinds() { return keywordKind; } public int lexer(int curtok, int lasttok) { int current_kind = getKind(inputChars[curtok]), act; for (act = tAction(START_STATE, current_kind); act > NUM_RULES && act < ACCEPT_ACTION; act = tAction(act, current_kind)) { curtok++; current_kind = (curtok > lasttok ? Char_EOF : getKind(inputChars[curtok])); } if (act > ERROR_ACTION) { curtok++; act -= ERROR_ACTION; } return keywordKind[act == ERROR_ACTION || curtok <= lasttok ? 0 : act]; } public void setInputChars(char[] inputChars) { this.inputChars = inputChars; } final static int tokenKind[] = new int[128]; static { tokenKind['a'] = Char_a; tokenKind['b'] = Char_b; tokenKind['c'] = Char_c; tokenKind['d'] = Char_d; tokenKind['e'] = Char_e; tokenKind['f'] = Char_f; tokenKind['g'] = Char_g; tokenKind['h'] = Char_h; tokenKind['i'] = Char_i; tokenKind['j'] = Char_j; tokenKind['k'] = Char_k; tokenKind['l'] = Char_l; tokenKind['m'] = Char_m; tokenKind['n'] = Char_n; tokenKind['o'] = Char_o; tokenKind['p'] = Char_p; tokenKind['q'] = Char_q; tokenKind['r'] = Char_r; tokenKind['s'] = Char_s; tokenKind['t'] = Char_t; tokenKind['u'] = Char_u; tokenKind['v'] = Char_v; tokenKind['w'] = Char_w; tokenKind['x'] = Char_x; tokenKind['y'] = Char_y; tokenKind['z'] = Char_z; tokenKind['A'] = Char_A; tokenKind['B'] = Char_B; tokenKind['C'] = Char_C; tokenKind['D'] = Char_D; tokenKind['E'] = Char_E; tokenKind['F'] = Char_F; tokenKind['G'] = Char_G; tokenKind['H'] = Char_H; tokenKind['I'] = Char_I; tokenKind['J'] = Char_J; tokenKind['K'] = Char_K; tokenKind['L'] = Char_L; tokenKind['M'] = Char_M; tokenKind['N'] = Char_N; tokenKind['O'] = Char_O; tokenKind['P'] = Char_P; tokenKind['Q'] = Char_Q; tokenKind['R'] = Char_R; tokenKind['S'] = Char_S; tokenKind['T'] = Char_T; tokenKind['U'] = Char_U; tokenKind['V'] = Char_V; tokenKind['W'] = Char_W; tokenKind['X'] = Char_X; tokenKind['Y'] = Char_Y; tokenKind['Z'] = Char_Z; }; final int getKind(char c) { return (c < 128 ? tokenKind[c] : 0); } public XpandKWLexer(char[] inputChars, int identifierKind) { this.inputChars = inputChars; keywordKind[0] = identifierKind; // // Rule 1: KeyWord ::= n u l l // keywordKind[1] = (TK_null); // // Rule 2: KeyWord ::= t r u e // keywordKind[2] = (TK_true); // // Rule 3: KeyWord ::= f a l s e // keywordKind[3] = (TK_false); // // Rule 4: KeyWord ::= n e w // keywordKind[4] = (TK_new); // // Rule 5: KeyWord ::= l e t // keywordKind[5] = (TK_let); // // Rule 6: KeyWord ::= s w i t c h // keywordKind[6] = (TK_switch); // // Rule 7: KeyWord ::= c a s e // keywordKind[7] = (TK_case); // // Rule 8: KeyWord ::= d e f a u l t // keywordKind[8] = (TK_default); // // Rule 9: KeyWord ::= i m p l i e s // keywordKind[9] = (TK_implies); // // Rule 10: KeyWord ::= S e t // keywordKind[10] = (TK_Set); // // Rule 11: KeyWord ::= L i s t // keywordKind[11] = (TK_List); // // Rule 12: KeyWord ::= C o l l e c t i o n // keywordKind[12] = (TK_Collection); // // Rule 13: KeyWord ::= f o r A l l // keywordKind[13] = (TK_forAll); // // Rule 14: KeyWord ::= e x i s t s // keywordKind[14] = (TK_exists); // // Rule 15: KeyWord ::= n o t E x i s t s // keywordKind[15] = (TK_notExists); // // Rule 16: KeyWord ::= c o l l e c t // keywordKind[16] = (TK_collect); // // Rule 17: KeyWord ::= s e l e c t // keywordKind[17] = (TK_select); // // Rule 18: KeyWord ::= r e j e c t // keywordKind[18] = (TK_reject); // // Rule 19: KeyWord ::= t y p e S e l e c t // keywordKind[19] = (TK_typeSelect); // // Rule 20: KeyWord ::= I M P O R T // keywordKind[20] = (TK_IMPORT); // // Rule 21: KeyWord ::= E X T E N S I O N // keywordKind[21] = (TK_EXTENSION); // // Rule 22: KeyWord ::= A R O U N D // keywordKind[22] = (TK_AROUND); // // Rule 23: KeyWord ::= E N D A R O U N D // keywordKind[23] = (TK_ENDAROUND); // // Rule 24: KeyWord ::= D E F I N E // keywordKind[24] = (TK_DEFINE); // // Rule 25: KeyWord ::= E N D D E F I N E // keywordKind[25] = (TK_ENDDEFINE); // // Rule 26: KeyWord ::= E R R O R // keywordKind[26] = (TK_ERROR); // // Rule 27: KeyWord ::= E X P A N D // keywordKind[27] = (TK_EXPAND); // // Rule 28: KeyWord ::= F O R // keywordKind[28] = (TK_FOR); // // Rule 29: KeyWord ::= S E P A R A T O R // keywordKind[29] = (TK_SEPARATOR); // // Rule 30: KeyWord ::= A S // keywordKind[30] = (TK_AS); // // Rule 31: KeyWord ::= I T E R A T O R // keywordKind[31] = (TK_ITERATOR); // // Rule 32: KeyWord ::= F O R E A C H // keywordKind[32] = (TK_FOREACH); // // Rule 33: KeyWord ::= E N D F O R E A C H // keywordKind[33] = (TK_ENDFOREACH); // // Rule 34: KeyWord ::= F I L E // keywordKind[34] = (TK_FILE); // // Rule 35: KeyWord ::= E N D F I L E // keywordKind[35] = (TK_ENDFILE); // // Rule 36: KeyWord ::= I F // keywordKind[36] = (TK_IF); // // Rule 37: KeyWord ::= E L S E I F // keywordKind[37] = (TK_ELSEIF); // // Rule 38: KeyWord ::= E L S E // keywordKind[38] = (TK_ELSE); // // Rule 39: KeyWord ::= E N D I F // keywordKind[39] = (TK_ENDIF); // // Rule 40: KeyWord ::= L E T // keywordKind[40] = (TK_LET); // // Rule 41: KeyWord ::= E N D L E T // keywordKind[41] = (TK_ENDLET); // // Rule 42: KeyWord ::= P R O T E C T // keywordKind[42] = (TK_PROTECT); // // Rule 43: KeyWord ::= C S T A R T // keywordKind[43] = (TK_CSTART); // // Rule 44: KeyWord ::= C E N D // keywordKind[44] = (TK_CEND); // // Rule 45: KeyWord ::= I D // keywordKind[45] = (TK_ID); // // Rule 46: KeyWord ::= D I S A B L E // keywordKind[46] = (TK_DISABLE); // // Rule 47: KeyWord ::= E N D P R O T E C T // keywordKind[47] = (TK_ENDPROTECT); for (int i = 0; i < keywordKind.length; i++) { if (keywordKind[i] == 0) keywordKind[i] = identifierKind; } } }