aboutsummaryrefslogtreecommitdiff
path: root/demos/sample-files/gram-defs.c
diff options
context:
space:
mode:
authorkartofen <kartofen.mail.0@protonmail.com>2025-08-26 01:17:10 +0300
committerkartofen <kartofen.mail.0@protonmail.com>2025-08-26 01:17:10 +0300
commit46e786db9d1b48b8fbc3502e36f093b755f3e09f (patch)
tree9e279216e68f3fe4b0849d1e07184fe674dc551f /demos/sample-files/gram-defs.c
parent1c83c514c8108fccfec9764da5e4563b98eb871b (diff)
grammar for the grammar and lexing and parsing of a new language lbp
Diffstat (limited to 'demos/sample-files/gram-defs.c')
-rw-r--r--demos/sample-files/gram-defs.c23
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);") \