mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-30 06:52:49 -06:00
a major refactoring in the C and the Haskell runtimes. Note incompatible change in the PGF format!!!
The following are the outcomes:
- Predef.nonExist is fully supported by both the Haskell and the C runtimes
- Predef.BIND is now an internal compiler defined token. For now
it behaves just as usual for the Haskell runtime, i.e. it generates &+.
However, the special treatment will let us to handle it properly in
the C runtime.
- This required a major change in the PGF format since both
nonExist and BIND may appear inside 'pre' and this was not supported
before.
This commit is contained in:
@@ -586,27 +586,13 @@ pgf_read_printnames(PgfReader* rdr)
|
||||
return printnames;
|
||||
}
|
||||
|
||||
static PgfTokens*
|
||||
pgf_read_tokens(PgfReader* rdr)
|
||||
{
|
||||
size_t len = pgf_read_len(rdr);
|
||||
gu_return_on_exn(rdr->err, NULL);
|
||||
|
||||
PgfTokens* tokens = gu_new_seq(PgfToken, len, rdr->opool);
|
||||
for (size_t i = 0; i < len; i++) {
|
||||
PgfToken token = pgf_read_string(rdr);
|
||||
gu_return_on_exn(rdr->err, NULL);
|
||||
|
||||
gu_seq_set(tokens, PgfToken, i, token);
|
||||
}
|
||||
|
||||
return tokens;
|
||||
}
|
||||
static PgfSequence*
|
||||
pgf_read_sequence(PgfReader* rdr);
|
||||
|
||||
static void
|
||||
pgf_read_alternative(PgfReader* rdr, PgfAlternative* alt)
|
||||
{
|
||||
alt->form = pgf_read_tokens(rdr);
|
||||
alt->form = pgf_read_sequence(rdr);
|
||||
gu_return_on_exn(rdr->err,);
|
||||
|
||||
size_t n_prefixes = pgf_read_len(rdr);
|
||||
@@ -672,12 +658,12 @@ pgf_read_symbol(PgfReader* rdr)
|
||||
gu_new_variant(PGF_SYMBOL_KS,
|
||||
PgfSymbolKS,
|
||||
&sym, rdr->opool);
|
||||
sym_ks->tokens = pgf_read_tokens(rdr);
|
||||
sym_ks->token = pgf_read_string(rdr);
|
||||
gu_return_on_exn(rdr->err, gu_null_variant);
|
||||
break;
|
||||
}
|
||||
case PGF_SYMBOL_KP: {
|
||||
PgfTokens* default_form = pgf_read_tokens(rdr);
|
||||
PgfSequence* default_form = pgf_read_sequence(rdr);
|
||||
gu_return_on_exn(rdr->err, gu_null_variant);
|
||||
|
||||
size_t n_forms = pgf_read_len(rdr);
|
||||
@@ -703,6 +689,13 @@ pgf_read_symbol(PgfReader* rdr)
|
||||
gu_return_on_exn(rdr->err, gu_null_variant);
|
||||
break;
|
||||
}
|
||||
case PGF_SYMBOL_BIND: {
|
||||
gu_new_variant(PGF_SYMBOL_BIND,
|
||||
PgfSymbolBIND,
|
||||
&sym, rdr->opool);
|
||||
gu_return_on_exn(rdr->err, gu_null_variant);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
pgf_read_tag_error(rdr);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user