00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 # include "lclintMacros.nf"
00029 # include "basic.h"
00030
00031 # include "cgrammar.h"
00032 # include "cgrammar_tokens.h"
00033
00034 bool
00035 lltok_isSemi (lltok tok)
00036 {
00037 return (tok.tok == TSEMI);
00038 }
00039
00040 cstring
00041 lltok_unparse (lltok tok)
00042 {
00043 char *lit;
00044
00045 switch (tok.tok)
00046 {
00047 case BREAK: lit = "break"; break;
00048 case CASE: lit = "case"; break;
00049 case CONTINUE: lit = "continue"; break;
00050 case DEFAULT: lit = "default"; break;
00051 case DO: lit = "do"; break;
00052 case CDOUBLE: lit = "double"; break;
00053 case CELSE: lit = "else"; break;
00054 case CFOR: lit = "for"; break;
00055 case GOTO: lit = "goto"; break;
00056 case CIF: lit = "if"; break;
00057 case RETURN: lit = "return"; break;
00058 case CSIZEOF: lit = "sizeof"; break;
00059 case SWITCH: lit = "switch"; break;
00060 case WHILE: lit = "while"; break;
00061 case CSTRUCT: lit = "struct"; break;
00062 case CTYPEDEF: lit = "typedef"; break;
00063 case CUNION: lit = "union"; break;
00064 case CENUM: lit = "enum"; break;
00065 case QEXTERN: lit = "extern"; break;
00066 case QAUTO: lit = "auto"; break;
00067 case QSTATIC: lit = "static"; break;
00068 case RIGHT_ASSIGN: lit = ">>="; break;
00069 case LEFT_ASSIGN: lit = "<<="; break;
00070 case ADD_ASSIGN: lit = "+="; break;
00071 case SUB_ASSIGN: lit = "-="; break;
00072 case MUL_ASSIGN: lit = "*="; break;
00073 case DIV_ASSIGN: lit = "/="; break;
00074 case MOD_ASSIGN: lit = "%="; break;
00075 case AND_ASSIGN: lit = "&="; break;
00076 case XOR_ASSIGN: lit = "^="; break;
00077 case OR_ASSIGN: lit = "|="; break;
00078 case RIGHT_OP: lit = ">>"; break;
00079 case LEFT_OP: lit = "<<"; break;
00080 case INC_OP: lit = "++"; break;
00081 case DEC_OP: lit = "--"; break;
00082 case ARROW_OP: lit = "->"; break;
00083 case AND_OP: lit = "&&"; break;
00084 case OR_OP: lit = "||"; break;
00085 case LE_OP: lit = "<="; break;
00086 case GE_OP: lit = ">="; break;
00087 case EQ_OP: lit = "=="; break;
00088 case NE_OP: lit = "!="; break;
00089 case TSEMI: lit = ";"; break;
00090 case TLBRACE: lit = "{"; break;
00091 case TRBRACE: lit = "}"; break;
00092 case TCOMMA: lit = ","; break;
00093 case TCOLON: lit = ":"; break;
00094 case TASSIGN: lit = "="; break;
00095 case TLPAREN: lit = "("; break;
00096 case TRPAREN: lit = ")"; break;
00097 case TLSQBR: lit = "["; break;
00098 case TRSQBR: lit = "]"; break;
00099 case TDOT: lit = "."; break;
00100 case TAMPERSAND: lit = "&"; break;
00101 case TEXCL: lit = "!"; break;
00102 case TTILDE: lit = "~"; break;
00103 case TMINUS: lit = "-"; break;
00104 case TPLUS: lit = "+"; break;
00105 case TMULT: lit = "*"; break;
00106 case TDIV: lit = "/"; break;
00107 case TPERCENT: lit = "%"; break;
00108 case TLT: lit = "<"; break;
00109 case TGT: lit = ">"; break;
00110 case TCIRC: lit = "^"; break;
00111 case TBAR: lit = "|"; break;
00112 case TQUEST: lit = "?"; break;
00113 case QOUT: lit = "out"; break;
00114 case QONLY: lit = "only"; break;
00115 case QKEEP: lit = "keep"; break;
00116 case QKEPT: lit = "kept"; break;
00117 case QTEMP: lit = "temp"; break;
00118 case QSHARED: lit = "shared"; break;
00119 case QUNIQUE: lit = "unique"; break;
00120 case QREF: lit = "ref"; break;
00121 case QCHECKED: lit = "checked"; break;
00122 case QCHECKEDSTRICT: lit = "checkedstrict"; break;
00123 case QCHECKMOD: lit = "checkmod"; break;
00124 case QUNCHECKED: lit = "unchecked"; break;
00125 case QTRUENULL: lit = "truenull"; break;
00126 case QFALSENULL: lit = "falsenull"; break;
00127 case QRETURNED: lit = "returned"; break;
00128 case QEXPOSED: lit = "exposed"; break;
00129 case QNULL: lit = "null"; break;
00130 case QRELNULL: lit = "refnull"; break;
00131 case QOBSERVER: lit = "observer"; break;
00132 case QPARTIAL: lit = "partial"; break;
00133 case QSPECIAL: lit = "special"; break;
00134 case QUSES: lit = "uses"; break;
00135 case QDEFINES: lit = "defines"; break;
00136 case QALLOCATES: lit = "allocates"; break;
00137 case QSETS: lit = "sets"; break;
00138 case QRELEASES: lit = "releases"; break;
00139 BADDEFAULT;
00140 }
00141
00142 return cstring_makeLiteralTemp (lit);
00143 }
00144
00145 lltok
00146 lltok_create (int tok, fileloc loc)
00147 {
00148 lltok l;
00149
00150 l.tok = tok;
00151 l.loc = loc;
00152
00153 return (l);
00154 }
00155
00156 void lltok_release (lltok t)
00157 {
00158 fileloc_free (t.loc);
00159 }