diff options
Diffstat (limited to 'demos/sample-files/gram-defs.c')
| -rw-r--r-- | demos/sample-files/gram-defs.c | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/demos/sample-files/gram-defs.c b/demos/sample-files/gram-defs.c index 49329bd..b1ae268 100644 --- a/demos/sample-files/gram-defs.c +++ b/demos/sample-files/gram-defs.c @@ -1,13 +1,13 @@ #include "util/util.h" -#define SYMBOLS(X) \ - X(TERMINAL) X(NONTERM) X(LEFT) X(RIGHT) \ - X(COLON) X(PIPE) X(SEMICOL) X(DOT) \ - X(IDEN) X(NUM) X(ACTION) X(END_INPUT) \ - \ - X(Sp) X(A) X(B) X(C) \ - X(Type) X(Prec) X(Prod) X(Preclist) X(Prodlist) \ - X(Actionlist) X(Idenlist) X(IorNlist) \ - X(SYMBOLS_END) \ +#define SYMBOLS(X) \ + X(TERMINAL) X(NONTERM) X(LEFT) X(RIGHT) X(NOPREC) \ + X(COLON) X(PIPE) X(SEMICOL) X(DOT) \ + X(IDEN) X(NUM) X(ACTION) X(END_INPUT) \ + \ + X(S) X(A) X(B) X(C) \ + X(Type) X(Prec) X(Prod) X(Preclist) X(Prodlist) \ + X(Actionlist) X(Idenlist) X(IorNlist) \ + X(SYMBOLS_END) \ #include "parts/symbol.h" enum symbol { SYMBOLS(X_TO_ENUM) }; @@ -15,20 +15,21 @@ size_t total_symbols = SYMBOLS_END; char **symbol_to_str = (char *([])){ SYMBOLS(X_TO_STR) }; -IMPLEMENT_FUNCPTR(int, symbol_is_terminal, (symbol s)) { return s < Sp; } +IMPLEMENT_FUNCPTR(int, symbol_is_terminal, (symbol s)) { return s < S; } IMPLEMENT_FUNCPTR(int, symbol_is_input_end, (symbol s)) { return s == END_INPUT; } 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(S, -->, 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(B, -->, NOPREC, DOT), "handle_prec(NULL);") \ X(PROD(Preclist, -->, Prec, SEMICOL, Preclist), \ "v = list_new_head(A(2), A(0));") \ X(PROD(Preclist, -->, Prec, DOT), "v = A(0);") \ |
