home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / gnu / flex-2.4.6-bin.lha / man / catl / flex.0 next >
Text File  |  1993-12-07  |  30KB  |  727 lines

  1.  
  2.  
  3.  
  4. FLEX(1)                                                   FLEX(1)
  5.  
  6.  
  7. NNAAMMEE
  8.        flex - fast lexical analyzer generator
  9.  
  10. SSYYNNOOPPSSIISS
  11.        fflleexx [[--bbccddffiinnppssttvvFFIILLTT88 --CC[[eeffmmFF]] --SSsskkeelleettoonn]] _[_f_i_l_e_n_a_m_e _._._._]
  12.  
  13. DDEESSCCRRIIPPTTIIOONN
  14.        _f_l_e_x is a tool for  generating  _s_c_a_n_n_e_r_s_:  programs  which
  15.        recognized lexical patterns in text.  _f_l_e_x reads the given
  16.        input files, or its standard input if no  file  names  are
  17.        given,  for  a  description of a scanner to generate.  The
  18.        description is in the form of pairs of regular expressions
  19.        and  C  code,  called  _r_u_l_e_s_. _f_l_e_x generates as output a C
  20.        source file, lleexx..yyyy..cc,, which defines  a  routine  yyyylleexx(())..
  21.        This  file is compiled and linked with the --llffll library to
  22.        produce an executable.  When the  executable  is  run,  it
  23.        analyzes  its input for occurrences of the regular expres-
  24.        sions.  Whenever it finds one, it executes the correspond-
  25.        ing C code.
  26.  
  27.        For full documentation, see fflleexxddoocc((11))..  This manual entry
  28.        is intended for use as a quick reference.
  29.  
  30. OOPPTTIIOONNSS
  31.        _f_l_e_x has the following options:
  32.  
  33.        --bb     Generate backtracking information to _l_e_x_._b_a_c_k_t_r_a_c_k_.
  34.               This  is  a  list  of  scanner states which require
  35.               backtracking and the input characters on which they
  36.               do so.  By adding rules one can remove backtracking
  37.               states.  If all backtracking states are  eliminated
  38.               and  --ff  or  --FF is used, the generated scanner will
  39.               run faster.
  40.  
  41.        --cc     is a do-nothing,  deprecated  option  included  for
  42.               POSIX compliance.
  43.  
  44.               NNOOTTEE::  in  previous  releases  of _f_l_e_x --cc specified
  45.               table-compression options.  This  functionality  is
  46.               now  given  by the --CC flag.  To ease the the impact
  47.               of this change, when _f_l_e_x encounters  --cc,,  it  cur-
  48.               rently issues a warning message and assumes that --CC
  49.               was desired instead.  In the  future  this  "promo-
  50.               tion"  of --cc to --CC will go away in the name of full
  51.               POSIX  compliance  (unless  the  POSIX  meaning  is
  52.               removed first).
  53.  
  54.        --dd     makes  the  generated  scanner  run  in _d_e_b_u_g mode.
  55.               Whenever a pattern is  recognized  and  the  global
  56.               yyyy__fflleexx__ddeebbuugg  is  non-zero (which is the default),
  57.               the scanner will write to  _s_t_d_e_r_r  a  line  of  the
  58.               form:
  59.  
  60.                   --accepting rule at line 53 ("the matched text")
  61.  
  62.  
  63.  
  64. Version 2.3                26 May 1990                          1
  65.  
  66.  
  67.  
  68.  
  69.  
  70. FLEX(1)                                                   FLEX(1)
  71.  
  72.  
  73.               The  line number refers to the location of the rule
  74.               in the file defining the scanner  (i.e.,  the  file
  75.               that was fed to flex).  Messages are also generated
  76.               when the scanner backtracks,  accepts  the  default
  77.               rule,  reaches  the  end  of  its  input buffer (or
  78.               encounters a NUL; the two look the same as  far  as
  79.               the  scanner's  concerned),  or  reaches an end-of-
  80.               file.
  81.  
  82.        --ff     specifies (take your pick) _f_u_l_l _t_a_b_l_e or _f_a_s_t _s_c_a_n_-
  83.               _n_e_r_.   No table compression is done.  The result is
  84.               large but fast.  This option is equivalent  to  --CCff
  85.               (see below).
  86.  
  87.        --ii     instructs _f_l_e_x to generate a _c_a_s_e_-_i_n_s_e_n_s_i_t_i_v_e scan-
  88.               ner.  The case of letters given in the  _f_l_e_x  input
  89.               patterns  will  be ignored, and tokens in the input
  90.               will be matched regardless of  case.   The  matched
  91.               text  given  in _y_y_t_e_x_t will have the preserved case
  92.               (i.e., it will not be folded).
  93.  
  94.        --nn     is another do-nothing, deprecated  option  included
  95.               only for POSIX compliance.
  96.  
  97.        --pp     generates  a  performance  report  to  stderr.  The
  98.               report consists of comments regarding  features  of
  99.               the _f_l_e_x input file which will cause a loss of per-
  100.               formance in the resulting scanner.
  101.  
  102.        --ss     causes the _d_e_f_a_u_l_t  _r_u_l_e  (that  unmatched  scanner
  103.               input  is  echoed  to _s_t_d_o_u_t_) to be suppressed.  If
  104.               the scanner encounters input that  does  not  match
  105.               any of its rules, it aborts with an error.
  106.  
  107.        --tt     instructs _f_l_e_x to write the scanner it generates to
  108.               standard output instead of lleexx..yyyy..cc..
  109.  
  110.        --vv     specifies that _f_l_e_x should write to _s_t_d_e_r_r  a  sum-
  111.               mary  of statistics regarding the scanner it gener-
  112.               ates.
  113.  
  114.        --FF     specifies that the _f_a_s_t scanner  table  representa-
  115.               tion  should be used.  This representation is about
  116.               as fast as the full table representation _(_-_f_)_,  and
  117.               for  some  sets  of  patterns  will be considerably
  118.               smaller (and for others, larger).   See  fflleexxddoocc((11))
  119.               for details.
  120.  
  121.               This option is equivalent to --CCFF (see below).
  122.  
  123.        --II     instructs  _f_l_e_x to generate an _i_n_t_e_r_a_c_t_i_v_e scanner,
  124.               that is, a scanner which stops  immediately  rather
  125.               than  looking  ahead if it knows that the currently
  126.               scanned text cannot be  part  of  a  longer  rule's
  127.  
  128.  
  129.  
  130. Version 2.3                26 May 1990                          2
  131.  
  132.  
  133.  
  134.  
  135.  
  136. FLEX(1)                                                   FLEX(1)
  137.  
  138.  
  139.               match.  Again, see fflleexxddoocc((11)) for details.
  140.  
  141.               Note, --II cannot be used in conjunction with _f_u_l_l or
  142.               _f_a_s_t _t_a_b_l_e_s_, i.e., the --ff,, --FF,, --CCff,, or --CCFF flags.
  143.  
  144.        --LL     instructs _f_l_e_x not to generate ##lliinnee directives  in
  145.               lleexx..yyyy..cc..   The  default is to generate such direc-
  146.               tives so error messages in the actions will be cor-
  147.               rectly  located  with  respect to the original _f_l_e_x
  148.               input file, and not to the fairly meaningless  line
  149.               numbers of lleexx..yyyy..cc..
  150.  
  151.        --TT     makes  _f_l_e_x  run in _t_r_a_c_e mode.  It will generate a
  152.               lot of messages to _s_t_d_o_u_t concerning  the  form  of
  153.               the  input  and the resultant non-deterministic and
  154.               deterministic  finite  automata.   This  option  is
  155.               mostly for use in maintaining _f_l_e_x_.
  156.  
  157.        --88     instructs  _f_l_e_x  to  generate an 8-bit scanner.  On
  158.               some sites, this is the default.   On  others,  the
  159.               default  is  7-bit characters.  To see which is the
  160.               case, check the verbose ((--vv))  output  for  "equiva-
  161.               lence  classes created".  If the denominator of the
  162.               number shown is 128, then by default _f_l_e_x is gener-
  163.               ating  7-bit  characters.   If  it is 256, then the
  164.               default is 8-bit characters.
  165.  
  166.        --CC[[eeffmmFF]]
  167.               controls the degree of table compression.
  168.  
  169.               --CCee directs _f_l_e_x to construct _e_q_u_i_v_a_l_e_n_c_e  _c_l_a_s_s_e_s_,
  170.               i.e., sets of characters which have identical lexi-
  171.               cal properties.  Equivalence classes  usually  give
  172.               dramatic  reductions in the final table/object file
  173.               sizes (typically a factor of 2-5)  and  are  pretty
  174.               cheap performance-wise (one array look-up per char-
  175.               acter scanned).
  176.  
  177.               --CCff specifies that the _f_u_l_l scanner  tables  should
  178.               be  generated - _f_l_e_x should not compress the tables
  179.               by taking advantages of  similar  transition  func-
  180.               tions for different states.
  181.  
  182.               --CCFF  specifies that the alternate fast scanner rep-
  183.               resentation (described  in  fflleexxddoocc((11))))  should  be
  184.               used.
  185.  
  186.               --CCmm  directs  _f_l_e_x  to  construct  _m_e_t_a_-_e_q_u_i_v_a_l_e_n_c_e
  187.               _c_l_a_s_s_e_s_, which are sets of equivalence classes  (or
  188.               characters,  if  equivalence  classes are not being
  189.               used)  that  are  commonly  used  together.   Meta-
  190.               equivalence  classes are often a big win when using
  191.               compressed tables, but they have a moderate perfor-
  192.               mance  impact  (one or two "if" tests and one array
  193.  
  194.  
  195.  
  196. Version 2.3                26 May 1990                          3
  197.  
  198.  
  199.  
  200.  
  201.  
  202. FLEX(1)                                                   FLEX(1)
  203.  
  204.  
  205.               look-up per character scanned).
  206.  
  207.               A lone --CC specifies that the scanner tables  should
  208.               be  compressed  but neither equivalence classes nor
  209.               meta-equivalence classes should be used.
  210.  
  211.               The options --CCff or --CCFF and --CCmm do  not  make  sense
  212.               together  -  there  is  no  opportunity  for  meta-
  213.               equivalence classes if the table is not being  com-
  214.               pressed.   Otherwise  the  options  may  be  freely
  215.               mixed.
  216.  
  217.               The default setting is --CCeemm,, which  specifies  that
  218.               _f_l_e_x  should generate equivalence classes and meta-
  219.               equivalence classes.   This  setting  provides  the
  220.               highest degree of table compression.  You can trade
  221.               off faster-executing scanners at the cost of larger
  222.               tables with the following generally being true:
  223.  
  224.                   slowest & smallest
  225.                         -Cem
  226.                         -Cm
  227.                         -Ce
  228.                         -C
  229.                         -C{f,F}e
  230.                         -C{f,F}
  231.                   fastest & largest
  232.  
  233.  
  234.               --CC options are not cumulative; whenever the flag is
  235.               encountered, the previous -C settings  are  forgot-
  236.               ten.
  237.  
  238.        --SSsskkeelleettoonn__ffiillee
  239.               overrides the default skeleton file from which _f_l_e_x
  240.               constructs its scanners.  You'll  never  need  this
  241.               option  unless  you  are  doing _f_l_e_x maintenance or
  242.               development.
  243.  
  244. SSUUMMMMAARRYY OOFF FFLLEEXX RREEGGUULLAARR EEXXPPRREESSSSIIOONNSS
  245.        The patterns in the input are written  using  an  extended
  246.        set of regular expressions.  These are:
  247.  
  248.            x          match the character 'x'
  249.            .          any character except newline
  250.            [xyz]      a "character class"; in this case, the pattern
  251.                         matches either an 'x', a 'y', or a 'z'
  252.            [abj-oZ]   a "character class" with a range in it; matches
  253.                         an 'a', a 'b', any letter from 'j' through 'o',
  254.                         or a 'Z'
  255.            [^A-Z]     a "negated character class", i.e., any character
  256.                         but those in the class.  In this case, any
  257.                         character EXCEPT an uppercase letter.
  258.            [^A-Z\n]   any character EXCEPT an uppercase letter or
  259.  
  260.  
  261.  
  262. Version 2.3                26 May 1990                          4
  263.  
  264.  
  265.  
  266.  
  267.  
  268. FLEX(1)                                                   FLEX(1)
  269.  
  270.  
  271.                         a newline
  272.            r*         zero or more r's, where r is any regular expression
  273.            r+         one or more r's
  274.            r?         zero or one r's (that is, "an optional r")
  275.            r{2,5}     anywhere from two to five r's
  276.            r{2,}      two or more r's
  277.            r{4}       exactly 4 r's
  278.            {name}     the expansion of the "name" definition
  279.                       (see above)
  280.            "[xyz]\"foo"
  281.                       the literal string: [xyz]"foo
  282.            \X         if X is an 'a', 'b', 'f', 'n', 'r', 't', or 'v',
  283.                         then the ANSI-C interpretation of \x.
  284.                         Otherwise, a literal 'X' (used to escape
  285.                         operators such as '*')
  286.            \123       the character with octal value 123
  287.            \x2a       the character with hexadecimal value 2a
  288.            (r)        match an r; parentheses are used to override
  289.                         precedence (see below)
  290.  
  291.  
  292.            rs         the regular expression r followed by the
  293.                         regular expression s; called "concatenation"
  294.  
  295.  
  296.            r|s        either an r or an s
  297.  
  298.  
  299.            r/s        an r but only if it is followed by an s.  The
  300.                         s is not part of the matched text.  This type
  301.                         of pattern is called as "trailing context".
  302.            ^r         an r, but only at the beginning of a line
  303.            r$         an r, but only at the end of a line.  Equivalent
  304.                         to "r/\n".
  305.  
  306.  
  307.            <s>r       an r, but only in start condition s (see
  308.                       below for discussion of start conditions)
  309.            <s1,s2,s3>r
  310.                       same, but in any of start conditions s1,
  311.                       s2, or s3
  312.  
  313.  
  314.            <<EOF>>    an end-of-file
  315.            <s1,s2><<EOF>>
  316.                       an end-of-file when in start condition s1 or s2
  317.  
  318.        The regular expressions listed above are grouped according
  319.        to precedence, from highest precedence at the top to  low-
  320.        est  at  the  bottom.   Those  grouped together have equal
  321.        precedence.
  322.  
  323.        Some notes on patterns:
  324.  
  325.  
  326.  
  327.  
  328. Version 2.3                26 May 1990                          5
  329.  
  330.  
  331.  
  332.  
  333.  
  334. FLEX(1)                                                   FLEX(1)
  335.  
  336.  
  337.        -      Negated character  classes  _m_a_t_c_h  _n_e_w_l_i_n_e_s  unless
  338.               "\n"  (or  an equivalent escape sequence) is one of
  339.               the characters explicitly present  in  the  negated
  340.               character class (e.g., "[^A-Z\n]").
  341.  
  342.        -      A  rule  can  have at most one instance of trailing
  343.               context (the '/' operator  or  the  '$'  operator).
  344.               The  start  condition,  '^', and "<<EOF>>" patterns
  345.               can only occur at the beginning of a pattern,  and,
  346.               as  well  as  with  '/'  and '$', cannot be grouped
  347.               inside parentheses.  The following are all illegal:
  348.  
  349.                   foo/bar$
  350.                   foo|(bar$)
  351.                   foo|^bar
  352.                   <sc1>foo<sc2>bar
  353.  
  354.  
  355. SSUUMMMMAARRYY OOFF SSPPEECCIIAALL AACCTTIIOONNSS
  356.        In  addition to arbitrary C code, the following can appear
  357.        in actions:
  358.  
  359.        -      EECCHHOO copies yytext to the scanner's output.
  360.  
  361.        -      BBEEGGIINN followed by the name  of  a  start  condition
  362.               places  the scanner in the corresponding start con-
  363.               dition.
  364.  
  365.        -      RREEJJEECCTT directs the scanner to  proceed  on  to  the
  366.               "second  best"  rule  which matched the input (or a
  367.               prefix of the input).  yyyytteexxtt and yyyylleenngg are set up
  368.               appropriately.   Note that RREEJJEECCTT is a particularly
  369.               expensive feature in terms scanner performance;  if
  370.               it  is used in _a_n_y of the scanner's actions it will
  371.               slow down _a_l_l of the scanner's matching.   Further-
  372.               more,  RREEJJEECCTT  cannot  be  used  with  the _-_f or _-_F
  373.               options.
  374.  
  375.               Note also that unlike the  other  special  actions,
  376.               RREEJJEECCTT  is  a _b_r_a_n_c_h_; code immediately following it
  377.               in the action will _n_o_t be executed.
  378.  
  379.        -      yyyymmoorree(()) tells the scanner that the  next  time  it
  380.               matches  a  rule, the corresponding token should be
  381.               _a_p_p_e_n_d_e_d onto the current value  of  yyyytteexxtt  rather
  382.               than replacing it.
  383.  
  384.        -      yyyylleessss((nn)) returns all but the first _n characters of
  385.               the current token back to the input  stream,  where
  386.               they  will  be rescanned when the scanner looks for
  387.               the next match.  yyyytteexxtt  and  yyyylleenngg  are  adjusted
  388.               appropriately  (e.g., yyyylleenngg will now be equal to _n
  389.               ).
  390.  
  391.  
  392.  
  393.  
  394. Version 2.3                26 May 1990                          6
  395.  
  396.  
  397.  
  398.  
  399.  
  400. FLEX(1)                                                   FLEX(1)
  401.  
  402.  
  403.        -      uunnppuutt((cc)) puts the character _c back onto  the  input
  404.               stream.  It will be the next character scanned.
  405.  
  406.        -      iinnppuutt(())  reads  the  next  character from the input
  407.               stream (this routine is  called  yyyyiinnppuutt(())  if  the
  408.               scanner is compiled using CC++++))..
  409.  
  410.        -      yyyytteerrmmiinnaattee(())  can  be  used  in  lieu  of a return
  411.               statement in an action.  It terminates the  scanner
  412.               and returns a 0 to the scanner's caller, indicating
  413.               "all done".
  414.  
  415.               By default, yyyytteerrmmiinnaattee(()) is also  called  when  an
  416.               end-of-file  is encountered.  It is a macro and may
  417.               be redefined.
  418.  
  419.        -      YYYY__NNEEWW__FFIILLEE is an action available only in  <<EOF>>
  420.               rules.   It  means  "Okay,  I've set up a new input
  421.               file, continue scanning".
  422.  
  423.        -      yyyy__ccrreeaattee__bbuuffffeerr(( ffiillee,, ssiizzee )) takes a _F_I_L_E pointer
  424.               and  an integer _s_i_z_e_.  It returns a YY_BUFFER_STATE
  425.               handle to a new input buffer large enough to  acco-
  426.               modate  _s_i_z_e  characters  and  associated  with the
  427.               given file.  When in doubt, use YYYY__BBUUFF__SSIIZZEE for the
  428.               size.
  429.  
  430.        -      yyyy__sswwiittcchh__ttoo__bbuuffffeerr((   nneeww__bbuuffffeerr  ))  switches  the
  431.               scanner's processing to scan for  tokens  from  the
  432.               given buffer, which must be a YY_BUFFER_STATE.
  433.  
  434.        -      yyyy__ddeelleettee__bbuuffffeerr((   bbuuffffeerr   ))  deletes  the  given
  435.               buffer.
  436.  
  437. VVAALLUUEESS AAVVAAIILLAABBLLEE TTOO TTHHEE UUSSEERR
  438.        -      cchhaarr **yyyytteexxtt holds the text of the  current  token.
  439.               It may not be modified.
  440.  
  441.        -      iinntt  yyyylleenngg  holds the length of the current token.
  442.               It may not be modified.
  443.  
  444.        -      FFIILLEE **yyyyiinn is the file which by default _f_l_e_x  reads
  445.               from.   It may be redefined but doing so only makes
  446.               sense before scanning begins.  Changing it  in  the
  447.               middle  of  scanning  will  have unexpected results
  448.               since _f_l_e_x buffers its input.  Once scanning termi-
  449.               nates  because  an  end-of-file has been seen, vvooiidd
  450.               yyyyrreessttaarrtt(( FFIILLEE **nneeww__ffiillee )) may be called to  point
  451.               _y_y_i_n at the new input file.
  452.  
  453.        -      FFIILLEE  **yyyyoouutt  is the file to which EECCHHOO actions are
  454.               done.  It can be reassigned by the user.
  455.  
  456.        -      YYYY__CCUURRRREENNTT__BBUUFFFFEERR returns a YYYY__BBUUFFFFEERR__SSTTAATTEE  handle
  457.  
  458.  
  459.  
  460. Version 2.3                26 May 1990                          7
  461.  
  462.  
  463.  
  464.  
  465.  
  466. FLEX(1)                                                   FLEX(1)
  467.  
  468.  
  469.               to the current buffer.
  470.  
  471. MMAACCRROOSS TTHHEE UUSSEERR CCAANN RREEDDEEFFIINNEE
  472.        -      YYYY__DDEECCLL   controls  how  the  scanning  routine  is
  473.               declared.  By default, it is "int yylex()", or,  if
  474.               prototypes are being used, "int yylex(void)".  This
  475.               definition  may  be  changed  by   redefining   the
  476.               "YY_DECL"  macro.   Note that if you give arguments
  477.               to the  scanning  routine  using  a  K&R-style/non-
  478.               prototyped function declaration, you must terminate
  479.               the definition with a semi-colon (;).
  480.  
  481.        -      The nature of how the scanner gets its input can be
  482.               controlled   by   redefining  the  YYYY__IINNPPUUTT  macro.
  483.               YY_INPUT's        calling        sequence        is
  484.               "YY_INPUT(buf,result,max_size)".   Its action is to
  485.               place up to _m_a_x___s_i_z_e characters  in  the  character
  486.               array _b_u_f and return in the integer variable _r_e_s_u_l_t
  487.               either the number of characters read  or  the  con-
  488.               stant  YY_NULL (0 on Unix systems) to indicate EOF.
  489.               The default YY_INPUT reads from  the  global  file-
  490.               pointer  "yyin".  A sample redefinition of YY_INPUT
  491.               (in the definitions section of the input file):
  492.  
  493.                   %{
  494.                   #undef YY_INPUT
  495.                   #define YY_INPUT(buf,result,max_size) \
  496.                       { \
  497.                       int c = getchar(); \
  498.                       result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
  499.                       }
  500.                   %}
  501.  
  502.  
  503.        -      When the scanner receives an end-of-file indication
  504.               from  YY_INPUT,  it  then checks the yyyywwrraapp(()) func-
  505.               tion.  If yyyywwrraapp(()) returns false (zero), then it is
  506.               assumed that the function has gone ahead and set up
  507.               _y_y_i_n to point to another input file,  and  scanning
  508.               continues.  If it returns true (non-zero), then the
  509.               scanner terminates, returning 0 to its caller.
  510.  
  511.               The default yyyywwrraapp(()) always returns 1.   Presently,
  512.               to  redefine  it you must first "#undef yywrap", as
  513.               it is currently implemented  as  a  macro.   It  is
  514.               likely  that  yyyywwrraapp(()) will soon be defined to be a
  515.               function rather than a macro.
  516.  
  517.        -      YY_USER_ACTION  can  be  redefined  to  provide  an
  518.               action  which  is  always  executed  prior  to  the
  519.               matched rule's action.
  520.  
  521.        -      The macro YYYY__UUSSEERR__IINNIITT may be redefined to  provide
  522.               an action which is always executed before the first
  523.  
  524.  
  525.  
  526. Version 2.3                26 May 1990                          8
  527.  
  528.  
  529.  
  530.  
  531.  
  532. FLEX(1)                                                   FLEX(1)
  533.  
  534.  
  535.               scan.
  536.  
  537.        -      In the generated scanner, the actions are all gath-
  538.               ered  in  one  large switch statement and separated
  539.               using  YYYY__BBRREEAAKK,,  which  may  be   redefined.    By
  540.               default,  it  is simply a "break", to separate each
  541.               rule's action from the following rule's.
  542.  
  543. FFIILLEESS
  544.        _f_l_e_x_._s_k_e_l
  545.               skeleton scanner.
  546.  
  547.        _l_e_x_._y_y_._c
  548.               generated scanner (called _l_e_x_y_y_._c on some systems).
  549.  
  550.        _l_e_x_._b_a_c_k_t_r_a_c_k
  551.               backtracking   information   for  --bb  flag  (called
  552.               _l_e_x_._b_c_k on some systems).
  553.  
  554.        --llffll   library with which to link the scanners.
  555.  
  556. SSEEEE AALLSSOO
  557.        flexdoc(1), lex(1), yacc(1), sed(1), awk(1).
  558.  
  559.        M. E. Lesk and E. Schmidt, _L_E_X _- _L_e_x_i_c_a_l _A_n_a_l_y_z_e_r  _G_e_n_e_r_a_-
  560.        _t_o_r
  561.  
  562. DDIIAAGGNNOOSSTTIICCSS
  563.        _r_e_j_e_c_t___u_s_e_d___b_u_t___n_o_t___d_e_t_e_c_t_e_d _u_n_d_e_f_i_n_e_d or
  564.  
  565.        _y_y_m_o_r_e___u_s_e_d___b_u_t___n_o_t___d_e_t_e_c_t_e_d  _u_n_d_e_f_i_n_e_d _- These errors can
  566.        occur at compile time.  They  indicate  that  the  scanner
  567.        uses RREEJJEECCTT or yyyymmoorree(()) but that _f_l_e_x failed to notice the
  568.        fact, meaning that _f_l_e_x scanned  the  first  two  sections
  569.        looking  for  occurrences  of  these actions and failed to
  570.        find any, but somehow you snuck some in  (via  a  #include
  571.        file,  for  example).   Make  an explicit reference to the
  572.        action in your _f_l_e_x input  file.   (Note  that  previously
  573.        _f_l_e_x  supported a %%uusseedd//%%uunnuusseedd mechanism for dealing with
  574.        this problem; this feature is still supported but now dep-
  575.        recated,  and  will  go  away soon unless the author hears
  576.        from people who can argue compellingly that they need it.)
  577.  
  578.        _f_l_e_x  _s_c_a_n_n_e_r  _j_a_m_m_e_d  _-  a  scanner  compiled with --ss has
  579.        encountered an input string which wasn't matched by any of
  580.        its rules.
  581.  
  582.        _f_l_e_x  _i_n_p_u_t  _b_u_f_f_e_r  _o_v_e_r_f_l_o_w_e_d _- a scanner rule matched a
  583.        string long enough  to  overflow  the  scanner's  internal
  584.        input  buffer  (16K  bytes  -  controlled by YYYY__BBUUFF__MMAAXX in
  585.        "flex.skel").
  586.  
  587.        _s_c_a_n_n_e_r _r_e_q_u_i_r_e_s _-_8  _f_l_a_g  _-  Your  scanner  specification
  588.        includes  recognizing  8-bit  characters  and  you did not
  589.  
  590.  
  591.  
  592. Version 2.3                26 May 1990                          9
  593.  
  594.  
  595.  
  596.  
  597.  
  598. FLEX(1)                                                   FLEX(1)
  599.  
  600.  
  601.        specify the -8 flag (and your site has not installed  flex
  602.        with -8 as the default).
  603.  
  604.        _f_a_t_a_l  _f_l_e_x _s_c_a_n_n_e_r _i_n_t_e_r_n_a_l _e_r_r_o_r_-_-_e_n_d _o_f _b_u_f_f_e_r _m_i_s_s_e_d _-
  605.        This can occur in an scanner which is  reentered  after  a
  606.        long-jump  has  jumped out (or over) the scanner's activa-
  607.        tion frame.  Before reentering the scanner, use:
  608.  
  609.            yyrestart( yyin );
  610.  
  611.  
  612.        _t_o_o _m_a_n_y _%_t _c_l_a_s_s_e_s_! _- You managed  to  put  every  single
  613.        character  into  its  own %t class.  _f_l_e_x requires that at
  614.        least one of the classes share characters.
  615.  
  616. AAUUTTHHOORR
  617.        Vern Paxson, with the help of many ideas and much inspira-
  618.        tion   from   Van   Jacobson.   Original  version  by  Jef
  619.        Poskanzer.
  620.  
  621.        See flexdoc(1) for additional credits and the  address  to
  622.        send comments to.
  623.  
  624. DDEEFFIICCIIEENNCCIIEESS // BBUUGGSS
  625.        Some  trailing context patterns cannot be properly matched
  626.        and generate warning messages  ("Dangerous  trailing  con-
  627.        text").   These are patterns where the ending of the first
  628.        part of the rule matches the beginning of the second part,
  629.        such  as  "zx*/xy*", where the 'x*' matches the 'x' at the
  630.        beginning of the trailing context.  (Note that  the  POSIX
  631.        draft  states  that  the  text matched by such patterns is
  632.        undefined.)
  633.  
  634.        For some trailing context rules, parts which are  actually
  635.        fixed-length  are  not  recognized as such, leading to the
  636.        abovementioned performance  loss.   In  particular,  parts
  637.        using  '|' or {n} (such as "foo{3}") are always considered
  638.        variable-length.
  639.  
  640.        Combining trailing context with the special '|' action can
  641.        result  in  _f_i_x_e_d  trailing  context being turned into the
  642.        more expensive _v_a_r_i_a_b_l_e trailing  context.   For  example,
  643.        this happens in the following example:
  644.  
  645.            %%
  646.            abc      |
  647.            xyz/def
  648.  
  649.  
  650.        Use of unput() invalidates yytext and yyleng.
  651.  
  652.        Use of unput() to push back more text than was matched can
  653.        result in the pushed-back text  matching  a  beginning-of-
  654.        line  ('^')  rule  even  though  it  didn't  come  at  the
  655.  
  656.  
  657.  
  658. Version 2.3                26 May 1990                         10
  659.  
  660.  
  661.  
  662.  
  663.  
  664. FLEX(1)                                                   FLEX(1)
  665.  
  666.  
  667.        beginning of the line (though this is rare!).
  668.  
  669.        Pattern-matching of NUL's  is  substantially  slower  than
  670.        matching other characters.
  671.  
  672.        _f_l_e_x  does  not generate correct #line directives for code
  673.        internal to the scanner; thus,  bugs  in  _f_l_e_x_._s_k_e_l  yield
  674.        bogus line numbers.
  675.  
  676.        Due  to both buffering of input and read-ahead, you cannot
  677.        intermix calls to <stdio.h> routines, such as,  for  exam-
  678.        ple,  ggeettcchhaarr(()),,  with  _f_l_e_x  rules and expect it to work.
  679.        Call iinnppuutt(()) instead.
  680.  
  681.        The total table entries listed by the --vv flag excludes the
  682.        number  of table entries needed to determine what rule has
  683.        been matched.  The number of entries is equal to the  num-
  684.        ber  of DFA states if the scanner does not use RREEJJEECCTT,, and
  685.        somewhat greater than the number of states if it does.
  686.  
  687.        RREEJJEECCTT cannot be used with the _-_f or _-_F options.
  688.  
  689.        Some of the macros, such as yyyywwrraapp(()),, may  in  the  future
  690.        become  functions  which  live  in the --llffll library.  This
  691.        will doubtless break a lot of code, but  may  be  required
  692.        for POSIX-compliance.
  693.  
  694.        The _f_l_e_x internal algorithms need documentation.
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.  
  704.  
  705.  
  706.  
  707.  
  708.  
  709.  
  710.  
  711.  
  712.  
  713.  
  714.  
  715.  
  716.  
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724. Version 2.3                26 May 1990                         11
  725.  
  726.  
  727.