commit 3ff81f0b0e0ae86bf5401a358d7775038f348c69
parent ccf46f44ef117d53e4453ddd7bb967c05f7490a3
Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
Date: Fri, 29 Jan 2016 10:01:47 +0100
[cc2] Add format to the parse table
Diffstat:
M | cc2/parser.c | | | 180 | ++++++++++++++++++++++++++++++++++++++++---------------------------------------- |
1 file changed, 90 insertions(+), 90 deletions(-)
diff --git a/cc2/parser.c b/cc2/parser.c
@@ -32,8 +32,8 @@ union tokenop {
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 @@ static struct decoc {
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},
-
- [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},
-
- [ONAME] = {NULL, getname},
- ['{'] = {beginfun},
- ['}'] = {endfun},
- ['('] = {NULL, begininit},
- [')'] = {NULL, endinit},
- [OEPARS] = {endpars},
- [OSTMT] = {stmt},
-
- [OCPL] = {NULL, unary},
- [ONEG] = {NULL, unary},
- [OADDR] = {NULL, unary},
- [OPTR] = {NULL, unary},
- [OCAST] = {NULL, unary},
- [OPAR ] = {NULL, unary},
-
- [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},
-
- [OASSIG] = {NULL, assign},
- [OASK] = {NULL, ternary},
- [OCALL] = {NULL, call},
-
- [OCONST] = NULL, constant,
-
- [OJMP] = NULL, jump,
- [OBRANCH] = NULL, jump,
- [ORET] = NULL, oreturn,
-
- [OBLOOP] = NULL, loop,
- [OELOOP] = NULL, loop,
-
- [OCASE] = NULL, jump,
- [OSWITCH] = NULL, jump,
-
- [ODEFAULT] = NULL, odefault,
- [OTABLE] = NULL, casetable,
+} 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},
+
+ [FUNCTION] = { NULL, type, .u.arg = &funtype},
+ [VECTOR] = { array,composed, 0},
+ [UNION] = {aggregate,composed, 0},
+ [STRUCT] = {aggregate,composed, 0},
+
+ [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, 0},
+ [ONEG] = { NULL, unary, 0},
+ [OADDR] = { NULL, unary, 0},
+ [OPTR] = { NULL, unary, 0},
+ [OCAST] = { NULL, unary, 0},
+ [OPAR ] = { NULL, unary, 0},
+
+ [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, 0},
+ [OASK] = { NULL, ternary, 0},
+ [OCALL] = { NULL, call, 0},
+
+ [OCONST] = { NULL,constant, 0},
+
+ [OJMP] = { NULL, jump, 0},
+ [OBRANCH] = { NULL, jump, 0},
+ [ORET] = { NULL, oreturn, 0},
+
+ [OBLOOP] = { NULL, loop, 0},
+ [OELOOP] = { NULL, loop, 0},
+
+ [OCASE] = { NULL, jump, 0},
+ [OSWITCH] = { NULL, jump, 0},
+
+ [ODEFAULT] = { NULL,odefault, 0},
+ [OTABLE] = { NULL, casetbl, 0}
};
static Symbol *curfun;
@@ -355,7 +355,7 @@ jump(char *token, union tokenop u)
}
static void
-casetable(char *token, union tokenop u)
+casetbl(char *token, union tokenop u)
{
Node *np, *aux;
@@ -432,13 +432,13 @@ binary(char *token, union tokenop u)
}
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;
}