blob: 0234fc794fcca47dd49529e5756943b17eeaf01e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.core.lrparser.xlc;
import static org.eclipse.cdt.core.parser.IToken.tAMPER;
import static org.eclipse.cdt.core.parser.IToken.tAMPERASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tAND;
import static org.eclipse.cdt.core.parser.IToken.tARROW;
import static org.eclipse.cdt.core.parser.IToken.tASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tBITCOMPLEMENT;
import static org.eclipse.cdt.core.parser.IToken.tBITOR;
import static org.eclipse.cdt.core.parser.IToken.tBITORASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tCHAR;
import static org.eclipse.cdt.core.parser.IToken.tCOLON;
import static org.eclipse.cdt.core.parser.IToken.tCOMMA;
import static org.eclipse.cdt.core.parser.IToken.tCOMPLETION;
import static org.eclipse.cdt.core.parser.IToken.tDECR;
import static org.eclipse.cdt.core.parser.IToken.tDIV;
import static org.eclipse.cdt.core.parser.IToken.tDIVASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tDOT;
import static org.eclipse.cdt.core.parser.IToken.tELLIPSIS;
import static org.eclipse.cdt.core.parser.IToken.tEND_OF_INPUT;
import static org.eclipse.cdt.core.parser.IToken.tEOC;
import static org.eclipse.cdt.core.parser.IToken.tEQUAL;
import static org.eclipse.cdt.core.parser.IToken.tFLOATINGPT;
import static org.eclipse.cdt.core.parser.IToken.tGT;
import static org.eclipse.cdt.core.parser.IToken.tGTEQUAL;
import static org.eclipse.cdt.core.parser.IToken.tIDENTIFIER;
import static org.eclipse.cdt.core.parser.IToken.tINCR;
import static org.eclipse.cdt.core.parser.IToken.tINTEGER;
import static org.eclipse.cdt.core.parser.IToken.tLBRACE;
import static org.eclipse.cdt.core.parser.IToken.tLBRACKET;
import static org.eclipse.cdt.core.parser.IToken.tLCHAR;
import static org.eclipse.cdt.core.parser.IToken.tLPAREN;
import static org.eclipse.cdt.core.parser.IToken.tLSTRING;
import static org.eclipse.cdt.core.parser.IToken.tLT;
import static org.eclipse.cdt.core.parser.IToken.tLTEQUAL;
import static org.eclipse.cdt.core.parser.IToken.tMINUS;
import static org.eclipse.cdt.core.parser.IToken.tMINUSASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tMOD;
import static org.eclipse.cdt.core.parser.IToken.tMODASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tNOT;
import static org.eclipse.cdt.core.parser.IToken.tNOTEQUAL;
import static org.eclipse.cdt.core.parser.IToken.tOR;
import static org.eclipse.cdt.core.parser.IToken.tPLUS;
import static org.eclipse.cdt.core.parser.IToken.tPLUSASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tQUESTION;
import static org.eclipse.cdt.core.parser.IToken.tRBRACE;
import static org.eclipse.cdt.core.parser.IToken.tRBRACKET;
import static org.eclipse.cdt.core.parser.IToken.tRPAREN;
import static org.eclipse.cdt.core.parser.IToken.tSEMI;
import static org.eclipse.cdt.core.parser.IToken.tSHIFTL;
import static org.eclipse.cdt.core.parser.IToken.tSHIFTLASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tSHIFTR;
import static org.eclipse.cdt.core.parser.IToken.tSHIFTRASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tSTAR;
import static org.eclipse.cdt.core.parser.IToken.tSTARASSIGN;
import static org.eclipse.cdt.core.parser.IToken.tSTRING;
import static org.eclipse.cdt.core.parser.IToken.tUNKNOWN_CHAR;
import static org.eclipse.cdt.core.parser.IToken.tUTF16CHAR;
import static org.eclipse.cdt.core.parser.IToken.tUTF16STRING;
import static org.eclipse.cdt.core.parser.IToken.tUTF32CHAR;
import static org.eclipse.cdt.core.parser.IToken.tUTF32STRING;
import static org.eclipse.cdt.core.parser.IToken.tXOR;
import static org.eclipse.cdt.core.parser.IToken.tXORASSIGN;
import static org.eclipse.cdt.core.parser.IToken.t__Bool;
import static org.eclipse.cdt.core.parser.IToken.t__Complex;
import static org.eclipse.cdt.core.parser.IToken.t__Imaginary;
import static org.eclipse.cdt.core.parser.IToken.t_asm;
import static org.eclipse.cdt.core.parser.IToken.t_auto;
import static org.eclipse.cdt.core.parser.IToken.t_break;
import static org.eclipse.cdt.core.parser.IToken.t_case;
import static org.eclipse.cdt.core.parser.IToken.t_char;
import static org.eclipse.cdt.core.parser.IToken.t_const;
import static org.eclipse.cdt.core.parser.IToken.t_continue;
import static org.eclipse.cdt.core.parser.IToken.t_default;
import static org.eclipse.cdt.core.parser.IToken.t_do;
import static org.eclipse.cdt.core.parser.IToken.t_double;
import static org.eclipse.cdt.core.parser.IToken.t_else;
import static org.eclipse.cdt.core.parser.IToken.t_enum;
import static org.eclipse.cdt.core.parser.IToken.t_extern;
import static org.eclipse.cdt.core.parser.IToken.t_float;
import static org.eclipse.cdt.core.parser.IToken.t_for;
import static org.eclipse.cdt.core.parser.IToken.t_goto;
import static org.eclipse.cdt.core.parser.IToken.t_if;
import static org.eclipse.cdt.core.parser.IToken.t_inline;
import static org.eclipse.cdt.core.parser.IToken.t_int;
import static org.eclipse.cdt.core.parser.IToken.t_long;
import static org.eclipse.cdt.core.parser.IToken.t_register;
import static org.eclipse.cdt.core.parser.IToken.t_restrict;
import static org.eclipse.cdt.core.parser.IToken.t_return;
import static org.eclipse.cdt.core.parser.IToken.t_short;
import static org.eclipse.cdt.core.parser.IToken.t_signed;
import static org.eclipse.cdt.core.parser.IToken.t_sizeof;
import static org.eclipse.cdt.core.parser.IToken.t_static;
import static org.eclipse.cdt.core.parser.IToken.t_struct;
import static org.eclipse.cdt.core.parser.IToken.t_switch;
import static org.eclipse.cdt.core.parser.IToken.t_typedef;
import static org.eclipse.cdt.core.parser.IToken.t_union;
import static org.eclipse.cdt.core.parser.IToken.t_unsigned;
import static org.eclipse.cdt.core.parser.IToken.t_void;
import static org.eclipse.cdt.core.parser.IToken.t_volatile;
import static org.eclipse.cdt.core.parser.IToken.t_while;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_And;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_AndAnd;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_AndAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Arrow;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Assign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Bang;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Caret;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_CaretAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Colon;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Comma;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Completion;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Dot;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_DotDotDot;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_EOF_TOKEN;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_EQ;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_EndOfCompletion;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_GE;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_GT;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Invalid;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_LE;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_LT;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_LeftBrace;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_LeftBracket;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_LeftParen;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_LeftShift;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_LeftShiftAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_MAX;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_MIN;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Minus;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_MinusAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_MinusMinus;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_NE;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Or;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_OrAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_OrOr;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Percent;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_PercentAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Plus;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_PlusAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_PlusPlus;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Question;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_RightBrace;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_RightBracket;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_RightParen;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_RightShift;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_RightShiftAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_SemiColon;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Slash;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_SlashAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Star;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_StarAssign;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_Tilde;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK__Bool;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK__Complex;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK__Imaginary;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK___alignof__;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK___attribute__;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK___declspec;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_asm;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_auto;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_break;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_case;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_char;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_charconst;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_const;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_continue;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_default;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_do;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_double;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_else;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_enum;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_extern;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_float;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_floating;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_for;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_goto;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_identifier;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_if;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_inline;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_int;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_integer;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_long;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_register;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_restrict;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_return;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_short;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_signed;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_sizeof;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_static;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_stringlit;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_struct;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_switch;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_typedef;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_typeof;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_union;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_unsigned;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_void;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_volatile;
import static org.eclipse.cdt.internal.core.lrparser.xlc.c.XlcCParsersym.TK_while;
import org.eclipse.cdt.core.dom.lrparser.IDOMTokenMap;
import org.eclipse.cdt.core.parser.IGCCToken;
import org.eclipse.cdt.core.parser.IToken;
/**
* Maps tokens types returned by CPreprocessor to token types
* expected by the C99 parser.
*
* @author Mike Kucera
*/
public final class XlcCTokenMap implements IDOMTokenMap {
private final XlcKeywords keywordMap;
public XlcCTokenMap(boolean supportVectors, boolean supportDecimalFloatingPoint) {
keywordMap = XlcKeywords.createC(supportVectors, supportDecimalFloatingPoint);
}
@Override
public int getEOFTokenKind() {
return TK_EOF_TOKEN;
}
@Override
public int getEOCTokenKind() {
return TK_EndOfCompletion;
}
@Override
public int mapKind(IToken token) {
switch (token.getType()) {
case tIDENTIFIER:
Integer keywordKind = keywordMap.getTokenKind(token.getCharImage());
return keywordKind == null ? TK_identifier : keywordKind;
case tINTEGER:
return TK_integer;
case tCOLON:
return TK_Colon;
case tSEMI:
return TK_SemiColon;
case tCOMMA:
return TK_Comma;
case tQUESTION:
return TK_Question;
case tLPAREN:
return TK_LeftParen;
case tRPAREN:
return TK_RightParen;
case tLBRACKET:
return TK_LeftBracket;
case tRBRACKET:
return TK_RightBracket;
case tLBRACE:
return TK_LeftBrace;
case tRBRACE:
return TK_RightBrace;
case tPLUSASSIGN:
return TK_PlusAssign;
case tINCR:
return TK_PlusPlus;
case tPLUS:
return TK_Plus;
case tMINUSASSIGN:
return TK_MinusAssign;
case tDECR:
return TK_MinusMinus;
case tARROW:
return TK_Arrow;
case tMINUS:
return TK_Minus;
case tSTARASSIGN:
return TK_StarAssign;
case tSTAR:
return TK_Star;
case tMODASSIGN:
return TK_PercentAssign;
case tMOD:
return TK_Percent;
case tXORASSIGN:
return TK_CaretAssign;
case tXOR:
return TK_Caret;
case tAMPERASSIGN:
return TK_AndAssign;
case tAND:
return TK_AndAnd;
case tAMPER:
return TK_And;
case tBITORASSIGN:
return TK_OrAssign;
case tOR:
return TK_OrOr;
case tBITOR:
return TK_Or;
case tBITCOMPLEMENT:
return TK_Tilde;
case tNOTEQUAL:
return TK_NE;
case tNOT:
return TK_Bang;
case tEQUAL:
return TK_EQ;
case tASSIGN:
return TK_Assign;
case tUNKNOWN_CHAR:
return TK_Invalid;
case tSHIFTL:
return TK_LeftShift;
case tLTEQUAL:
return TK_LE;
case tLT:
return TK_LT;
case tSHIFTRASSIGN:
return TK_RightShiftAssign;
case tSHIFTR:
return TK_RightShift;
case tGTEQUAL:
return TK_GE;
case tGT:
return TK_GT;
case tSHIFTLASSIGN:
return TK_LeftShiftAssign;
case tELLIPSIS:
return TK_DotDotDot;
case tDOT:
return TK_Dot;
case tDIVASSIGN:
return TK_SlashAssign;
case tDIV:
return TK_Slash;
case t_auto:
return TK_auto;
case t_break:
return TK_break;
case t_case:
return TK_case;
case t_char:
return TK_char;
case t_const:
return TK_const;
case t_continue:
return TK_continue;
case t_default:
return TK_default;
case t_do:
return TK_do;
case t_double:
return TK_double;
case t_else:
return TK_else;
case t_enum:
return TK_enum;
case t_extern:
return TK_extern;
case t_float:
return TK_float;
case t_for:
return TK_for;
case t_goto:
return TK_goto;
case t_if:
return TK_if;
case t_inline:
return TK_inline;
case t_int:
return TK_int;
case t_long:
return TK_long;
case t_register:
return TK_register;
case t_return:
return TK_return;
case t_short:
return TK_short;
case t_sizeof:
return TK_sizeof;
case t_static:
return TK_static;
case t_signed:
return TK_signed;
case t_struct:
return TK_struct;
case t_switch:
return TK_switch;
case t_typedef:
return TK_typedef;
case t_union:
return TK_union;
case t_unsigned:
return TK_unsigned;
case t_void:
return TK_void;
case t_volatile:
return TK_volatile;
case t_while:
return TK_while;
case tFLOATINGPT:
return TK_floating;
case tSTRING:
return TK_stringlit;
case tLSTRING:
return TK_stringlit;
case tUTF16STRING:
return TK_stringlit;
case tUTF32STRING:
return TK_stringlit;
case tCHAR:
return TK_charconst;
case tLCHAR:
return TK_charconst;
case tUTF16CHAR:
return TK_charconst;
case tUTF32CHAR:
return TK_charconst;
case t__Bool:
return TK__Bool;
case t__Complex:
return TK__Complex;
case t__Imaginary:
return TK__Imaginary;
case t_restrict:
return TK_restrict;
case tCOMPLETION:
return TK_Completion;
case tEOC:
return TK_EndOfCompletion;
case tEND_OF_INPUT:
return TK_EOF_TOKEN;
case IGCCToken.t_typeof:
return TK_typeof;
case IGCCToken.t___alignof__:
return TK___alignof__;
case IGCCToken.tMAX:
return TK_MAX;
case IGCCToken.tMIN:
return TK_MIN;
case IGCCToken.t__attribute__:
return TK___attribute__;
case IGCCToken.t__declspec:
return TK___declspec;
case t_asm:
return TK_asm;
default:
assert false : "token not recognized by the XLC parser: " + token.getType(); //$NON-NLS-1$
return TK_Invalid;
}
}
}