* Sebastian Hammer, Adam Dickmeiss
*
* $Log: dfa.c,v $
- * Revision 1.2 1995-01-25 11:30:50 adam
+ * Revision 1.6 1995-10-16 09:31:25 adam
+ * Bug fix.
+ *
+ * Revision 1.5 1995/10/02 15:17:58 adam
+ * Bug fix in dfa_delete.
+ *
+ * Revision 1.4 1995/09/28 09:18:52 adam
+ * Removed various preprocessor defines.
+ *
+ * Revision 1.3 1995/09/04 12:33:26 adam
+ * Various cleanup. YAZ util used instead.
+ *
+ * Revision 1.2 1995/01/25 11:30:50 adam
* Simple error reporting when parsing regular expressions.
* Memory usage reduced.
*
#include <string.h>
#include <ctype.h>
-#include <util.h>
+#include <alexutil.h>
#include "dfap.h"
#include "imalloc.h"
int debug_dfa_tran = 0;
int debug_dfa_followpos = 0;
int dfa_verbose = 0;
-int yydebug = 0;
static struct DFA_parse *parse_info = NULL;
{
char_0 = max_char+1;
for (pos_i = pos; (i = *pos_i) != -1; ++pos_i)
- if (posar[i]->u.ch[1] >= char_1)
- if ((c=posar[i]->u.ch[0]) < char_0)
- if (c < char_1)
- char_0 = char_1;
- else
- char_0 = c;
+ if (posar[i]->u.ch[1] >= char_1
+ && (c=posar[i]->u.ch[0]) < char_0)
+ if (c < char_1)
+ char_0 = char_1;
+ else
+ char_0 = c;
- char_1 = max_char;
if (char_0 > max_char)
break;
+
+ char_1 = max_char;
+
tran_set = mk_Set (poset);
for (pos_i = pos; (i = *pos_i) != -1; ++pos_i)
- if ((c=posar[i]->u.ch[1]) >= char_0)
- if (posar[i]->u.ch[0] <= char_0)
- {
- if (c < char_1)
- char_1 = c;
- tran_set = union_Set (poset, tran_set, followpos[i]);
- }
- else if (c <= char_1)
- char_1 = c-1;
+ {
+ if ((c=posar[i]->u.ch[0]) > char_0 && c <= char_1)
+ char_1 = c - 1; /* forward chunk */
+ else if ((c=posar[i]->u.ch[1]) >= char_0 && c < char_1)
+ char_1 = c; /* backward chunk */
+ if (posar[i]->u.ch[1] >= char_0 && posar[i]->u.ch[0] <= char_0)
+ tran_set = union_Set (poset, tran_set, followpos[i]);
+ }
if (tran_set)
{
add_DFA_state (dfas, &tran_set, &dfa_to);
assert (*dfap);
if ((*dfap)->parse_info)
rm_dfa_parse (&(*dfap)->parse_info);
- rm_DFA_states (&(*dfap)->state_info);
+ if ((*dfap)->state_info)
+ rm_DFA_states (&(*dfap)->state_info);
ifree (*dfap);
*dfap = NULL;
}