]> granicus.if.org Git - flex/commitdiff
support large flex tables; from debian package maintainer
authorWill Estes <wlestes@users.sourceforge.net>
Wed, 6 Feb 2002 21:41:52 +0000 (21:41 +0000)
committerWill Estes <wlestes@users.sourceforge.net>
Wed, 6 Feb 2002 21:41:52 +0000 (21:41 +0000)
flex.texi
flexdef.h
main.c
nfa.c

index 366eccedd4393c5d813991dfca451d9d9f1a7c41..0edee4dc3f3bd950d1ffaedf53aa4c94ab40dc6c 100644 (file)
--- a/flex.texi
+++ b/flex.texi
@@ -2171,7 +2171,7 @@ generated scanner for faster performance because the elements of
 the tables are better aligned for memory access and computation.  On some
 RISC architectures, fetching and manipulating longwords is more efficient
 than with smaller-sized units such as shortwords.  This option can
-double the size of the tables used by your scanner.
+quadruple the size of the tables used by your scanner.
 
 @item -Ce, --ecs
 directs @code{flex} to construct @dfn{equivalence classes}, i.e., sets
index 3ec4909ec5a193cf3ec65c385a32e12538a7c50f..2b8feb99fb1bf6057bbcd822dac63d9e7be7266c 100644 (file)
--- a/flexdef.h
+++ b/flexdef.h
 
 /* Maximum number of NFA states. */
 #define MAXIMUM_MNS 31999
+#define MAXIMUM_MNS_LONG 1999999999
 
 /* Enough so that if it's subtracted from an NFA state number, the result
  * is guaranteed to be negative.
  */
-#define MARKER_DIFFERENCE (MAXIMUM_MNS+2)
+#define MARKER_DIFFERENCE (maximum_mns+2)
 
 /* Maximum number of nxt/chk pairs for non-templates. */
 #define INITIAL_MAX_XPAIRS 2000
@@ -444,6 +445,7 @@ extern int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
 
 
 /* Variables for nfa machine data:
+ * maximum_mns - maximal number of NFA states supported by tables
  * current_mns - current maximum on number of NFA states
  * num_rules - number of the last accepting state; also is number of
  *     rules created so far
@@ -472,7 +474,7 @@ extern int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
  * rule_useful - true if we've determined that the rule can be matched
  */
 
-extern int current_mns, current_max_rules;
+extern int maximum_mns, current_mns, current_max_rules;
 extern int num_rules, num_eof_rules, default_rule, lastnfa;
 extern int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
 extern int *accptnum, *assoc_rule, *state_type;
diff --git a/main.c b/main.c
index 8d5cc569b9e4a16fb018f29a5ba141f1b9245d2e..a8d49a397f226b3ee1dd733d9279b76680e88f00 100644 (file)
--- a/main.c
+++ b/main.c
@@ -71,7 +71,7 @@ char *prefix, *yyclass;
 int do_stdinit, use_stdout;
 int onestate[ONE_STACK_SIZE], onesym[ONE_STACK_SIZE];
 int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;
-int current_mns, current_max_rules;
+int maximum_mns, current_mns, current_max_rules;
 int num_rules, num_eof_rules, default_rule, lastnfa;
 int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;
 int *accptnum, *assoc_rule, *state_type;
@@ -1581,6 +1581,7 @@ _( "Variable trailing context rules entail a large performance penalty\n" ) );
 
 void set_up_initial_allocations()
        {
+       maximum_mns = (long_align ? MAXIMUM_MNS_LONG : MAXIMUM_MNS);
        current_mns = INITIAL_MNS;
        firstst = allocate_integer_array( current_mns );
        lastst = allocate_integer_array( current_mns );
diff --git a/nfa.c b/nfa.c
index bcebbdc4091be18581f4bebe6d47bb8af9a110b8..65634e1e197e2a2db7f142566124e1e99dbeea0e 100644 (file)
--- a/nfa.c
+++ b/nfa.c
@@ -598,7 +598,7 @@ int sym;
        {
        if ( ++lastnfa >= current_mns )
                {
-               if ( (current_mns += MNS_INCREMENT) >= MAXIMUM_MNS )
+               if ( (current_mns += MNS_INCREMENT) >= maximum_mns )
                        lerrif(
                _( "input rules are too complicated (>= %d NFA states)" ),
                                current_mns );