ref: 3ff81f0b0e0ae86bf5401a358d7775038f348c69
parent: ccf46f44ef117d53e4453ddd7bb967c05f7490a3
author: Roberto E. Vargas Caballero <k0ga@shike2.com>
date: Fri Jan 29 05:01:47 EST 2016
[cc2] Add format to the parse table
--- a/cc2/parser.c
+++ b/cc2/parser.c
@@ -32,8 +32,8 @@
typedef void parsefun(char *, union tokenop);
static parsefun type, symbol, getname, unary, binary, ternary, call,
- parameter, constant, composed, begininit, endinit,
- jump, oreturn, loop, assign, ocase, odefault, casetable;
+ parameter, constant, composed, binit, einit,
+ jump, oreturn, loop, assign, ocase, odefault, casetbl;
typedef void evalfun(void);
static evalfun vardecl, beginfun, endfun, endpars, stmt,
@@ -43,91 +43,91 @@
void (*eval)(void);
void (*parse)(char *token, union tokenop);
union tokenop u;
-} optbl[] = {- [AUTO] = {vardecl, symbol, .u.op = AUTO},- [REG] = {vardecl, symbol, .u.op = REG},- [GLOB] = {vardecl, symbol, .u.op = MEM},- [EXTRN] = {vardecl, symbol, .u.op = MEM},- [PRIVAT] = {vardecl, symbol, .u.op = MEM},- [LOCAL] = {vardecl, symbol, .u.op = MEM},- [MEMBER] = {flddecl, symbol},- [LABEL] = {labeldcl, symbol},+} optbl[] = { /* eval parse args */+ [AUTO] = { vardecl, symbol, .u.op = AUTO},+ [REG] = { vardecl, symbol, .u.op = REG},+ [GLOB] = { vardecl, symbol, .u.op = MEM},+ [EXTRN] = { vardecl, symbol, .u.op = MEM},+ [PRIVAT] = { vardecl, symbol, .u.op = MEM},+ [LOCAL] = { vardecl, symbol, .u.op = MEM},+ [MEMBER] = { flddecl, symbol, 0},+ [LABEL] = { labeldcl, symbol, 0},- [INT8] = {NULL, type, .u.arg = &int8type},- [INT16] = {NULL, type, .u.arg = &int16type},- [INT32] = {NULL, type, .u.arg = &int32type},- [INT64] = {NULL, type, .u.arg = &int64type},- [UINT8] = {NULL, type, .u.arg = &uint8type},- [UINT16] = {NULL, type, .u.arg = &uint16type},- [UINT32] = {NULL, type, .u.arg = &uint32type},- [UINT64] = {NULL, type, .u.arg = &uint64type},- [FLOAT] = {NULL, type, .u.arg = &float32type},- [DOUBLE] = {NULL, type, .u.arg = &float64type},- [LDOUBLE] = {NULL, type, .u.arg = &float80type},- [VOID] = {NULL, type, .u.arg = &voidtype},- [BOOL] = {NULL, type, .u.arg = &booltype},- [POINTER] = {NULL, type, .u.arg = &ptrtype},- [ELLIPSIS] = {NULL, type, .u.arg = &elipsistype},+ [INT8] = { NULL, type, .u.arg = &int8type},+ [INT16] = { NULL, type, .u.arg = &int16type},+ [INT32] = { NULL, type, .u.arg = &int32type},+ [INT64] = { NULL, type, .u.arg = &int64type},+ [UINT8] = { NULL, type, .u.arg = &uint8type},+ [UINT16] = { NULL, type, .u.arg = &uint16type},+ [UINT32] = { NULL, type, .u.arg = &uint32type},+ [UINT64] = { NULL, type, .u.arg = &uint64type},+ [FLOAT] = { NULL, type, .u.arg = &float32type},+ [DOUBLE] = { NULL, type, .u.arg = &float64type},+ [LDOUBLE] = { NULL, type, .u.arg = &float80type},+ [VOID] = { NULL, type, .u.arg = &voidtype},+ [BOOL] = { NULL, type, .u.arg = &booltype},+ [POINTER] = { NULL, type, .u.arg = &ptrtype},+ [ELLIPSIS] = { NULL, type, .u.arg = &elipsistype},- [FUNCTION] = {NULL, type, .u.arg = &funtype},- [VECTOR] = {array, composed},- [UNION] = {aggregate, composed},- [STRUCT] = {aggregate, composed},+ [FUNCTION] = { NULL, type, .u.arg = &funtype},+ [VECTOR] = { array,composed, 0},+ [UNION] = {aggregate,composed, 0},+ [STRUCT] = {aggregate,composed, 0},- [ONAME] = {NULL, getname},- ['{'] = {beginfun},- ['}'] = {endfun},- ['('] = {NULL, begininit},- [')'] = {NULL, endinit},- [OEPARS] = {endpars},- [OSTMT] = {stmt},+ [ONAME] = { NULL, getname, 0},+ ['{'] = { beginfun, NULL, 0},+ ['}'] = { endfun, NULL, 0},+ ['('] = { NULL, binit, 0},+ [')'] = { NULL, einit, 0},+ [OEPARS] = { endpars, NULL, 0},+ [OSTMT] = { stmt, NULL, 0},- [OCPL] = {NULL, unary},- [ONEG] = {NULL, unary},- [OADDR] = {NULL, unary},- [OPTR] = {NULL, unary},- [OCAST] = {NULL, unary},- [OPAR ] = {NULL, unary},+ [OCPL] = { NULL, unary, 0},+ [ONEG] = { NULL, unary, 0},+ [OADDR] = { NULL, unary, 0},+ [OPTR] = { NULL, unary, 0},+ [OCAST] = { NULL, unary, 0},+ [OPAR ] = { NULL, unary, 0},- [OAND] = {NULL, binary},- [OOR] = {NULL, binary},- [OFIELD] = {NULL, binary},- [OADD] = {NULL, binary},- [OSUB] = {NULL, binary},- [OMUL] = {NULL, binary},- [OMOD] = {NULL, binary},- [ODIV] = {NULL, binary},- [OSHL] = {NULL, binary},- [OSHR] = {NULL, binary},- [OLT] = {NULL, binary},- [OGT] = {NULL, binary},- [OLE] = {NULL, binary},- [OGE] = {NULL, binary},- [OEQ] = {NULL, binary},- [ONE] = {NULL, binary},- [OBAND] = {NULL, binary},- [OBOR] = {NULL, binary},- [OBXOR] = {NULL, binary},- [OCOMMA] = {NULL, binary},+ [OAND] = { NULL, binary, 0},+ [OOR] = { NULL, binary, 0},+ [OFIELD] = { NULL, binary, 0},+ [OADD] = { NULL, binary, 0},+ [OSUB] = { NULL, binary, 0},+ [OMUL] = { NULL, binary, 0},+ [OMOD] = { NULL, binary, 0},+ [ODIV] = { NULL, binary, 0},+ [OSHL] = { NULL, binary, 0},+ [OSHR] = { NULL, binary, 0},+ [OLT] = { NULL, binary, 0},+ [OGT] = { NULL, binary, 0},+ [OLE] = { NULL, binary, 0},+ [OGE] = { NULL, binary, 0},+ [OEQ] = { NULL, binary, 0},+ [ONE] = { NULL, binary, 0},+ [OBAND] = { NULL, binary, 0},+ [OBOR] = { NULL, binary, 0},+ [OBXOR] = { NULL, binary, 0},+ [OCOMMA] = { NULL, binary, 0},- [OASSIG] = {NULL, assign},- [OASK] = {NULL, ternary},- [OCALL] = {NULL, call},+ [OASSIG] = { NULL, assign, 0},+ [OASK] = { NULL, ternary, 0},+ [OCALL] = { NULL, call, 0},- [OCONST] = NULL, constant,
+ [OCONST] = { NULL,constant, 0},- [OJMP] = NULL, jump,
- [OBRANCH] = NULL, jump,
- [ORET] = NULL, oreturn,
+ [OJMP] = { NULL, jump, 0},+ [OBRANCH] = { NULL, jump, 0},+ [ORET] = { NULL, oreturn, 0},- [OBLOOP] = NULL, loop,
- [OELOOP] = NULL, loop,
+ [OBLOOP] = { NULL, loop, 0},+ [OELOOP] = { NULL, loop, 0},- [OCASE] = NULL, jump,
- [OSWITCH] = NULL, jump,
+ [OCASE] = { NULL, jump, 0},+ [OSWITCH] = { NULL, jump, 0},- [ODEFAULT] = NULL, odefault,
- [OTABLE] = NULL, casetable,
+ [ODEFAULT] = { NULL,odefault, 0},+ [OTABLE] = { NULL, casetbl, 0}};
static Symbol *curfun;
@@ -355,7 +355,7 @@
}
static void
-casetable(char *token, union tokenop u)
+casetbl(char *token, union tokenop u)
{Node *np, *aux;
@@ -432,13 +432,13 @@
}
static void
-begininit(char *token, union tokenop u)
+binit(char *token, union tokenop u)
{ininit = 1;
}
static void
-endinit(char *token, union tokenop u)
+einit(char *token, union tokenop u)
{ininit = 0;
}
--
⑨