Skip to content

Commit

Permalink
Separating general pattern functions: t+
Browse files Browse the repository at this point in the history
  • Loading branch information
Jeffrey Kegler authored and Jeffrey Kegler committed Jun 17, 2012
1 parent 2511ccc commit 42c6288
Show file tree
Hide file tree
Showing 5 changed files with 38 additions and 267 deletions.
4 changes: 2 additions & 2 deletions r2/libmarpa/dev/api.texi
Expand Up @@ -1628,7 +1628,7 @@ Return value: On success, the rule length.
On failure, -2.
@end deftypefun

@deftypefun Marpa_Symbol_ID marpa_g_rule_rh_symbol ( @
@deftypefun Marpa_Symbol_ID marpa_g_rule_rhs ( @
Marpa_Grammar @var{g}, @
Marpa_Rule_ID @var{rule_id}, @
int @var{ix})
Expand Down Expand Up @@ -4014,7 +4014,7 @@ Return value: On success, the IRL length.
On failure, -2.
@end deftypefun

@deftypefun Marpa_Symbol_ID _marpa_g_irl_rh_symbol ( @
@deftypefun Marpa_Symbol_ID _marpa_g_irl_rhs ( @
Marpa_Grammar @var{g}, @
Marpa_IRL_ID @var{irl_id}, @
int @var{ix})
Expand Down
24 changes: 14 additions & 10 deletions r2/libmarpa/dev/marpa.w
Expand Up @@ -1947,7 +1947,7 @@ PRIVATE Marpa_Symbol_ID* rule_rhs_get(RULE rule)
{
return rule->t_symbols+1; }
@ @<Function definitions@> =
Marpa_Symbol_ID marpa_g_rule_rh_symbol(Marpa_Grammar g, Marpa_Rule_ID xrl_id, int ix) {
Marpa_Symbol_ID marpa_g_rule_rhs(Marpa_Grammar g, Marpa_Rule_ID xrl_id, int ix) {
RULE rule;
@<Return |-2| on failure@>@;
@<Fail if fatal error@>@;
Expand Down Expand Up @@ -2255,7 +2255,7 @@ Marpa_ISY_ID _marpa_g_irl_lhs(Marpa_Grammar g, Marpa_IRL_ID irl_id) {
@ @d RHSID_of_IRL(irl, position) ((irl)->t_isyid_array[(position)+1])
@ @d RHS_of_IRL(irl, position) ISY_by_ID(RHSID_of_IRL((irl), (position)))
@<Function definitions@> =
Marpa_ISY_ID _marpa_g_irl_rh_symbol(Marpa_Grammar g, Marpa_IRL_ID irl_id, int ix) {
Marpa_ISY_ID _marpa_g_irl_rhs(Marpa_Grammar g, Marpa_IRL_ID irl_id, int ix) {
IRL irl;
@<Return |-2| on failure@>@;
@<Fail if fatal error@>@;
Expand Down Expand Up @@ -2510,7 +2510,11 @@ int marpa_g_precompute(Marpa_Grammar g)
@<Populate the terminal boolean vector@>@;
}
return_value = G_EVENT_COUNT(g);
FAILURE:;
goto CLEANUP;
SOFT_FAILURE:;
return_value = -1;
goto CLEANUP;
CLEANUP:;
my_obstack_free(obs_precompute);
return return_value;
}
Expand Down Expand Up @@ -2569,7 +2573,7 @@ a lot of useless diagnostics.
@ @<Fail if no rules@> =
if (UNLIKELY(xrl_count <= 0)) {
MARPA_ERROR(MARPA_ERR_NO_RULES);
return failure_indicator;
goto SOFT_FAILURE;
}

@ Loop over the rules, producing boolean vector of LHS symbols, and of
Expand All @@ -2581,17 +2585,17 @@ While at it, set a flag to indicate if there are empty rules.
if (UNLIKELY(start_xsyid < 0))
{
MARPA_ERROR (MARPA_ERR_NO_START_SYMBOL);
return failure_indicator;
goto SOFT_FAILURE;
}
if (UNLIKELY(!xsyid_is_valid (g, start_xsyid)))
{
MARPA_ERROR (MARPA_ERR_INVALID_START_SYMBOL);
return failure_indicator;
goto SOFT_FAILURE;
}
if (UNLIKELY(!SYM_is_LHS (SYM_by_ID (start_xsyid))))
{
MARPA_ERROR (MARPA_ERR_START_NOT_LHS);
return failure_indicator;
goto SOFT_FAILURE;
}
}

Expand Down Expand Up @@ -2803,7 +2807,7 @@ RULEID** xrl_list_x_lh_sym = NULL;
if (UNLIKELY(counted_nullables))
{
MARPA_ERROR (MARPA_ERR_COUNTED_NULLABLE);
goto FAILURE;
goto SOFT_FAILURE;
}
}

Expand Down Expand Up @@ -2832,7 +2836,7 @@ RULEID** xrl_list_x_lh_sym = NULL;
if (UNLIKELY(!bv_bit_test(productive_v, (unsigned int)start_xsyid)))
{
MARPA_ERROR(MARPA_ERR_UNPRODUCTIVE_START);
goto FAILURE;
goto SOFT_FAILURE;
}
@ @<Declare census variables@> =
Bit_Vector productive_v = NULL;
Expand Down Expand Up @@ -2940,7 +2944,7 @@ reach a terminal symbol.
if (UNLIKELY (nulling_terminal_found))
{
MARPA_ERROR (MARPA_ERR_NULLING_TERMINAL);
goto FAILURE;
goto SOFT_FAILURE;
}
}

Expand Down
4 changes: 4 additions & 0 deletions r2/pod/Advanced/Thin.pod
Expand Up @@ -355,6 +355,10 @@ An exception is thrown if there is a version mismatch, which should
not happen -- it indicates a problem with the way that the library
was built.

=head2 precompute()

The C<precompute()> method follows the general pattern.

=head1 Example

=for Marpa::R2::Display
Expand Down
252 changes: 1 addition & 251 deletions r2/xs/R2.xs
Expand Up @@ -429,243 +429,6 @@ PPCODE:
XPUSHs( sv_2mortal( newSViv(new_rule_id) ) );
}

Marpa_Symbol_ID
rule_lhs( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_lhs(g, rule_id);
if (result < -1) {
croak ("Problem in g->rule_lhs(%d): %s", rule_id, xs_g_error (g_wrapper));
}
if (result < 0) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(result) ) );
}

Marpa_Symbol_ID
rule_rhs( g_wrapper, rule_id, ix )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
int ix;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_rh_symbol(g, rule_id, ix);
if (result < -1) {
croak ("Problem in g->rule_rhs(%d, %d): %s", rule_id, ix, xs_g_error (g_wrapper));
}
if (result < 0) { XSRETURN_UNDEF; }
XPUSHs( sv_2mortal( newSViv(result) ) );
}

int
rule_length( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_length (g, rule_id);
if (result < -1)
{
croak ("Problem in g->rule_length(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}

void
rule_is_nullable( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_is_nullable (g, rule_id);
if (result < -1)
{
croak ("Problem in g->rule_is_nullable(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result < 0)
{
croak ("Invalid rule %d", rule_id);
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}

void
rule_is_nulling( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_is_nulling (g, rule_id);
if (result < -1)
{
croak ("Problem in g->rule_is_nulling(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result < 0)
{
croak ("Invalid rule %d", rule_id);
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}

void
rule_is_accessible( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_is_accessible (g, rule_id);
if (result < -1)
{
croak ("Problem in g->rule_is_accessible(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result < 0)
{
croak ("Invalid rule %d", rule_id);
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}

void
rule_is_productive( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_is_productive (g, rule_id);
if (result < -1)
{
croak ("Problem in g->rule_is_productive(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result < 0)
{
croak ("Invalid rule %d", rule_id);
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}

void
rule_is_loop( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_is_loop (g, rule_id);
if (result < -1)
{
croak ("Problem in g->rule_is_loop(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result < 0)
{
croak ("Invalid rule %d", rule_id);
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}

void
rule_is_sequence( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_is_sequence (g, rule_id);
if (result < -1)
{
croak ("Problem in g->rule_is_sequence(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result < 0)
{
croak ("Invalid rule %d", rule_id);
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}

void
rule_is_keep_separation( g_wrapper, rule_id )
G_Wrapper *g_wrapper;
Marpa_Rule_ID rule_id;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_is_keep_separation (g, rule_id);
if (result < 0)
{
croak ("Problem in g->rule_is_keep_separation(%d): %s", rule_id,
xs_g_error (g_wrapper));
}
if (result)
XSRETURN_YES;
XSRETURN_NO;
}

int
rule_count( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_rule_count (g);
if (result < -1)
{
croak ("Problem in g->rule_count(): %s", xs_g_error (g_wrapper));
}
if (result < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}

int
symbol_count( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int count = marpa_g_symbol_count (g);
if (count < -1)
{
croak ("Problem in g->symbol_count(): %s", xs_g_error (g_wrapper));
}
if (count < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (count)));
}

void
error( g_wrapper )
G_Wrapper *g_wrapper;
Expand All @@ -688,19 +451,6 @@ PPCODE:
XPUSHs (sv_2mortal (newSViv (error_code)));
}

void precompute( g_wrapper )
G_Wrapper *g_wrapper;
PPCODE:
{
const Marpa_Grammar g = g_wrapper->g;
int result = marpa_g_precompute (g);
if (result < 0)
{
XSRETURN_UNDEF;
}
XPUSHs (sv_2mortal (newSViv (result)));
}

MODULE = Marpa::R2 PACKAGE = Marpa::R2::Thin::R

void
Expand Down Expand Up @@ -2263,7 +2013,7 @@ _marpa_g_irl_rhs( g_wrapper, irl_id, ix )
PPCODE:
{
Marpa_Grammar g = g_wrapper->g;
int result = _marpa_g_irl_rh_symbol(g, irl_id, ix);
int result = _marpa_g_irl_rhs(g, irl_id, ix);
if (result < -1) {
croak ("Problem in g->_marpa_g_irl_rhs(%d, %d): %s", irl_id, ix, xs_g_error (g_wrapper));
}
Expand Down

0 comments on commit 42c6288

Please sign in to comment.