YAY - a LALR parser generator.
Syntax:
          yay sourcefile Parser=outfile [option]*

          (+|-)LR2 (-)            (+|-)Verbose (-)
          (+|-)Warnings (+)       Description=file
          Header=file             INSTallation=file
          Language=C|C++ (C)      Parser=file

Examples:
          yay cgram.y parse=myparse.c
          c myparse.c

          yay ccgram.y lang=c++ pars=myparse.cpp

Options:
sourcefile
     is a file containing YAY input.

Language=C
     produces parsing  tables in the C programming language.
     This is the default.

Language=C++
     produces  parsing   tables  in   the  C++   programming
     language.   Note that YAY only produces the tables; the
     routines  that  use  the  tables  to  parse  input  are
     predefined.

+LR2
     says that  the YAY  input describes an LALR(2) grammar.
     Without +LR2,  YAY assumes that the grammar is LALR(1).
     The manual describes modifications that need to be made
     for LALR(2) grammars.

Description=file
     translates the parsing tables into a format that humans
     can read, and writes this output into the given file.

Header=file
     writes  token   definitions   and   other   information
     necessary for separate compilation, to the named file.

INSTallation=file
     tells YAY  where to  find the  installation file.   The
     installation  file   tells   where   various   software
     components have  been installed.  For more information,
     see the section on Installation Files below.
     If you  do not  specify an  INSTallation= option on the
     command line,  YAY checks  for an  environment variable
     named YAY_INST  and uses  its value  as the name of the
     installation file.   If  this environment variable does
     not exist, YAY uses the default installation file.

Parser=file
     writes the  resulting source  code for  the parser into
     the named  file.   If this  option is omitted, YAY just
     checks the syntax of your input.

+Verbose
     produces verbose  output  --  everything  that  can  be
     flagged is flagged.

-Warnings
     suppresses  a  number  of  warning  messages  that  YAY
     normally issues.

Description:
    YAY converts  your context-free  grammar into a C or C++
program that is written to the file specified by the Parser=
option.

    If you  use the  Description= option,  YAY writes a full
description of  the grammar to the specified file.  YAY only
displays a brief message on the standard output, summarizing
conflicts (and  other information  if you specify +Verbose).
On the  other hand,  if you  do  not  use  the  Description=
option, YAY  writes more  information  to  standard  output,
including descriptions  of the states where conflicts occur.
In this  case, YAY  actually provides additional information
to help you identify the source of the conflicts; if you ask
for a  description file,  YAY outputs  less information when
reporting the  conflicts because  it assumes  you can  track
down additional  information by  looking at  the description
file.  For this reason, you can sometimes get a quicker idea
of what  has gone  wrong if you do not ask for a description
file.

C++ Parsers
    In general,  you only  need to  use Language=C++  if you
intend YYSTYPE  to contain  a C++  object with constructors.
If you  intend to compile the parser with C++ but the %union
statement does not have any elements that need constructors,
it's best to use Language=C to get more efficient C code.

    If YYSTYPE does contain elements that need constructors,
you need  to define an appropriate constructor-like function
for the  YYSTYPE  type.    This  function  should  have  the
prototype

          void name(YYSTYPE *p)

where "name"  can be  any valid  name.   In the declarations
section of the grammar, you must then add the statement

          #define YYSTYPE_INIT name

where "name" is the name of the constructor-like function.

    With Language=C++,  the  %union  statement  generates  a
structure type rather than a union, since C++ does not allow
objects with constructors to belong to unions.

    In many  cases, the  same grammar  may be processed with
either Language=C or Language=C++.

Installation Files:
    An  installation   file  specifies   the  pathnames  for
software and data files used by YAY.  Installation files are
text files made up of comment lines and option lines.

Comment lines:
     Any line  whose first  non-blank character is # will be
     taken as  a comment.   Blank  lines are also considered
     comments.

Option lines:
     Option lines have the format

          Keyword=pathname

     In this  documentation, keywords  are written with some
     letters in  upper case and some in lower case.  You may
     abbreviate keywords  by omitting  any  or  all  of  the
     letters shown in lower case.  The remaining letters may
     be  entered   in  either   upper  or  lower  case;  the
     documentation simply  uses upper  case  to  show  which
     characters may not be omitted.

    In this  version of  YAY, there is only one valid option
line:

          Library=pathname

The pathname  should be  the directory  containing  the  YAY
parser template files (e.g. yyparse.c).

Notes:
    If you  define YYALLOC,  the parser  allocates its state
and value  stacks dynamically  via malloc  and free.    This
shrinks your parser and helps prevent stack overflows.

Copyright 1995, Thinkage Ltd.
