restore the sharing of sequences. Shrinks the grammar by ~45%

This commit is contained in:
Krasimir Angelov
2022-01-08 19:49:42 +01:00
parent cd2c6aa32a
commit 00f857559d
31 changed files with 882 additions and 353 deletions

View File

@@ -529,11 +529,11 @@ void PgfPrinter::symbol(PgfSymbol sym)
auto sym_kp = ref<PgfSymbolKP>::untagged(sym);
puts("pre {");
symbols(sym_kp->default_form);
sequence(sym_kp->default_form);
for (size_t i = 0; i < sym_kp->alts.len; i++) {
puts("; ");
symbols(sym_kp->alts.data[i].form);
sequence(sym_kp->alts.data[i].form);
puts(" /");
for (size_t j = 0; j < sym_kp->alts.data[i].prefixes->len; j++) {
puts(" ");
@@ -565,16 +565,21 @@ void PgfPrinter::symbol(PgfSymbol sym)
}
}
void PgfPrinter::symbols(ref<Vector<PgfSymbol>> syms)
void PgfPrinter::sequence(ref<PgfSequence> seq)
{
for (size_t i = 0; i < syms->len; i++) {
for (size_t i = 0; i < seq->syms.len; i++) {
if (i > 0)
puts(" ");
symbol(*vector_elem(syms, i));
symbol(*vector_elem(&seq->syms, i));
}
}
void PgfPrinter::seq_id(size_t seq_id)
{
nprintf(5, "S%zu", seq_id);
}
void PgfPrinter::free_ref(object x)
{
}