aboutsummaryrefslogtreecommitdiff
path: root/parts/grammar.h
diff options
context:
space:
mode:
authorkartofen <mladenovnasko0@gmail.com>2025-07-09 22:49:24 +0300
committerkartofen <mladenovnasko0@gmail.com>2025-07-09 22:49:24 +0300
commitd69d2e7a7e09c4f08cd416241e2f2d9dc7d7d05f (patch)
treed8b32a0749e79ddc79ce998a382ee7dc06f0a175 /parts/grammar.h
parent2c85f2d087b9b2f3922b856beed4e2dd5b0fc126 (diff)
untested precednece lol
Diffstat (limited to 'parts/grammar.h')
-rw-r--r--parts/grammar.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/parts/grammar.h b/parts/grammar.h
index d1bf176..4505b1a 100644
--- a/parts/grammar.h
+++ b/parts/grammar.h
@@ -3,10 +3,20 @@
#include <stddef.h> // size_t
+enum precedence_flag {
+ PRECEDENCE_NO_ASSOC,
+ PRECEDENCE_RIGHT_ASSOC,
+ PRECEDENCE_LEFT_ASSOC,
+};
+
+#define PRECEDENCE_NUM(prec) ((prec) >> 2)
+#define PRECEDENCE_FLAG(prec) ((prec) & 0x3)
+
extern struct production {
symbol LHS;
symbol *RHS;
size_t nRHS;
+ unsigned int precedence;
} *grammar;
extern size_t total_productions;
@@ -29,7 +39,7 @@ void grammar_print_cstyle()
printf("{%d, (symbol[]){", grammar[i].LHS);
for(size_t j = 0; j < grammar[i].nRHS; j++)
printf("%d, ", grammar[i].RHS[j]);
- printf("}, %zu},\n", grammar[i].nRHS);
+ printf("}, %zu, %d},\n", grammar[i].nRHS, grammar[i].precedence);
}
}