From 5064a7ebce75a26d0405c92040f1a40187fcc7e3 Mon Sep 17 00:00:00 2001 From: kartofen Date: Wed, 2 Jul 2025 22:55:08 +0300 Subject: turn clr into lalr and first steps for generating a parser --- fusion.c | 61 ------------------------------------------------------------- 1 file changed, 61 deletions(-) delete mode 100644 fusion.c (limited to 'fusion.c') diff --git a/fusion.c b/fusion.c deleted file mode 100644 index 3dc7dba..0000000 --- a/fusion.c +++ /dev/null @@ -1,61 +0,0 @@ -#include -#include - -#include "parts/symbol.h" -enum symbol { - PLUS = 0, - MINUS, - LPAREN, - RPAREN, - N0, N1, - END_INPUT, - - EP, E, T, N, - SYMBOLS_END, -}; - -const size_t total_symbols = SYMBOLS_END; - -int symbol_is_terminal(symbol s) { return s < EP; } -int symbol_is_input_end(symbol s) { return s == END_INPUT; } -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)} -struct production grammar[] = { - PROD(EP, ->, E, END_INPUT), - PROD(E, -->, E, PLUS, T), - PROD(E, -->, E, MINUS, T), - PROD(E, -->, T), - PROD(T, -->, LPAREN, E, RPAREN), - PROD(T, -->, N), - PROD(N, -->, N0), - PROD(N, -->, N1), -}; - -const size_t total_productions = sizeof(grammar)/sizeof(*grammar); - -#include "parts/toklist.h" -static symbol toklist[] = {N0, PLUS, N1, MINUS, N0, END_INPUT}; -static symbol *tok = toklist; - -symbol toklist_eat() { return *(tok++); } // unsafe -symbol toklist_peek() { return *tok; } // unsafe - -#include "slr-table.c" -#include "util-tables.c" -#include "lr-parser.c" - -int main(void) -{ - util_tables_fill(); - table_fill(); - - int r = 0; - r = lr_parser(); - - table_free(); - util_tables_free(); - - return r; -} -- cgit v1.2.3