package xtc.lang.cpp; import xtc.lang.cpp.Syntax.Layout; import xtc.lang.cpp.Syntax.PreprocessorTag; import xtc.lang.cpp.Syntax.Language; public enum CTag implements xtc.lang.cpp.Syntax.LanguageTag { AUTO(getID("AUTO"), "auto"), BREAK(getID("BREAK"), "break"), CASE(getID("CASE"), "case"), CHAR(getID("CHAR"), "char"), CONST(getID("CONST"), "const"), CONTINUE(getID("CONTINUE"), "continue"), DEFAULT(getID("DEFAULT"), "default"), DO(getID("DO"), "do"), DOUBLE(getID("DOUBLE"), "double"), ELSE(getID("ELSE"), "else"), ENUM(getID("ENUM"), "enum"), EXTERN(getID("EXTERN"), "extern"), FLOAT(getID("FLOAT"), "float"), FOR(getID("FOR"), "for"), GOTO(getID("GOTO"), "goto"), IF(getID("IF"), "if"), INT(getID("INT"), "int"), LONG(getID("LONG"), "long"), REGISTER(getID("REGISTER"), "register"), RETURN(getID("RETURN"), "return"), SHORT(getID("SHORT"), "short"), SIGNED(getID("SIGNED"), "signed"), SIZEOF(getID("SIZEOF"), "sizeof"), STATIC(getID("STATIC"), "static"), STRUCT(getID("STRUCT"), "struct"), SWITCH(getID("SWITCH"), "switch"), TYPEDEF(getID("TYPEDEF"), "typedef"), UNION(getID("UNION"), "union"), UNSIGNED(getID("UNSIGNED"), "unsigned"), VOID(getID("VOID"), "void"), VOLATILE(getID("VOLATILE"), "volatile"), WHILE(getID("WHILE"), "while"), _BOOL(getID("_BOOL"), "_Bool"), _COMPLEX(getID("_COMPLEX"), "_Complex"), INLINE(getID("INLINE"), "inline"), RESTRICT(getID("RESTRICT"), "restrict"), __ALIGNOF(getID("__ALIGNOF"), "__alignof"), __ALIGNOF__(getID("__ALIGNOF__"), "__alignof__"), ASM(getID("ASM"), "asm"), __ASM(getID("__ASM"), "__asm"), __ASM__(getID("__ASM__"), "__asm__"), __ATTRIBUTE(getID("__ATTRIBUTE"), "__attribute"), __ATTRIBUTE__(getID("__ATTRIBUTE__"), "__attribute__"), __BUILTIN_OFFSETOF(getID("__BUILTIN_OFFSETOF"), "__builtin_offsetof"), __BUILTIN_TYPES_COMPATIBLE_P(getID("__BUILTIN_TYPES_COMPATIBLE_P"), "__builtin_types_compatible_p"), __BUILTIN_VA_ARG(getID("__BUILTIN_VA_ARG"), "__builtin_va_arg"), __BUILTIN_VA_LIST(getID("__BUILTIN_VA_LIST"), "__builtin_va_list"), __COMPLEX__(getID("__COMPLEX__"), "__complex__"), __CONST(getID("__CONST"), "__const"), __CONST__(getID("__CONST__"), "__const__"), __EXTENSION__(getID("__EXTENSION__"), "__extension__"), __INLINE(getID("__INLINE"), "__inline"), __INLINE__(getID("__INLINE__"), "__inline__"), __LABEL__(getID("__LABEL__"), "__label__"), __RESTRICT(getID("__RESTRICT"), "__restrict"), __RESTRICT__(getID("__RESTRICT__"), "__restrict__"), __SIGNED(getID("__SIGNED"), "__signed"), __SIGNED__(getID("__SIGNED__"), "__signed__"), __THREAD(getID("__THREAD"), "__thread"), TYPEOF(getID("TYPEOF"), "typeof"), __TYPEOF(getID("__TYPEOF"), "__typeof"), __TYPEOF__(getID("__TYPEOF__"), "__typeof__"), __VOLATILE(getID("__VOLATILE"), "__volatile"), __VOLATILE__(getID("__VOLATILE__"), "__volatile__"), IDENTIFIER(getID("IDENTIFIER"), null, true), INTEGERconstant(getID("INTEGERconstant"), null, false), OCTALconstant(getID("OCTALconstant"), null, false), HEXconstant(getID("HEXconstant"), null, false), FLOATINGconstant(getID("FLOATINGconstant"), null, false), PPNUM(getID("PPNUM"), null, false), CHARACTERconstant(getID("CHARACTERconstant"), null, false), STRINGliteral(getID("STRINGliteral"), null, false), ARROW(getID("ARROW"), "->"), ICR(getID("ICR"), "++"), DECR(getID("DECR"), "--"), LS(getID("LS"), "<<"), RS(getID("RS"), ">>"), LE(getID("LE"), "<="), GE(getID("GE"), ">="), EQ(getID("EQ"), "=="), NE(getID("NE"), "!="), ANDAND(getID("ANDAND"), "&&"), OROR(getID("OROR"), "||"), PLUSassign(getID("PLUSassign"), "+="), MINUSassign(getID("MINUSassign"), "-="), MULTassign(getID("MULTassign"), "*="), DIVassign(getID("DIVassign"), "/="), MODassign(getID("MODassign"), "%="), LSassign(getID("LSassign"), "<<="), RSassign(getID("RSassign"), ">>="), ANDassign(getID("ANDassign"), "&="), ERassign(getID("ERassign"), "^="), ORassign(getID("ORassign"), "|="), LPAREN(getID("LPAREN"), "(", PreprocessorTag.OPEN_PAREN), RPAREN(getID("RPAREN"), ")", PreprocessorTag.CLOSE_PAREN), COMMA(getID("COMMA"), ",", PreprocessorTag.COMMA), HASH(getID("HASH"), "#", PreprocessorTag.HASH), DHASH(getID("DHASH"), "##", PreprocessorTag.DOUBLE_HASH), ELLIPSIS(getID("ELLIPSIS"), "...", PreprocessorTag.ELLIPSIS), LBRACE(getID("LBRACE"), "{"), RBRACE(getID("RBRACE"), "}"), LBRACK(getID("LBRACK"), "["), RBRACK(getID("RBRACK"), "]"), DOT(getID("DOT"), "."), AND(getID("AND"), "&"), STAR(getID("STAR"), "*"), PLUS(getID("PLUS"), "+"), MINUS(getID("MINUS"), "-"), NEGATE(getID("NEGATE"), "~"), NOT(getID("NOT"), "!"), DIV(getID("DIV"), "/"), MOD(getID("MOD"), "%"), LT(getID("LT"), "<"), GT(getID("GT"), ">"), XOR(getID("XOR"), "^"), PIPE(getID("PIPE"), "|"), QUESTION(getID("QUESTION"), "?"), COLON(getID("COLON"), ":"), SEMICOLON(getID("SEMICOLON"), ";"), ASSIGN(getID("ASSIGN"), "="), AT(getID("AT"), "@"), USD(getID("USD"), "$"), TYPEDEFname(getID("TYPEDEFname"), null, true); private final int id; private final String text; private final boolean hasName; private final PreprocessorTag ppTag; CTag(int id, String text, boolean hasName, PreprocessorTag ppTag) { this.id = id; this.text = text; this.hasName = hasName; this.ppTag = ppTag; } CTag(int id, String text, boolean hasName) { this(id, text, hasName, PreprocessorTag.NONE); } CTag(int id, String text) { this(id, text, isName(text), PreprocessorTag.NONE); } CTag(int id, String text, PreprocessorTag ppTag) { this(id, text, isName(text), ppTag); } public int getID() { return id; } public String getText() { return text; } public boolean hasName() { return hasName; } public PreprocessorTag ppTag() { return ppTag; } static boolean isName(String name) { if (null == name || name.length() == 0) return false; return Character.isLetter(name.charAt(0)) || '_' == name.charAt(0); } static int getID(String token) { for (int id = 0; id < ForkMergeParserTables.YYNTOKENS; id++) { if (ForkMergeParserTables.yytname.table[id].equals(token)) { return id; } } System.err.println("error: invalid token name"); System.exit(1); return -1; } }