📄 flexdef.h
字号:
/* flexdef - definitions file for flex *//*- * Copyright (c) 1990 The Regents of the University of California. * All rights reserved. * * This code is derived from software contributed to Berkeley by * Vern Paxson. * * The United States Government has rights in this work pursuant * to contract no. DE-AC03-76SF00098 between the United States * Department of Energy and the University of California. * * Redistribution and use in source and binary forms are permitted provided * that: (1) source distributions retain this entire copyright notice and * comment, and (2) distributions including binaries display the following * acknowledgement: ``This product includes software developed by the * University of California, Berkeley and its contributors'' in the * documentation or other materials provided with the distribution and in * all advertising materials mentioning features or use of this software. * Neither the name of the University nor the names of its contributors may * be used to endorse or promote products derived from this software without * specific prior written permission. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. *//* @(#) $Header: /usr/fsys/odin/a/vern/flex/RCS/flexdef.h,v 2.10 90/08/03 14:09:52 vern Exp $ (LBL) */#ifndef FILE#include <stdio.h>#endif/* always be prepared to generate an 8-bit scanner */#define FLEX_8_BIT_CHARS#ifdef FLEX_8_BIT_CHARS#define CSIZE 256#define Char unsigned char#else#define Char char#define CSIZE 128#endif/* size of input alphabet - should be size of ASCII set */#ifndef DEFAULT_CSIZE#define DEFAULT_CSIZE 128#endif#ifndef PROTO#ifdef __STDC__#define PROTO(proto) proto#else#define PROTO(proto) ()#endif#endif#ifdef USG#define SYS_V#endif#ifdef SYS_V#include <string.h>#else#include <strings.h>#ifdef lintchar *sprintf(); /* keep lint happy */#endif#ifdef SCO_UNIXvoid *memset();#elsechar *memset();#endif#endif#ifdef AMIGA#define bzero(s, n) setmem((char *)(s), n, '\0')#ifndef abs#define abs(x) ((x) < 0 ? -(x) : (x))#endif#else#define bzero(s, n) (void) memset((char *)(s), '\0', n)#endif#ifdef VMS#define unlink delete#define SHORT_FILE_NAMES#endif#ifdef __STDC__#ifdef __GNUC__#include <stddef.h>void *malloc( size_t );void free( void* );#else#include <stdlib.h>#endif#else /* ! __STDC__ */char *malloc(), *realloc();#endif/* maximum line length we'll have to deal with */#define MAXLINE BUFSIZ/* maximum size of file name */#define FILENAMESIZE 1024#ifndef min#define min(x,y) ((x) < (y) ? (x) : (y))#endif#ifndef max#define max(x,y) ((x) > (y) ? (x) : (y))#endif#ifdef MS_DOS#ifndef abs#define abs(x) ((x) < 0 ? -(x) : (x))#endif#define SHORT_FILE_NAMES#endif#define true 1#define false 0#ifndef DEFAULT_SKELETON_FILE#define DEFAULT_SKELETON_FILE "flex.skel"#endif/* special chk[] values marking the slots taking by end-of-buffer and action * numbers */#define EOB_POSITION -1#define ACTION_POSITION -2/* number of data items per line for -f output */#define NUMDATAITEMS 10/* number of lines of data in -f output before inserting a blank line for * readability. */#define NUMDATALINES 10/* transition_struct_out() definitions */#define TRANS_STRUCT_PRINT_LENGTH 15/* returns true if an nfa state has an epsilon out-transition slot * that can be used. This definition is currently not used. */#define FREE_EPSILON(state) \ (transchar[state] == SYM_EPSILON && \ trans2[state] == NO_TRANSITION && \ finalst[state] != state)/* returns true if an nfa state has an epsilon out-transition character * and both slots are free */#define SUPER_FREE_EPSILON(state) \ (transchar[state] == SYM_EPSILON && \ trans1[state] == NO_TRANSITION) \/* maximum number of NFA states that can comprise a DFA state. It's real * big because if there's a lot of rules, the initial state will have a * huge epsilon closure. */#define INITIAL_MAX_DFA_SIZE 750#define MAX_DFA_SIZE_INCREMENT 750/* a note on the following masks. They are used to mark accepting numbers * as being special. As such, they implicitly limit the number of accepting * numbers (i.e., rules) because if there are too many rules the rule numbers * will overload the mask bits. Fortunately, this limit is \large/ (0x2000 == * 8192) so unlikely to actually cause any problems. A check is made in * new_rule() to ensure that this limit is not reached. *//* mask to mark a trailing context accepting number */#define YY_TRAILING_MASK 0x2000/* mask to mark the accepting number of the "head" of a trailing context rule */#define YY_TRAILING_HEAD_MASK 0x4000/* maximum number of rules, as outlined in the above note */#define MAX_RULE (YY_TRAILING_MASK - 1)/* NIL must be 0. If not, its special meaning when making equivalence classes * (it marks the representative of a given e.c.) will be unidentifiable */#define NIL 0#define JAM -1 /* to mark a missing DFA transition */#define NO_TRANSITION NIL#define UNIQUE -1 /* marks a symbol as an e.c. representative */#define INFINITY -1 /* for x{5,} constructions */#define INITIAL_MAX_CCLS 100 /* max number of unique character classes */#define MAX_CCLS_INCREMENT 100/* size of table holding members of character classes */#define INITIAL_MAX_CCL_TBL_SIZE 500#define MAX_CCL_TBL_SIZE_INCREMENT 250#define INITIAL_MAX_RULES 100 /* default maximum number of rules */#define MAX_RULES_INCREMENT 100#define INITIAL_MNS 2000 /* default maximum number of nfa states */#define MNS_INCREMENT 1000 /* amount to bump above by if it's not enough */#define INITIAL_MAX_DFAS 1000 /* default maximum number of dfa states */#define MAX_DFAS_INCREMENT 1000#define JAMSTATE -32766 /* marks a reference to the state that always jams *//* enough so that if it's subtracted from an NFA state number, the result * is guaranteed to be negative */#define MARKER_DIFFERENCE 32000#define MAXIMUM_MNS 31999/* maximum number of nxt/chk pairs for non-templates */#define INITIAL_MAX_XPAIRS 2000#define MAX_XPAIRS_INCREMENT 2000/* maximum number of nxt/chk pairs needed for templates */#define INITIAL_MAX_TEMPLATE_XPAIRS 2500#define MAX_TEMPLATE_XPAIRS_INCREMENT 2500#define SYM_EPSILON (CSIZE + 1) /* to mark transitions on the symbol epsilon */#define INITIAL_MAX_SCS 40 /* maximum number of start conditions */#define MAX_SCS_INCREMENT 40 /* amount to bump by if it's not enough */#define ONE_STACK_SIZE 500 /* stack of states with only one out-transition */#define SAME_TRANS -1 /* transition is the same as "default" entry for state *//* the following percentages are used to tune table compression: * the percentage the number of out-transitions a state must be of the * number of equivalence classes in order to be considered for table * compaction by using protos */#define PROTO_SIZE_PERCENTAGE 15/* 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 * 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 */extern int datapos, dataline, linenum;extern FILE *skelfile, *yyin, *temp_action_file, *backtrack_file;extern char *infilename;extern char *action_file_name;extern char **input_files;extern int num_input_files;extern char *program_name;/* 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -