📄 flexdef.h
字号:
/* the percentage the number of homogeneous out-transitions of a state * must be of the number of total out-transitions of the state in order * that the state's transition table is first compared with a potential * template of the most common out-transition instead of with the first * proto in the proto queue */#define CHECK_COM_PERCENTAGE 50/* the percentage the number of differences between a state's transition * table and the proto it was first compared with must be of the total * number of out-transitions of the state in order to keep the first * proto as a good match and not search any further */#define FIRST_MATCH_DIFF_PERCENTAGE 10/* the percentage the number of differences between a state's transition * table and the most similar proto must be of the state's total number * of out-transitions to use the proto as an acceptable close match */#define ACCEPTABLE_DIFF_PERCENTAGE 50/* the percentage the number of homogeneous out-transitions of a state * must be of the number of total out-transitions of the state in order * to consider making a template from the state */#define TEMPLATE_SAME_PERCENTAGE 60/* the percentage the number of differences between a state's transition * table and the most similar proto must be of the state's total number * of out-transitions to create a new proto from the state */#define NEW_PROTO_DIFF_PERCENTAGE 20/* the percentage the total number of out-transitions of a state must be * of the number of equivalence classes in order to consider trying to * fit the transition table into "holes" inside the nxt/chk table. */#define INTERIOR_FIT_PERCENTAGE 15/* size of region set aside to cache the complete transition table of * protos on the proto queue to enable quick comparisons */#define PROT_SAVE_SIZE 2000#define MSP 50 /* maximum number of saved protos (protos on the proto queue) *//* maximum number of out-transitions a state can have that we'll rummage * around through the interior of the internal fast table looking for a * spot for it */#define MAX_XTIONS_FULL_INTERIOR_FIT 4/* maximum number of rules which will be reported as being associated * with a DFA state */#define MAX_ASSOC_RULES 100/* number that, if used to subscript an array, has a good chance of producing * an error; should be small enough to fit into a short */#define BAD_SUBSCRIPT -32767/* absolute value of largest number that can be stored in a short, with a * bit of slop thrown in for general paranoia. */#define MAX_SHORT 32766/* Declarations for global variables. *//* variables for symbol tables: * sctbl - start-condition symbol table * ndtbl - name-definition symbol table * ccltab - character class text symbol table */struct hash_entry { struct hash_entry *prev, *next; char *name; char *str_val; int int_val; } ;typedef struct hash_entry **hash_table;#define NAME_TABLE_HASH_SIZE 101#define START_COND_HASH_SIZE 101#define CCL_HASH_SIZE 101extern struct hash_entry *ndtbl[NAME_TABLE_HASH_SIZE]; extern struct hash_entry *sctbl[START_COND_HASH_SIZE];extern struct hash_entry *ccltab[CCL_HASH_SIZE];/* variables for flags: * printstats - if true (-v), dump statistics * syntaxerror - true if a syntax error has been found * eofseen - true if we've seen an eof in the input file * ddebug - if true (-d), make a "debug" scanner * trace - if true (-T), trace processing * spprdflt - if true (-s), suppress the default rule * interactive - if true (-I), generate an interactive scanner * caseins - if true (-i), generate a case-insensitive scanner * useecs - if true (-Ce flag), use equivalence classes * fulltbl - if true (-Cf flag), don't compress the DFA state table * usemecs - if true (-Cm flag), use meta-equivalence classes * fullspd - if true (-F flag), use Jacobson method of table representation * gen_line_dirs - if true (i.e., no -L flag), generate #line directives * performance_report - if true (i.e., -p flag), generate a report relating * to scanner performance * backtrack_report - if true (i.e., -b flag), generate "lex.backtrack" file * listing backtracking states * csize - size of character set for the scanner we're generating; * 128 for 7-bit chars and 256 for 8-bit * yymore_used - if true, yymore() is used in input rules * reject - if true, generate backtracking tables for REJECT macro * real_reject - if true, scanner really uses REJECT (as opposed to just * having "reject" set for variable trailing context) * continued_action - true if this rule's action is to "fall through" to * the next rule's action (i.e., the '|' action) * yymore_really_used - has a REALLY_xxx value indicating whether a * %used or %notused was used with yymore() * reject_really_used - same for REJECT */extern int printstats, syntaxerror, eofseen, ddebug, trace, spprdflt;extern int interactive, caseins, useecs, fulltbl, usemecs;extern int fullspd, gen_line_dirs, performance_report, backtrack_report, csize;extern int yymore_used, reject, real_reject, continued_action;#define REALLY_NOT_DETERMINED 0#define REALLY_USED 1#define REALLY_NOT_USED 2extern int yymore_really_used, reject_really_used;/* variables used in the flex input routines: * datapos - characters on current output line * dataline - number of contiguous lines of data in current data * statement. Used to generate readable -f output * linenum - current input line number * skelfile - the skeleton file * yyin - input file * temp_action_file - temporary file to hold actions * backtrack_file - file to summarize backtracking states to * infilename - name of input file * headerfilename - name of output header file * includefilename - name of include to #include (default=headerfilename) * headerfile - output header file * outputfilename - output file name * action_file_name - name of the temporary file * input_files - array holding names of input files * num_input_files - size of input_files array * program_name - name with which program was invoked * lexer_name - name of lexer class and prefix for associated symbols * name_defined - flag : 1 if %name given or if default name is used * skelname - name of skeleton file * skelheaderfilename - name of skeleton header file */extern int datapos, dataline, linenum;extern FILE *skelfile, *yyin, *temp_action_file, *backtrack_file;extern char *skelname;extern char *infilename;extern char *headerfilename;extern char *outputfilename;extern char *includefilename;extern FILE *headerfile;extern char *skelheaderfilename;extern FILE *skelheaderfile;extern char *action_file_name;extern char **input_files;extern int num_input_files;extern char *program_name;extern char lexer_name[256];extern int name_defined;/* variables for stack of states having only one out-transition: * onestate - state number * onesym - transition symbol * onenext - target state * onedef - default base entry * onesp - stack pointer */extern int onestate[ONE_STACK_SIZE], onesym[ONE_STACK_SIZE];extern int onenext[ONE_STACK_SIZE], onedef[ONE_STACK_SIZE], onesp;/* variables for nfa machine data: * 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 * current_max_rules - current maximum number of rules * lastnfa - last nfa state number created * firstst - physically the first state of a fragment * lastst - last physical state of fragment * finalst - last logical state of fragment * transchar - transition character * trans1 - transition state * trans2 - 2nd transition state for epsilons * accptnum - accepting number * assoc_rule - rule associated with this NFA state (or 0 if none) * state_type - a STATE_xxx type identifying whether the state is part * of a normal rule, the leading state in a trailing context * rule (i.e., the state which marks the transition from * recognizing the text-to-be-matched to the beginning of * the trailing context), or a subsequent state in a trailing * context rule * rule_type - a RULE_xxx type identifying whether this a a ho-hum * normal rule or one which has variable head & trailing * context * rule_linenum - line number associated with rule */extern int current_mns, num_rules, current_max_rules, lastnfa;extern int *firstst, *lastst, *finalst, *transchar, *trans1, *trans2;extern int *accptnum, *assoc_rule, *state_type, *rule_type, *rule_linenum;/* different types of states; values are useful as masks, as well, for * routines like check_trailing_context() */#define STATE_NORMAL 0x1#define STATE_TRAILING_CONTEXT 0x2/* global holding current type of state we're making */extern int current_state_type;/* different types of rules */#define RULE_NORMAL 0#define RULE_VARIABLE 1/* true if the input rules include a rule with both variable-length head * and trailing context, false otherwise */extern int variable_trailing_context_rules;/* variables for protos: * numtemps - number of templates created * numprots - number of protos created * protprev - backlink to a more-recently used proto * protnext - forward link to a less-recently used proto * prottbl - base/def table entry for proto * protcomst - common state of proto * firstprot - number of the most recently used proto * lastprot - number of the least recently used proto * protsave contains the entire state array for protos */extern int numtemps, numprots, protprev[MSP], protnext[MSP], prottbl[MSP];extern int protcomst[MSP], firstprot, lastprot, protsave[PROT_SAVE_SIZE];/* variables for managing equivalence classes: * numecs - number of equivalence classes * nextecm - forward link of Equivalence Class members * ecgroup - class number or backward link of EC members * nummecs - number of meta-equivalence classes (used to compress * templates) * tecfwd - forward link of meta-equivalence classes members * tecbck - backward link of MEC's * xlation - maps character codes to their translations, or nil if no %t table * num_xlations - number of different xlation values *//* reserve enough room in the equivalence class arrays so that we * can use the CSIZE'th element to hold equivalence class information * for the NUL character. Later we'll move this information into * the 0th element. */extern int numecs, nextecm[CSIZE + 1], ecgroup[CSIZE + 1], nummecs;/* meta-equivalence classes are indexed starting at 1, so it's possible * that they will require positions from 1 .. CSIZE, i.e., CSIZE + 1 * slots total (since the arrays are 0-based). nextecm[] and ecgroup[] * don't require the extra position since they're indexed from 1 .. CSIZE - 1. */extern int tecfwd[CSIZE + 1], tecbck[CSIZE + 1];extern int *xlation;extern int num_xlations;/* variables for start conditions: * lastsc - last start condition created * current_max_scs - current limit on number of start conditions * scset - set of rules active in start condition * scbol - set of rules active only at the beginning of line in a s.c. * scxclu - true if start condition is exclusive * sceof - true if start condition has EOF rule * scname - start condition name * actvsc - stack of active start conditions for the current rule */extern int lastsc, current_max_scs, *scset, *scbol, *scxclu, *sceof, *actvsc;extern char **scname;/* variables for dfa machine data: * current_max_dfa_size - current maximum number of NFA states in DFA * current_max_xpairs - current maximum number of non-template xtion pairs * current_max_template_xpairs - current maximum number of template pairs * current_max_dfas - current maximum number DFA states * lastdfa - last dfa state number created * nxt - state to enter upon reading character * chk - check value to see if "nxt" applies * tnxt - internal nxt table for templates * base - offset into "nxt" for given state * def - where to go if "chk" disallows "nxt" entry * nultrans - NUL transition for each state * NUL_ec - equivalence class of the NUL character * tblend - last "nxt/chk" table entry being used * firstfree - first empty entry in "nxt/chk" table * dss - nfa state set for each dfa * dfasiz - size of nfa state set for each dfa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -