da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin/*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Glenn Fowler
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * AT&T Research
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * @(#)pp.tab (AT&T Labs Research) 2006-05-09
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * C preprocessor tables and states
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * + marks extensions to the standard
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin *
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin */
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic struct ppkeyword directives[] =
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "define", DEFINE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "elif", ELIF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "else", ELSE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "endif", ENDIF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+endmac", ENDMAC,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "error", ERROR,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "if", IF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "ifdef", IFDEF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "ifndef", IFNDEF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "include", INCLUDE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+let", LET,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "line", LINE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+macdef", MACDEF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "pragma", PRAGMA,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+rename", RENAME,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "undef", UNDEF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+warning", WARNING,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 0, 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic struct ppkeyword options[] =
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "allmultiple", X_ALLMULTIPLE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "allpossible", X_ALLPOSSIBLE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "builtin", X_BUILTIN,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "catliteral", X_CATLITERAL,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "cdir", X_CDIR,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "checkpoint", X_CHECKPOINT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "chop", X_CHOP,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "compatibility", X_COMPATIBILITY,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "debug", X_DEBUG,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "elseif", X_ELSEIF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "externalize", X_EXTERNALIZE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "final", X_FINAL,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "hide", X_HIDE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "headerexpand", X_HEADEREXPAND,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "headerexpandall", X_HEADEREXPANDALL,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "hosted", X_HOSTED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "hostedtransition", X_HOSTEDTRANSITION,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "hostdir", X_HOSTDIR,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "id", X_ID,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "ignore", X_IGNORE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "include", X_INCLUDE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "initial", X_INITIAL,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "keyargs", X_KEYARGS,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "line", X_LINE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "linebase", X_LINEBASE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "linefile", X_LINEFILE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "lineid", X_LINEID,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "linetype", X_LINETYPE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "macref", X_MACREF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "map", X_MAP,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "mapinclude", X_MAPINCLUDE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "modern", X_MODERN,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "multiple", X_MULTIPLE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "native", X_NATIVE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "note", X_NOTE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "opspace", X_OPSPACE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "passthrough", X_PASSTHROUGH,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "pedantic", X_PEDANTIC,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "pluscomment", X_PLUSCOMMENT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "plusplus", X_PLUSPLUS,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "plussplice", X_PLUSSPLICE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "pragmaflags", X_PRAGMAFLAGS,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "pragmaexpand", X_PRAGMAEXPAND,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "predefined", X_PREDEFINED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "prefix", X_PREFIX,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "preserve", X_PRESERVE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "proto", X_PROTO,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "prototyped", X_PROTOTYPED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "quote", X_QUOTE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "readonly", X_READONLY,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "reguard", X_REGUARD,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "reserved", X_RESERVED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "spaceout", X_SPACEOUT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "splicecat", X_SPLICECAT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "splicespace", X_SPLICESPACE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "standard", X_STANDARD,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "statement", X_STATEMENT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "strict", X_STRICT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "stringspan", X_STRINGSPAN,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "stringsplit", X_STRINGSPLIT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "system_header", X_SYSTEM_HEADER,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "test", X_TEST,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "text", X_TEXT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "transition", X_TRANSITION,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "truncate", X_TRUNCATE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "vendor", X_VENDOR,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "version", X_VERSION,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "warn", X_WARN,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "zeof", X_ZEOF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 0, 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic struct ppkeyword predicates[] =
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "defined", X_DEFINED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+exists", X_EXISTS,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+included", X_INCLUDED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+match", X_MATCH,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+noticed", X_NOTICED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+option", X_OPTION,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "sizeof", X_SIZEOF,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+strcmp", X_STRCMP,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 0, 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic struct ppkeyword readonlys[] =
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "defined", R_DEFINED,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 0, 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstatic struct ppkeyword variables[] =
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin{
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "_Pragma", V__PRAGMA,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+ARGC", V_ARGC,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+BASE", V_BASE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "DATE", V_DATE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "FILE", V_FILE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+FUNCTION", V_FUNCTION,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "LINE", V_LINE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+PATH", V_PATH,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+SOURCE", V_SOURCE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-STDC", V_STDC,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "TIME", V_TIME,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "+VERSION", V_VERSION,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-default", V_DEFAULT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-directive", V_DIRECTIVE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-empty", V_EMPTY,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-getenv", V_GETENV,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-getmac", V_GETMAC,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-getopt", V_GETOPT,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-getprd", V_GETPRD,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin "-iterate", V_ITERATE,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin 0, 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin};