summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/counterexample.h10
-rw-r--r--src/derivation.c46
-rw-r--r--src/derivation.h3
3 files changed, 34 insertions, 25 deletions
diff --git a/src/counterexample.h b/src/counterexample.h
index c251d319..735828fa 100644
--- a/src/counterexample.h
+++ b/src/counterexample.h
@@ -20,11 +20,17 @@
#ifndef COUNTEREXAMPLE_H
# define COUNTEREXAMPLE_H
-# include "state-item.h"
+# include "state.h"
+// Init/deinit this module.
void counterexample_init (void);
void counterexample_free (void);
-void counterexample_report_state (const state *s, FILE *out, const char *prefix);
+// Print the counterexamples for the conflicts of state S.
+//
+// Used both for the warnings on the terminal (OUT = stderr, PREFIX =
+// ""), and for the reports (OUT != stderr, PREFIX != "").
+void
+counterexample_report_state (const state *s, FILE *out, const char *prefix);
#endif /* COUNTEREXAMPLE_H */
diff --git a/src/derivation.c b/src/derivation.c
index da5649fc..39f66211 100644
--- a/src/derivation.c
+++ b/src/derivation.c
@@ -29,7 +29,7 @@
struct derivation
{
symbol_number sym;
- gl_list_t children;
+ derivation_list children;
int reference_count;
};
@@ -129,7 +129,7 @@ derivation_size (const derivation *deriv)
/* Print DERIV, colored according to COUNTER.
Return false if nothing is printed. */
static bool
-derivation_print_impl (const derivation *deriv, FILE *f,
+derivation_print_impl (const derivation *deriv, FILE *out,
bool leaves_only,
int *counter, const char *prefix)
{
@@ -139,16 +139,16 @@ derivation_print_impl (const derivation *deriv, FILE *f,
char style[20];
snprintf (style, 20, "cex-%d", *counter);
++*counter;
- begin_use_class (style, f);
+ begin_use_class (style, out);
if (!leaves_only)
{
- fputs (prefix, f);
- begin_use_class ("cex-step", f);
- fprintf (f, "%s ", sym->tag);
- print_arrow (f);
- fprintf (f, " [ ");
- end_use_class ("cex-step", f);
+ fputs (prefix, out);
+ begin_use_class ("cex-step", out);
+ fprintf (out, "%s ", sym->tag);
+ print_arrow (out);
+ fprintf (out, " [ ");
+ end_use_class ("cex-step", out);
prefix = "";
}
bool res = false;
@@ -157,7 +157,7 @@ derivation_print_impl (const derivation *deriv, FILE *f,
derivation_list_next (&it, &child);
)
{
- if (derivation_print_impl (child, f, leaves_only, counter, prefix))
+ if (derivation_print_impl (child, out, leaves_only, counter, prefix))
{
prefix = " ";
res = true;
@@ -167,30 +167,30 @@ derivation_print_impl (const derivation *deriv, FILE *f,
}
if (!leaves_only)
{
- begin_use_class ("cex-step", f);
+ begin_use_class ("cex-step", out);
if (res)
- fputs (" ]", f);
+ fputs (" ]", out);
else
- fputs ("]", f);
- end_use_class ("cex-step", f);
+ fputs ("]", out);
+ end_use_class ("cex-step", out);
}
- end_use_class (style, f);
+ end_use_class (style, out);
return res;
}
else if (deriv == &d_dot)
{
- fputs (prefix, f);
- begin_use_class ("cex-dot", f);
- print_dot (f);
- end_use_class ("cex-dot", f);
+ fputs (prefix, out);
+ begin_use_class ("cex-dot", out);
+ print_dot (out);
+ end_use_class ("cex-dot", out);
}
else // leaf.
{
- fputs (prefix, f);
+ fputs (prefix, out);
const symbol *sym = symbols[deriv->sym];
- begin_use_class ("cex-leaf", f);
- fprintf (f, "%s", sym->tag);
- end_use_class ("cex-leaf", f);
+ begin_use_class ("cex-leaf", out);
+ fprintf (out, "%s", sym->tag);
+ end_use_class ("cex-leaf", out);
}
return true;
}
diff --git a/src/derivation.h b/src/derivation.h
index 9f015df2..62676368 100644
--- a/src/derivation.h
+++ b/src/derivation.h
@@ -60,12 +60,15 @@ static inline derivation *derivation_new_leaf (symbol_number sym)
{
return derivation_new (sym, NULL);
}
+
+// Number of symbols.
size_t derivation_size (const derivation *deriv);
void derivation_print (const derivation *deriv, FILE *out, const char *prefix);
void derivation_print_leaves (const derivation *deriv, FILE *out, const char *prefix);
void derivation_free (derivation *deriv);
void derivation_retain (derivation *deriv);
+// A derivation denoting the position of the dot.
derivation *derivation_dot (void);
#endif /* DERIVATION_H */