aboutsummaryrefslogtreecommitdiff
path: root/demos/sample-files/gram-defs.c
diff options
context:
space:
mode:
authorkartofen <kartofen.mail.0@protonmail.com>2025-08-03 23:53:24 +0300
committerkartofen <kartofen.mail.0@protonmail.com>2025-08-03 23:53:24 +0300
commit1c83c514c8108fccfec9764da5e4563b98eb871b (patch)
treeccc6657a0b24900a17cf90cfd0676c8123492566 /demos/sample-files/gram-defs.c
parent059ee9afcc575572f87f224c93288e2835cd1a52 (diff)
calc implemented in my grammar
Diffstat (limited to 'demos/sample-files/gram-defs.c')
-rw-r--r--demos/sample-files/gram-defs.c71
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,