Man Linux: Main Page and Category List

NAME

       re2c - convert regular-expressions to C/C++

SYNOPSIS

       re2c [-bdDefFghisuvVw1] [-o output] [-c [-t header]] file

DESCRIPTION

       re2c  is a preprocessor that generates C-based recognizers from regular
       expressions.  The input to re2c consists of  C/C++  source  interleaved
       with  comments  of  the  form  /*!re2c  ...  */  which  contain scanner
       specifications.  In the output these comments are  replaced  with  code
       that,  when  executed,  will find the next input token and then execute
       some user-supplied token-specific code.

       For example, given the following code

          char *scan(char *p)
          {
          /*!re2c
                  re2c:define:YYCTYPE  = "unsigned char";
                  re2c:define:YYCURSOR = p;
                  re2c:yyfill:enable   = 0;
                  re2c:yych:conversion = 1;
                  re2c:indent:top      = 1;
                  [0-9]+          {return p;}
                  [^]             {return (char*)0;}
          */
          }

       re2c -is will generate

          /* Generated by re2c on Sat Apr 16 11:40:58 1994 */
          char *scan(char *p)
          {
              {
                  unsigned char yych;

                  yych = (unsigned char)*p;
                  if(yych <= ’/’) goto yy4;
                  if(yych >= ’:’) goto yy4;
                  ++p;
                  yych = (unsigned char)*p;
                  goto yy7;
          yy3:
                  {return p;}
          yy4:
                  ++p;
                  yych = (unsigned char)*p;
                  {return char*)0;}
          yy6:
                  ++p;
                  yych = (unsigned char)*p;
          yy7:
                  if(yych <= ’/’) goto yy3;
                  if(yych <= ’9’) goto yy6;
                  goto yy3;
              }

          }

       You can place one /*!max:re2c */ comment that will  output  a  "#define
       YYMAXFILL  <n>"  line  that  holds  the  maximum  number  of characters
       required to parse the input. That is the maximum value  YYFILL(n)  will
       receive.  If  -1 is in effect then YYMAXFILL can only be triggered once
       after the last /*!re2c */.

       You can also use /*!ignore:re2c */ blocks that allows to  document  the
       scanner code and will not be part of the output.

OPTIONS

       re2c provides the following options:

       -?     -h Invoke a short help.

       -b     Implies  -s.   Use  bit  vectors  as well in the attempt to coax
              better code out of the compiler.  Most useful for specifications
              with  more  than  a  few  keywords  (e.g.  for  most programming
              languages).

       -c     Used to support (f)lex-like condition support.

       -d     Creates a  parser  that  dumps  information  about  the  current
              position  and  in  which  state  the parser is while parsing the
              input. This is useful to debug parser issues and states. If  you
              use  this  switch  you  need  to  define a macro YYDEBUG that is
              called like a function with  two  parameters:  void  YYDEBUG(int
              state,  char current). The first parameter receives the state or
              -1 and the second parameter receives the input  at  the  current
              cursor.

       -D     Emit Graphviz dot data. It can then be processed with e.g.  "dot
              -Tpng input.dot > output.png". Please note  that  scanners  with
              many states may crash dot.

       -e     Cross-compile from an ASCII platform to an EBCDIC one.

       -f     Generate a scanner with support for storable state.  For details
              see below at SCANNER WITH STORABLE STATES.

       -F     Partial support for flex syntax. When this flag is  active  then
              named  definitions must be surrounded by curly braces and can be
              defined without an equal sign and the  terminating  semi  colon.
              Instead names are treated as direct double quoted strings.

       -g     Generate  a  scanner  that utilizes GCC’s computed goto feature.
              That is re2c generates jump tables whenever a decision is  of  a
              certain  complexity  (e.g.  a lot of if conditions are otherwise
              necessary). This is only useable with GCC  and  produces  output
              that  cannot be compiled with any other compiler. Note that this
              implies -b and that the complexity threshold can  be  configured
              using the inplace configuration "cgoto:threshold".

       -i     Do  not  output #line information. This is usefull when you want
              use a CMS tool with the re2c output which you might want if  you
              do  not require your users to have re2c themselves when building
              from your source.  -o output Specify the output file.

       -r     Allows reuse of scanner  definitions  with  ’/*!use:re2c’  after
              every ’/*!use:re2c’ block that follows. These blocks can contain
              inplace   configurations,    especially    ’re2c:flags:w’    and
              ’re2c:flags:u’.   That  way  it  is  possible to create the same
              scanner multiple times for different character types,  different
              input   mechanisms   or   different   output   mechanisms.   The
              ’/*!use:re2c’ blocks can also contain additional rules that will
              be appended to the set of rules in ’/*!rules:re2c’.

       -s     Generate nested ifs for some switches.  Many compilers need this
              assist to generate better code.

       -t     Create a header file that contains  types  for  the  (f)lex-like
              condition  support.   This  can  only be activated when -c is in
              use.

       -u     Generate a parser that supports  Unicode  chars  (UTF-32).  This
              means  the  generated  code  can  deal  with  any  valid Unicode
              character up to 0x10FFFF. When  UTF-8  or  UTF-16  needs  to  be
              supported you need to convert the incoming stream to UTF-32 upon
              input yourself.

       -v     Show version information.

       -V     Show the version as a number XXYYZZ.

       -w     Create a parser that supports wide chars (UCS-2).  This  implies
              -s and cannot be used together with -e switch.

       -1     Force  single  pass  generation, this cannot be combined with -f
              and disables YYMAXFILL generation prior to last re2c block.

       --no-generation-date
              Suppress date output in the generated output  so  that  it  only
              shows the re2c version.

       --case-insensitive
              All  strings  are  case  insensitive,  so  all "-expressions are
              treated in the same way ’-expressions are.

       --case-inverted
              Invert the meaning of single and double  quoted  strings.   With
              this  switch  single quotes are case sensitive and double quotes
              are case insensitive.

INTERFACE CODE

       Unlike other  scanner  generators,  re2c  does  not  generate  complete
       scanners: the user must supply some interface code.  In particular, the
       user must define the following macros or use the corresponding  inplace
       configurations:

       YYCONDTYPE
              In  -c  mode you can use -t to generate a file that contains the
              enumeration used as conditions. Each of the values refers  to  a
              condition of a rule set.

       YYCTXMARKER
              l-expression   of  type  *YYCTYPE.   The  generated  code  saves
              trailing context backtracking information in  YYCTXMARKER.   The
              user  only needs to define this macro if a scanner specification
              uses trailing context in one or more of its regular-expressions.

       YYCTYPE
              Type  used  to  hold  an input symbol.  Usually char or unsigned
              char.

       YYCURSOR
              l-expression of type *YYCTYPE that points to the  current  input
              symbol.   The  generated  code  advances YYCURSOR as symbols are
              matched.  On entry, YYCURSOR is assumed to point  to  the  first
              character of the current token.  On exit, YYCURSOR will point to
              the first character of the following token.

       YYDEBUG(state,current)
              This is only needed if the -d flag was specified. It  allows  to
              easily  debug  the  generated  parser  by calling a user defined
              function for every state. The function should have the following
              signature:  void  YYDEBUG(int  state,  char current).  The first
              parameter receives the state or  -1  and  the  second  parameter
              receives the input at the current cursor.

       YYFILL(n)
              The  generated  code  "calls"  YYFILL(n)  when  the buffer needs
              (re)filling:   at  least  n  additional  characters  should   be
              provided.  YYFILL(n)  should  adjust YYCURSOR, YYLIMIT, YYMARKER
              and YYCTXMARKER as needed.  Note that  for  typical  programming
              languages  n will be the length of the longest keyword plus one.
              The user can place a comment of the form /*!max:re2c */ once  to
              insert  a  YYMAXFILL(n)  definition  that  is set to the maximum
              length value. If  -1  switch  is  used  then  YYMAXFILL  can  be
              triggered only once after the last /*!re2c */ block.

       YYGETCONDITION()
              This  define  is used to get the condition prior to entering the
              scanner code when using -c switch. The value must be initialized
              with a value from the enumeration YYCONDTYPE type.

       YYGETSTATE()
              The  user  only  needs  to  define this macro if the -f flag was
              specified.   In  that   case,   the   generated   code   "calls"
              YYGETSTATE()  at  the  very beginning of the scanner in order to
              obtain the  saved  state.  YYGETSTATE()  must  return  a  signed
              integer.  The  value  must  be  either  -1,  indicating that the
              scanner is entered for the first time,  or  a  value  previously
              saved  by  YYSETSTATE(s).   In the second case, the scanner will
              resume operations right  after  where  the  last  YYFILL(n)  was
              called.

       YYLIMIT
              Expression  of  type  *YYCTYPE  that marks the end of the buffer
              (YYLIMIT[-1]  is  the  last  character  in  the  buffer).    The
              generated  code  repeatedly  compares  YYCURSOR  to  YYLIMIT  to
              determine when the buffer needs (re)filling.

       YYMARKER
              l-expression  of  type  *YYCTYPE.   The  generated  code   saves
              backtracking  information  in YYMARKER. Some easy scanners might
              not use this.

       YYMAXFILL
              This will be automatically defined by /*!max:re2c */  blocks  as
              explained above.

       YYSETCONDITION(c)
              This  define  is  used to set the condition in transition rules.
              This is only being used when -c is active and  transition  rules
              are being used.

       YYSETSTATE(s)
              The  user  only  needs  to  define this macro if the -f flag was
              specified.  In that case, the generated code "calls"  YYSETSTATE
              just before calling YYFILL(n).  The parameter to YYSETSTATE is a
              signed integer that uniquely identifies the specific instance of
              YYFILL(n)  that  is about to be called.  Should the user wish to
              save the state of the scanner and have YYFILL(n) return  to  the
              caller,  all  he  has  to do is store that unique identifer in a
              variable.  Later, when the scannered is called  again,  it  will
              call  YYGETSTATE() and resume execution right where it left off.
              The  generated  code  will  contain   both   YYSETSTATE(s)   and
              YYGETSTATE even if YYFILL(n) is being disabled.

SCANNER WITH STORABLE STATES

       When  the -f flag is specified, re2c generates a scanner that can store
       its current state, return to the caller, and  later  resume  operations
       exactly where it left off.

       The default operation of re2c is a "pull" model, where the scanner asks
       for extra input whenever it needs it. However, this mode  of  operation
       assumes  that the scanner is the "owner" the parsing loop, and that may
       not always be convenient.

       Typically, if there is a preprocessor  ahead  of  the  scanner  in  the
       stream,  or  for  that  matter any other procedural source of data, the
       scanner cannot "ask" for more data unless both scanner and source  live
       in a separate threads.

       The  -f  flag  is useful for just this situation : it lets users design
       scanners that work in a "push" model, i.e. where data  is  fed  to  the
       scanner  chunk  by chunk. When the scanner runs out of data to consume,
       it just stores its state, and return to the  caller.  When  more  input
       data is fed to the scanner, it resumes operations exactly where it left
       off.

       When using the -f option re2c does not accept stdin because it  has  to
       do  the  full  generation  process twice which means it has to read the
       input twice. That means re2c would fail in  case  it  cannot  open  the
       input  twice  or  reading  the  input for the first time influences the
       second read attempt.

       Changes needed compared to the "pull" model.

       1. User has to supply macros YYSETSTATE() and YYGETSTATE(state)

       2. The -f option inhibits declaration of yych and yyaccept. So the user
       has  to  declare these. Also the user has to save and restore these. In
       the example examples/push.re these are declared as fields of the  (C++)
       class  of  which  the  scanner  is  a method, so they do not need to be
       saved/restored explicitly. For C they could e.g. be  made  macros  that
       select  fields  from a structure passed in as parameter. Alternatively,
       they could be declared as local variables, saved with YYFILL(n) when it
       decides to return and restored at entry to the function. Also, it could
       be  more  efficient  to  save  the   state   from   YYFILL(n)   because
       YYSETSTATE(state) is called unconditionally. YYFILL(n) however does not
       get state as parameter, so we would have to  store  state  in  a  local
       variable by YYSETSTATE(state).

       3.  Modify  YYFILL(n)  to return (from the function calling it) if more
       input is needed.

       4. Modify caller to  recognise  "more  input  is  needed"  and  respond
       appropriately.

       5.  The  generated  code  will  contain  a switch block that is used to
       restores the last state by jumping  behind  the  corrspoding  YYFILL(n)
       call.  This  code is automatically generated in the epilog of the first
       "/*!re2c */" block.  It  is  possible  to  trigger  generation  of  the
       YYGETSTATE()  block earlier by placing a "/*!getstate:re2c */" comment.
       This is especially useful when  the  scanner  code  should  be  wrapped
       inside a loop.

       Please  see examples/push.re for push-model scanner. The generated code
       can  be  tweaked  using  inplace   configurations   "state:abort"   and
       "state:nextlabel".

SCANNER WITH CONDITION SUPPORT

       You can preceed regular-expressions with a list of condition names when
       using the -c switch. In this case re2c  generates  scanner  blocks  for
       each  conditon.  Where  each  of  the  generated  blocks  has  its  own
       precondition.  The  precondition  is  given  by  the  interface  define
       YYGETCONDITON and must be of type YYCONDTYPE.

       There are two special rule types. First, the rules of the condition ’*’
       are merged to all  conditions. And  second  the  empty  condition  list
       allows  to  provide  a  code  block  that does not have a scanner part.
       Meaning it does not allow any regular expression. The  condition  value
       referring  to this special block is always the one with the enumeration
       value 0. This way the  code  of  this  special  rule  can  be  used  to
       initialize  a  scanner.  It is in no way necessary to have these rules:
       but sometimes it is helpful to have a dedicated uninitialized condition
       state.

       Non  empty  rules  allow to specify the new condition, which makes them
       transition   rules.   Besides   generating   calls   for   the   define
       YYSETCONDTITION no other special code is generated.

       There  is  another  kind of special rules that allow to prepend code to
       any code block of all rules of a certain set of conditions  or  to  all
       code  blocks  to  all rules. This can be helpful when some operation is
       common among rules. For instance this can be used to store  the  length
       of  the  scanned  string.  These  special  setup  rules  start  with an
       exclamation mark followed by either a list of conditions <!  condition,
       ...  >  or  a star <!*>.  When re2c generates the code for a rule whose
       state does not have a setup rule and a star’d setup  rule  is  present,
       than that code will be used as setup code.

SCANNER SPECIFICATIONS

       Each   scanner   specification  consists  of  a  set  of  rules,  named
       definitions and configurations.

       Rules consist of a regular-expression along with a block of C/C++  code
       that  is  to  be  executed  when  the  associated regular-expression is
       matched. You can either start the code with an opening curly  brace  or
       the  sequence  ’:=’.  When the code with a curly brace then re2c counts
       the brace depth and stops looking  for  code  automatically.  Otherwise
       curly  braces  are  not  allowed and re2c stops looking for code at the
       first line that does not begin with whitespace.

              regular-expression { C/C++ code }

              regular-expression := C/C++ code

       If -c is active then each regular-expression is preceeded by a list  of
       comma  separated condition names. Besides normal naming rules there are
       two special cases. A rule may contain the single condition name ’*’ and
       no  contition  name  at  all. In the latter case the rule cannot have a
       regular-expression. Non empty rules may further more  specify  the  new
       condition.  In  that  case  re2c  will  generated the necessary code to
       chnage the condition automatically. Just as above code can  be  started
       with  a  curly  brace  of the sequence ’:=’. Further more rules can use
       ’:=>’ as a shortcut to automatically generate code that not  only  sets
       the  new  condition  state  but  also  continues execution with the new
       state. A shortcut rule should not be used in a loop where there is code
       between  the start of the loop and the re2c block unless re2c:cond:goto
       is changed to ’continue;’. If code is necessary before all rule (though
       not simple jumps) you can doso by using <! pseudo-rules.

              <condition-list> regular-expression { C/C++ code }

              <condition-list> regular-expression := C/C++ code

              <condition-list> regular-expression => condition { C/C++ code }

              <condition-list> regular-expression => condition := C/C++ code

              <condition-list> regular-expression :=> condition

              <*> regular-expression { C/C++ code }

              <*> regular-expression := C/C++ code

              <*> regular-expression => condition { C/C++ code }

              <*> regular-expression => condition := C/C++ code

              <*> regular-expression :=> condition

              <> { C/C++ code }

              <> := C/C++ code

              <> => condition { C/C++ code }

              <> => condition := C/C++ code

              <> :=> condition

              <!condition-list> { C/C++ code }

              <!condition-list> := C/C++ code

              <!*> { C/C++ code }

              <!*> := C/C++ code

       Named definitions are of the form:

              name = regular-expression;

       -F is active, then named definitions are also of the form:

              name regular-expression

       Configurations  look  like  named  definitions  whose  names start with
       "re2c:":

              re2c:name = value;
              re2c:name = "value";

SUMMARY OF RE2C REGULAR-EXPRESSIONS

       "foo"  the literal string foo.  ANSI-C escape sequences can be used.

       the literal string foo (characters [a-zA-Z] treated  case-insensitive).
              ANSI-C escape sequences can be used.

       [xyz]  a  "character  class";  in  this  case,  the  regular-expression
              matches either an ’x’, a ’y’, or a ’z’.

       [abj-oZ]
              a  "character  class" with a range in it; matches an ’a’, a ’b’,
              any letter from ’j’ through ’o’, or a ’Z’.

       [^class]
              an inverted "character class".

       r\s    match any r  which  isn’t  an  s.  r  and  s  must  be  regular-
              expressions which can be expressed as character classes.

       r*     zero or more r’s, where r is any regular-expression

       r+     one or more r’s

       r?     zero or one r’s (that is, "an optional r")

       name   the expansion of the "named definition" (see above)

       (r)    an r; parentheses are used to override precedence (see below)

       rs     an r followed by an s ("concatenation")

       r|s    either an r or an s

       r/s    an  r  but  only if it is followed by an s. The s is not part of
              the matched text. This  type  of  regular-expression  is  called
              "trailing  context". A trailing context can only be the end of a
              rule and not part of a named definition.

       r{n}   matches r exactly n times.

       r{n,}  matches r at least n times.

       r{n,m} matches r at least n but not more than m times.

       match any character except newline (\n).

       def    matches named definition as specified by def only if -F is  off.
              If  the  switch  -F  is  active  then  this  behaves like it was
              enclosed in double quotes and matches the string def.

       Character classes and string literals may contain octoal or hexadecimal
       character definitions and the following set of escape sequences (\n,
        \t,  \v,  \b,  \r,  \f,  \a,  \\).  An octal character is defined by a
       backslash  followed  by  its  three  octal  digits  and  a  hexadecimal
       character  is  defined  by  backslash,  a  lower  cased ’x’ and its two
       hexadecimal digits or a backslash,  an  upper  cased  X  and  its  four
       hexadecimal digits.

       re2c  further  more  supports  the  c/c++  unicode  notation. That is a
       backslash followed by either a lowercased u and  its  four  hexadecimal
       digits  or  an  uppercased  U and its eight hexadecimal digits. However
       only in -u mode the generated code can  deal  with  any  valid  Unicode
       character up to 0x10FFFF.

       Since  characters  greater  \X00FF are not allowed in non unicode mode,
       the only portable "any" rules are (.|"\n") and [^].

       The  regular-expressions  listed  above  are   grouped   according   to
       precedence, from highest precedence at the top to lowest at the bottom.
       Those grouped together have equal precedence.

INPLACE CONFIGURATION

       It is possible to configure code generation  inside  re2c  blocks.  The
       following lists the available configurations:

       re2c:condprefix = yyc_ ;
              Allows  to specify the prefix used for condition labels. That is
              this text is prepended to any condition label in  the  generated
              output file.

       re2c:condenumprefix = yyc ;
              Allows  to specify the prefix used for condition values. That is
              this text is prepended  to  any  condition  enum  value  in  the
              generated output file.

       re2c:cond:divider = "/* *********************************** */" ;
              Allows  to  customize  the devider for condition blocks. You can
              use ’@@’ to put the  name  of  the  condition  or  ustomize  the
              plaeholder using re2c:cond:divider@cond.

       re2c:cond:divider@cond = @@ ;
              Specifies  the  placeholder  that  will  be  replaced  with  the
              condition name in re2c:cond:divider.

       re2c:cond:goto = "goto @@;" ;
              Allows to customize the  condition  goto  statements  used  with
              ’:=>’  style  rules.   You  can  use ’@@’ to put the name of the
              condition or ustomize the plaeholder using  re2c:cond:goto@cond.
              You  can  also change this to ’continue;’, which would allow you
              to continue with the next loop cycle including any code  between
              loop start and re2c block.

       re2c:cond:goto@cond = @@ ;
              Spcifies   the  placeholder  that  will  be  replaced  with  the
              condition label in re2c:cond:goto.

       re2c:indent:top = 0 ;
              Specifies the minimum number of indendation to use.  Requires  a
              numeric value greater than or equal zero.

       re2c:indent:string = "\t" ;
              Specifies  the  string to use for indendation. Requires a string
              that should contain only whitespace unless  you  need  this  for
              external  tools. The easiest way to specify spaces is to enclude
              them in single  or  double  quotes.  If  you  do  not  want  any
              indendation at all you can simply set this to "".

       re2c:yych:conversion = 0 ;
              When this setting is non zero, then re2c automatically generates
              conversion code whenever yych gets read. In this case  the  type
              must be defined using re2c:define:YYCTYPE.

       re2c:yych:emit = 1 ;
              Generation of yych can be suppressed by setting this to 0.

       re2c:yybm:hex = 0 ;
              If  set  to  zero  then  a  decimal  table  is being used else a
              hexadecimal table will be generated.

       re2c:yyfill:enable = 1 ;
              Set this to zero to suppress generation of YYFILL(n). When using
              this  be sure to verify that the generated scanner does not read
              behind input.  Allowing  this  behavior  might  introduce  sever
              security issues to you programs.

       re2c:yyfill:check = 1 ;
              This  can be set 0 to suppress output of the pre condition using
              YYCURSOR and  YYLIMIT  which  becomes  usefull  when  YYLIMIT  +
              max(YYFILL) is always accessible.

       re2c:yyfill:parameter = 1 ;
              Allows  to suppress parameter passing to YYFILL calls. If set to
              zero  then  no  parameter   is   passed   to   YYFILL.   However
              define:YYFILL@LEN allows to specify a replacement string for the
              actual length value. If set to a  non  zero  value  then  YYFILL
              usage  will be followed by the number of requested characters in
              braces unless re2c:define:YYFILL:naked is  set.   Also  look  at
              re2c:define:YYFILL:naked and re2c:define:YYFILL@LEN.

       re2c:startlabel = 0 ;
              If  set  to  a non zero integer then the start label of the next
              scanner blocks will be generated even if not used by the scanner
              itself.  Otherwise the normal yy0 like start label is only being
              generated if needed. If set to a text value then  a  label  with
              that  text  will  be  generated regardless of whether the normal
              start label is being used or not. This setting is being reset to
              0 after a start label has been generated.

       re2c:labelprefix = yy ;
              Allows  to  change the prefix of numbered labels. The default is
              yy and can be set any string that is a valid label.

       re2c:state:abort = 0 ;
              When not zero and switch -f is active then the YYGETSTATE  block
              will  contain  a  default case that aborts and a -1 case is used
              for initialization.

       re2c:state:nextlabel = 0 ;
              Used when -f is active to control whether the  YYGETSTATE  block
              is followed by a yyNext: label line. Instead of using yyNext you
              can  usually  also  use  configuration  startlabel  to  force  a
              specific  start  label or default to yy0 as start label. Instead
              of using a dedicated label it is often better  to  separate  the
              YYGETSTATE  code  from  the  actual  scanner  code  by placing a
              "/*!getstate:re2c */" comment.

       re2c:cgoto:threshold = 9 ;
              When -g is active this value specifies the complexity  threshold
              that triggers generation of jump tables rather than using nested
              if’s and decision bitfields.  The threshold is compared  against
              a  calculated  estimation of if-s needed where every used bitmap
              divides the threshold by 2.

       re2c:yych:conversion = 0 ;
              When the input uses signed characters and -s or -b switches  are
              in  effect  re2c allows to automatically convert to the unsigned
              character type that is then necessary for  its  internal  single
              character.  When  this  setting  is  zero or an empty string the
              conversion is disabled. Using a non zero number  the  conversion
              is   taken  from  YYCTYPE.  If  that  is  given  by  an  inplace
              configuration that value is being used.  Otherwise  it  will  be
              (YYCTYPE)  and  changes  to  that  configuration  are  no longer
              possible. When this setting is  a  string  the  braces  must  be
              specified. Now assuming your input is a char* buffer and you are
              using above mentioned switches you can set YYCTYPE  to  unsigned
              char and this setting to either 1 or "(unsigned char)".

       re2c:define:define:YYCONDTYPE = YYCONDTYPE ;
              Enumeration used for condition support with -c mode.

       re2c:define:YYCTXMARKER = YYCTXMARKER ;
              Allows  to overwrite the define YYCTXMARKER and thus avoiding it
              by setting the value to the actual code needed.

       re2c:define:YYCTYPE = YYCTYPE ;
              Allows to overwrite the define YYCTYPE and thus avoiding  it  by
              setting the value to the actual code needed.

       re2c:define:YYCURSOR = YYCURSOR ;
              Allows  to overwrite the define YYCURSOR and thus avoiding it by
              setting the value to the actual code needed.

       re2c:define:YYDEBUG = YYDEBUG ;
              Allows to overwrite the define YYDEBUG and thus avoiding  it  by
              setting the value to the actual code needed.

       re2c:define:YYFILL = YYFILL ;
              Allows  to  overwrite  the define YYFILL and thus avoiding it by
              setting the value to the actual code needed.

       re2c:define:YYFILL:naked = 0 ;
              When set to 1  neither  braces,  parameter  nor  semicolon  gets
              emitted.

       re2c:define:YYFILL@len = @@ ;
              When  using  re2c:define:YYFILL  and  re2c:yyfill:parameter is 0
              then any occurence of this text inside YYFILL will  be  replaced
              with the actual length value.

       re2c:define:YYGETCONDITION = YYGETCONDITION ;
              Allows to overwrite the define YYGETCONDITION.

       re2c:define:YYGETCONDITION:naked =  ;
              When  set  to  1  neither  braces,  parameter nor semicolon gets
              emitted.

       re2c:define:YYGETSTATE = YYGETSTATE ;
              Allows to overwrite the define YYGETSTATE and thus  avoiding  it
              by setting the value to the actual code needed.

       re2c:define:YYGETSTATE:naked = 0 ;
              When  set  to  1  neither  braces,  parameter nor semicolon gets
              emitted.

       re2c:define:YYLIMIT = YYLIMIT ;
              Allows to overwrite the define YYLIMIT and thus avoiding  it  by
              setting the value to the actual code needed.

       re2c:define:YYMARKER = YYMARKER ;
              Allows  to overwrite the define YYMARKER and thus avoiding it by
              setting the value to the actual code needed.

       re2c:define:YYSETCONDITION = YYSETCONDITION ;
              Allows to overwrite the define YYSETCONDITION.

       re2c:define:YYSETCONDITION@cond = @@ ;
              When using re2c:define:YYSETCONDITION then any occurence of this
              text  inside YYSETCONDITION will be replaced with the actual new
              condition value.

       re2c:define:YYSETSTATE = YYSETSTATE ;
              Allows to overwrite the define YYSETSTATE and thus  avoiding  it
              by setting the value to the actual code needed.

       re2c:define:YYSETSTATE:naked = 0 ;
              When  set  to  1  neither  braces,  parameter nor semicolon gets
              emitted.

       re2c:define:YYSETSTATE@state = @@ ;
              When using re2c:define:YYSETSTATE then  any  occurence  of  this
              text  inside  YYSETSTATE  will  be  replaced with the actual new
              state value.

       re2c:label:yyFillLabel = yyFillLabel ;
              Allows to overwrite the name of the label yyFillLabel.

       re2c:label:yyNext = yyNext ;
              Allows to overwrite the name of the label yyNext.

       re2c:variable:yyaccept = yyaccept ;
              Allows to overwrite the name of the variable yyaccept.

       re2c:variable:yybm = yybm ;
              Allows to overwrite the name of the variable yybm.

       re2c:variable:yych = yych ;
              Allows to overwrite the name of the variable yych.

       re2c:variable:yyctable = yyctable ;
              When both -c and -g are active then re2c uses this  variable  to
              generate a static jump table for YYGETCONDITION.

       re2c:variable:yystable = yystable ;
              When  both  -f and -g are active then re2c uses this variable to
              generate a static jump table for YYGETSTATE.

       re2c:variable:yytarget = yytarget ;
              Allows to overwrite the name of the variable yytarget.

UNDERSTANDING RE2C

       The subdirectory lessons of the re2c distribution contains a  few  step
       by  step  lessons  to  get  you  started with re2c. All examples in the
       lessons subdirectory can be compiled and actually work.

FEATURES

       re2c does not provide a default action: the generated code assumes that
       the  input will consist of a sequence of tokens.  Typically this can be
       dealt with by adding a rule such as the one for  unexpected  characters
       in the example above.

       The  user  must  arrange  for  a sentinel token to appear at the end of
       input (and provide a rule for matching it): re2c does  not  provide  an
       <<EOF>>  expression.   If  the  source  is  from a null-byte terminated
       string, a rule matching a null character will suffice.  If  the  source
       is  from  a  file  then you could pad the input with a newline (or some
       other  character  that  cannot  appear  within  another  token);   upon
       recognizing such a character check to see if it is the sentinel and act
       accordingly. And you can also use YYFILL(n) to end the scanner in  case
       not  enough  characters  are  available  which  is  nothing else then e
       detection of end of data/file.

BUGS

       Difference only works for character sets.

       The re2c internal algorithms need documentation.

SEE ALSO

       flex(1), lex(1).

       More information on re2c can be found here:
       http://re2c.org/

AUTHORS

       Peter Bumbulis <peter@csg.uwaterloo.ca>
       Brian Young <bayoung@acm.org>
       Dan Nuffer <nuffer@users.sourceforge.net>
       Marcus Boerger <helly@users.sourceforge.net>
       Hartmut Kaiser <hkaiser@users.sourceforge.net>
       Emmanuel Mogenet <mgix@mgix.com> added storable state

VERSION INFORMATION

       This manpage describes re2c, version 0.13.5.