[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
lalr: add assertions
From: |
Akim Demaille |
Subject: |
lalr: add assertions |
Date: |
Sun, 8 Nov 2020 08:27:38 +0100 |
An old commit that was sitting in one of my WIP branches. This proved useful
when hacking the construction of the LALR automaton.
commit 0328cbad6408af68a2dd9bd3cbda37d63bcf68e3
Author: Akim Demaille <akim.demaille@gmail.com>
Date: Tue Jun 23 07:33:03 2020 +0200
lalr: add assertions
* src/lalr.c: Remove incorrect comment (subsumed anyway by the
(correct) one in the header.
(set_goto_map): More debug traces.
(map_goto): Add an assertion.
diff --git a/src/lalr.c b/src/lalr.c
index 0f5d7147..941a1d68 100644
--- a/src/lalr.c
+++ b/src/lalr.c
@@ -40,7 +40,6 @@
#include "relation.h"
#include "symtab.h"
-/* goto_map[nterm - NTOKENS] -> number of gotos. */
goto_number *goto_map = NULL;
goto_number ngotos = 0;
state_number *from_state = NULL;
@@ -99,6 +98,8 @@ void
set_goto_map (void)
{
/* Count the number of gotos (ngotos) per nterm (goto_map). */
+ if (trace_flag & trace_automaton)
+ fprintf (stderr, "nnterms: %d\n", nnterms);
goto_map = xcalloc (nnterms + 1, sizeof *goto_map);
ngotos = 0;
for (state_number s = 0; s < nstates; ++s)
@@ -146,11 +147,17 @@ set_goto_map (void)
free (temp_map);
if (trace_flag & trace_automaton)
- for (int i = 0; i < ngotos; ++i)
- {
- goto_print (i, stderr);
- fputc ('\n', stderr);
- }
+ {
+ for (int i = 0; i < nnterms; ++i)
+ fprintf (stderr, "goto_map[%d (%s)] = %ld .. %ld\n",
+ i, symbols[ntokens + i]->tag,
+ goto_map[i], goto_map[i+1] - 1);
+ for (int i = 0; i < ngotos; ++i)
+ {
+ goto_print (i, stderr);
+ fputc ('\n', stderr);
+ }
+ }
}
@@ -158,6 +165,7 @@ goto_number
map_goto (state_number src, symbol_number sym)
{
goto_number low = goto_map[sym - ntokens];
+ assert (goto_map[sym - ntokens] != goto_map[sym - ntokens + 1]);
goto_number high = goto_map[sym - ntokens + 1] - 1;
for (;;)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- lalr: add assertions,
Akim Demaille <=