diff --git a/src/backends/llk.c b/src/backends/llk.c index 176541a4da748a0a9de355fd84ce138b991213d8..27258e62db9ee53c75a0f19a7b4e0917d3a3f266 100644 --- a/src/backends/llk.c +++ b/src/backends/llk.c @@ -198,9 +198,14 @@ static int fill_table_row(size_t kmax, HCFGrammar *g, HCFStringMap *row, h_pprint_symbol(stdout, g, A); printf(") = "); h_pprint_stringset(stdout, row, 0); + if(h_stringmap_get(row, (uint8_t *)"a", 1, false)) { + printf(" a -> "); + h_pprint_sequence(stdout, g, h_stringmap_get(row, (uint8_t *)"a", 1, false)); + printf("\n"); + } // switch to the updated workset - h_hashtable_free(workset); + h_hashset_free(workset); workset = nextset; // if the workset is empty, row is without conflict; we're done @@ -452,9 +457,9 @@ int test_llk(void) */ HParser *X = h_optional(h_ch('x')); - HParser *Y = h_sequence(h_ch('y'), NULL); - HParser *A = h_sequence(X, Y, h_ch('a'), NULL); - HParser *B = h_sequence(Y, h_ch('b'), NULL); + //HParser *Y = h_epsilon_p(); //h_sequence(h_ch('y'), NULL); + HParser *A = h_sequence(X, h_ch('a'), NULL); + HParser *B = h_sequence(h_ch('b'), NULL); HParser *p = h_choice(A, B, NULL); HCFGrammar *g = h_cfgrammar(&system_allocator, p); @@ -477,7 +482,7 @@ int test_llk(void) return 2; } - HParseResult *res = h_parse(p, (uint8_t *)"xa", 2); + HParseResult *res = h_parse(p, (uint8_t *)"ab", 2); if(res) h_pprint(stdout, res->ast, 0, 2); else