GCC Wikia
Advertisement

このページを編集する際は,編集に関する方針に従ってください.[]

概要[]

実装[]

 48 /* The first three groups, apart from '=', can appear in preprocessor
 49    expressions (+= and -= are used to indicate unary + and - resp.).
 50    This allows a lookup table to be implemented in _cpp_parse_expr.
 51 
 52    The first group, to CPP_LAST_EQ, can be immediately followed by an
 53    '='.  The lexer needs operators ending in '=', like ">>=", to be in
 54    the same order as their counterparts without the '=', like ">>".  */
 55 
 56 #define TTYPE_TABLE                                                     \

  • オペレータ

 57   OP(EQ,                "=")                                          \
 58   OP(NOT,               "!")                                         \
 59   OP(GREATER,           ">")     /* compare */                               \
 60   OP(LESS,              "<")                                                \
 61   OP(PLUS,              "+")        /* math */                             \
 62   OP(MINUS,             "-")                                               \
 63   OP(MULT,              "*")                                                \
 64   OP(DIV,               "/")                                         \
 65   OP(MOD,               "%")                                         \
 66   OP(AND,               "&") /* bit ops */                           \
 67   OP(OR,                "|")                                          \
 68   OP(XOR,               "^")                                         \
 69   OP(RSHIFT,            ">>")                                             \
 70   OP(LSHIFT,            "<<")                                             \
 71   OP(MIN,               "<?")        /* extension */                                \
 72   OP(MAX,               ">?")                                                \
 73                                                                         \
 74   OP(COMPL,             "~")                                               \
 75   OP(AND_AND,           "&&")    /* logical */                              \
 76   OP(OR_OR,             "||")                                              \
 77   OP(QUERY,             "?")                                               \
 78   OP(COLON,             ":")                                               \
 79   OP(COMMA,             ",")       /* grouping */                                \
 80   OP(OPEN_PAREN,        "(")                                           \
 81   OP(CLOSE_PAREN,       ")")                                          \
 82   TK(EOF,               NONE)                                                \
 83   OP(EQ_EQ,             "==")      /* compare */                                \
 84   OP(NOT_EQ,            "!=")                                             \
 85   OP(GREATER_EQ,        ">=")                                          \
 86   OP(LESS_EQ,           "<=")                                            \
 87                                                                         \
 88   /* These two are unary + / - in preprocessor expressions.  */         \
 89   OP(PLUS_EQ,           "+=")    /* math */                         \
 90   OP(MINUS_EQ,          "-=")                                           \
 91                                                                         \
 92   OP(MULT_EQ,           "*=")                                            \
 93   OP(DIV_EQ,            "/=")                                             \
 94   OP(MOD_EQ,            "%=")                                             \
 95   OP(AND_EQ,            "&=")     /* bit ops */                               \
 96   OP(OR_EQ,             "|=")                                              \
 97   OP(XOR_EQ,            "^=")                                             \
 98   OP(RSHIFT_EQ,         ">>=")                                         \
 99   OP(LSHIFT_EQ,         "<<=")                                         \
100   OP(MIN_EQ,            "<?=")    /* extension */                            \
101   OP(MAX_EQ,            ">?=")                                            \
102   /* Digraphs together, beginning with CPP_FIRST_DIGRAPH.  */           \
103   OP(HASH,              "#")        /* digraphs */                         \
104   OP(PASTE,             "##")                                              \
105   OP(OPEN_SQUARE,       "[")                                          \
106   OP(CLOSE_SQUARE,      "]")                                         \
107   OP(OPEN_BRACE,        "{")                                           \
108   OP(CLOSE_BRACE,       "}")                                          \
109   /* The remainder of the punctuation.  Order is not significant.  */    \
110   OP(SEMICOLON,         ";")   /* structure */                           \
111   OP(ELLIPSIS,          "...")                                          \
112   OP(PLUS_PLUS,         "++")  /* increment */                          \
113   OP(MINUS_MINUS,       "--")                                         \
114   OP(DEREF,             "->")      /* accessors */                              \
115   OP(DOT,               ".")                                         \
116   OP(SCOPE,             "::")                                              \
117   OP(DEREF_STAR,        "->*")                                         \
118   OP(DOT_STAR,          ".*")                                           \
119   OP(ATSIGN,            "@")  /* used in Objective-C */                   \
120                                                                         \

  • トークン

121   TK(NAME,              IDENT)       /* word */                          \
122   TK(AT_NAME,           IDENT)    /* @word - Objective-C */                \
123   TK(NUMBER,            LITERAL) /* 34_be+ta  */                  \
124                                                                         \
125   TK(CHAR,              LITERAL) /* 'char' */                               \
126   TK(WCHAR,             LITERAL) /* L'char' */                             \
127   TK(OTHER,             LITERAL) /* stray punctuation */           \
128                                                                         \
129   TK(STRING,            LITERAL) /* "string" */                           \
130   TK(WSTRING,           LITERAL) /* L"string" */                 \
131   TK(OBJC_STRING,       LITERAL) /* @"string" - Objective-C */                \
132   TK(HEADER_NAME,       LITERAL) /* <stdio.h> in #include */          \
133                                                                         \
134   TK(COMMENT,           LITERAL) /* Only if output comments.  */ \
135                                  /* SPELL_LITERAL happens to DTRT.  */      \
136   TK(MACRO_ARG,         NONE)   /* Macro argument.  */                  \
137   TK(PRAGMA,            NONE)      /* Only if deferring pragmas */    \
138   TK(PADDING,           NONE)     /* Whitespace for -E.     */


リンク元

Advertisement