From 1d6f6e7c6a07832b3524871fdec86f5329736598 Mon Sep 17 00:00:00 2001 From: kartofen Date: Sun, 20 Jul 2025 13:02:56 +0300 Subject: fix precedence --- demos/sample-files/calc-defs.c | 13 ++++++------- demos/sample-files/calc-skeleton.c | 2 ++ 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'demos/sample-files') diff --git a/demos/sample-files/calc-defs.c b/demos/sample-files/calc-defs.c index 103b69e..b9d1788 100644 --- a/demos/sample-files/calc-defs.c +++ b/demos/sample-files/calc-defs.c @@ -1,6 +1,6 @@ #include "util/util.h" #define SYMBOLS(X) \ - X(PLUS) X(MINUS) X(TIMES) X(MORE) X(LESS) X(EQUA) \ + X(PLUS) X(MINUS) X(TIMES) X(MORE) X(LESS) X(EQUA) \ X(LPAREN) X(RPAREN) \ X(QMARK) X(COLON) \ X(NUM) X(END_INPUT) \ @@ -61,14 +61,13 @@ struct precedence_def { size_t nlist; }; #define PREC(f, ...) {f, (int[]){__VA_ARGS__}, sizeof((int[]){__VA_ARGS__})/sizeof(int)} -#define USE_PROD(n) (~(n)) struct precedence_def _precedence_defs[] = { - PREC(0, QMARK), - PREC(0, USE_PROD(7)), - PREC(PRECEDENCE_LEFT_ASSOC, MORE, LESS, EQUA), + PREC(PRECEDENCE_LEFT_ASSOC, LPAREN), + PREC(PRECEDENCE_LEFT_ASSOC, TIMES), PREC(PRECEDENCE_LEFT_ASSOC, MINUS, PLUS), - PREC(PRECEDENCE_LEFT_ASSOC, TIMES, USE_PROD(5)), - PREC(PRECEDENCE_LEFT_ASSOC, LPAREN, RPAREN), + PREC(PRECEDENCE_LEFT_ASSOC, MORE, LESS, EQUA), + PREC(0, COLON, ~7), + PREC(0, QMARK), }; struct precedence_def *precedence_defs = _precedence_defs; diff --git a/demos/sample-files/calc-skeleton.c b/demos/sample-files/calc-skeleton.c index 6e5d2d5..ad4aba9 100644 --- a/demos/sample-files/calc-skeleton.c +++ b/demos/sample-files/calc-skeleton.c @@ -7,6 +7,8 @@ #include "bin/calc.h" #include "bin/calc.c" +#include "parts/grammar.h" +#include "parts/precedence.h" #include "parts/toklist.h" static struct token { symbol s; -- cgit v1.2.3