diff options
Diffstat (limited to 'demos/sample-files/gram-defs.c')
| -rw-r--r-- | demos/sample-files/gram-defs.c | 71 |
1 files changed, 36 insertions, 35 deletions
diff --git a/demos/sample-files/gram-defs.c b/demos/sample-files/gram-defs.c index b93a950..49329bd 100644 --- a/demos/sample-files/gram-defs.c +++ b/demos/sample-files/gram-defs.c @@ -21,41 +21,42 @@ IMPLEMENT_FUNCPTR(int, symbol_is_valid, (symbol s)) { return s < SYMBOLS_END; } #include "parts/grammar.h" #define PROD(LHS, _, ...) {LHS, (symbol[]){__VA_ARGS__}, sizeof((symbol[]){__VA_ARGS__})/sizeof(symbol)} -#define GRAMMAR_ACTION_DEF(X) \ - X(PROD(Sp, -->, A, B, C, END_INPUT), "") \ - \ - X(PROD(A, -->, TERMINAL, Idenlist, \ - SEMICOL, NONTERM, Idenlist, DOT), "handle_type(A(1), A(4))") \ - \ - X(PROD(B, -->, Preclist), "handle_prec(A(0));") \ - X(PROD(Preclist, -->, Prec, SEMICOL, Preclist), \ - "v = list_new_head(A(2), A(0));") \ - X(PROD(Preclist, -->, Prec, DOT), "v = A(0);") \ - X(PROD(Prec, -->, LEFT, IorNlist), \ - "v = prec_new(A(1), PRECEDENCE_LEFT_ASSOC);") \ - X(PROD(Prec, -->, RIGHT, IorNlist), \ - "v = prec_new(A(1), PRECEDENCE_RIGHT_ASSOC);") \ - \ - X(PROD(C, -->, Prodlist), "handle_prod(A(0));") \ - X(PROD(Prodlist, -->, Prod, SEMICOL, Prodlist), \ - "v = list_new_head(A(2), A(0));") \ - X(PROD(Prodlist, -->, Prod, DOT), "v = A(0);") \ - X(PROD(Prod, -->, IDEN, COLON, Actionlist), \ - "v = prod_new(A(0), A(2));") \ - X(PROD(Actionlist, -->, Idenlist, ACTION, PIPE, Actionlist), \ - "v = list_new_head(A(3), action_new(A(0), A(1)));") \ - X(PROD(Actionlist, -->, Idenlist, ACTION), \ - "v = action_new(A(0), A(1));") \ - \ - X(PROD(Idenlist, -->, IDEN, Idenlist), \ - "v = list_new_head(A(1), ptr_new(A(0)));") \ - X(PROD(Idenlist, -->, IDEN), "v = ptr_new(A(0));") \ - X(PROD(IorNlist, -->, IDEN, IorNlist), \ - "v = list_new_head(A(1), ptr_new(A(0)));") \ - X(PROD(IorNlist, -->, IDEN), "v = ptr_new(A(0));") \ - X(PROD(IorNlist, -->, NUM, IorNlist), \ - "v = list_new_head(A(1), num_new(A(0)));") \ - X(PROD(IorNlist, -->, NUM), "v = num_new(A(0));") \ +#define GRAMMAR_ACTION_DEF(X) \ + X(PROD(Sp, -->, A, B, C, END_INPUT), "") \ + \ + X(PROD(A, -->, TERMINAL, Idenlist, \ + SEMICOL, NONTERM, Idenlist, DOT), \ + "handle_type(A(1), A(4))") \ + \ + X(PROD(B, -->, Preclist), "handle_prec(A(0));") \ + X(PROD(Preclist, -->, Prec, SEMICOL, Preclist), \ + "v = list_new_head(A(2), A(0));") \ + X(PROD(Preclist, -->, Prec, DOT), "v = A(0);") \ + X(PROD(Prec, -->, LEFT, IorNlist), \ + "v = prec_new(A(1), PRECEDENCE_LEFT_ASSOC);") \ + X(PROD(Prec, -->, RIGHT, IorNlist), \ + "v = prec_new(A(1), PRECEDENCE_RIGHT_ASSOC);") \ + \ + X(PROD(C, -->, Prodlist), "handle_prod(A(0));") \ + X(PROD(Prodlist, -->, Prod, SEMICOL, Prodlist), \ + "v = list_new_head(A(2), A(0));") \ + X(PROD(Prodlist, -->, Prod, DOT), "v = A(0);") \ + X(PROD(Prod, -->, IDEN, COLON, Actionlist), \ + "v = prod_new(A(0), A(2));") \ + X(PROD(Actionlist, -->, Idenlist, ACTION, PIPE, Actionlist), \ + "v = list_new_head(A(3), action_new(A(0), A(1)));") \ + X(PROD(Actionlist, -->, Idenlist, ACTION), \ + "v = action_new(A(0), A(1));") \ + \ + X(PROD(Idenlist, -->, IDEN, Idenlist), \ + "v = list_new_head(A(1), ptr_new(A(0)));") \ + X(PROD(Idenlist, -->, IDEN), "v = ptr_new(A(0));") \ + X(PROD(IorNlist, -->, IDEN, IorNlist), \ + "v = list_new_head(A(1), ptr_new(A(0)));") \ + X(PROD(IorNlist, -->, IDEN), "v = ptr_new(A(0));") \ + X(PROD(IorNlist, -->, NUM, IorNlist), \ + "v = list_new_head(A(1), num_new(A(0)));") \ + X(PROD(IorNlist, -->, NUM), "v = num_new(A(0));") \ #define X_GRAMMAR(G, A) G, #define X_ACTION(G, A) A, |
