CHANGES_FROM_1.33
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:165k
源码类别:

编译器/解释器

开发平台:

Others

  1. =======================================================================
  2. List of Implemented Fixes and Changes for Maintenance Releases of PCCTS
  3. =======================================================================
  4.                                DISCLAIMER
  5.  The software and these notes are provided "as is".  They may include
  6.  typographical or technical errors and their authors disclaims all
  7.  liability of any kind or nature for damages due to error, fault,
  8.  defect, or deficiency regardless of cause.  All warranties of any
  9.  kind, either express or implied, including, but not limited to, the
  10.  implied  warranties of merchantability and fitness for a particular
  11.  purpose are disclaimed.
  12. #197. (Changed in MR14) Resetting the lookahead buffer of the parser
  13.       Explanation and fix by Sinan Karasu (sinan.karasu@boeing.com)
  14.       Consider the code used to prime the lookahead buffer LA(i)
  15.       of the parser when init() is called:
  16.         void
  17.         ANTLRParser::
  18.         prime_lookahead()
  19.         {
  20.             int i;
  21.             for(i=1;i<=LLk; i++) consume();
  22.             dirty=0;
  23.             //lap = 0;      // MR14 - Sinan Karasu (sinan.karusu@boeing.com)
  24.             //labase = 0;   // MR14
  25.             labase=lap;     // MR14
  26.         }
  27.       When the parser is instantiated, lap=0,labase=0 is set.
  28.       The "for" loop runs LLk times. In consume(), lap = lap +1 (mod LLk) is
  29.       computed.  Therefore, lap(before the loop) == lap (after the loop).
  30.       Now the only problem comes in when one does an init() of the parser
  31.       after an Eof has been seen. At that time, lap could be non zero.
  32.       Assume it was lap==1. Now we do a prime_lookahead(). If LLk is 2,
  33.       then
  34.         consume()
  35.         {
  36.             NLA = inputTokens->getToken()->getType();
  37.             dirty--;
  38.             lap = (lap+1)&(LLk-1);
  39.         }
  40.       or expanding NLA,
  41.         token_type[lap&(LLk-1)]) = inputTokens->getToken()->getType();
  42.         dirty--;
  43.         lap = (lap+1)&(LLk-1);
  44.       so now we prime locations 1 and 2.  In prime_lookahead it used to set
  45.       lap=0 and labase=0.  Now, the next token will be read from location 0,
  46.       NOT 1 as it should have been.
  47.       This was never caught before, because if a parser is just instantiated,
  48.       then lap and labase are 0, the offending assignment lines are
  49.       basically no-ops, since the for loop wraps around back to 0.
  50. #196. (Changed in MR14) Problems with "(alpha)? beta" guess
  51.     Consider the following syntactic predicate in a grammar
  52.     with 2 tokens of lookahead (k=2 or ck=2):
  53.         rule  : ( alpha )? beta ;
  54.         alpha : S t ;
  55.         t     : T U
  56.               | T
  57.               ;
  58.         beta  : S t Z ;
  59.     When antlr computes the prediction expression with one token
  60.     of lookahead for alts 1 and 2 of rule t it finds an ambiguity.
  61.     Because the grammar has a lookahead of 2 it tries to compute
  62.     two tokens of lookahead for alts 1 and 2 of t.  Alt 1 clearly
  63.     has a lookahead of (T U).  Alt 2 is one token long so antlr
  64.     tries to compute the follow set of alt 2, which means finding
  65.     the things which can follow rule t in the context of (alpha)?.
  66.     This cannot be computed, because alpha is only part of a rule,
  67.     and antlr can't tell what part of beta is matched by alpha and
  68.     what part remains to be matched.  Thus it impossible for antlr
  69.     to  properly determine the follow set of rule t.
  70.     Prior to 1.33MR14, the follow of (alpha)? was computed as
  71.     FIRST(beta) as a result of the internal representation of
  72.     guess blocks.
  73.     With MR14 the follow set will be the empty set for that context.
  74.     Normally, one expects a rule appearing in a guess block to also
  75.     appear elsewhere.  When the follow context for this other use
  76.     is "ored" with the empty set, the context from the other use
  77.     results, and a reasonable follow context results.  However if
  78.     there is *no* other use of the rule, or it is used in a different
  79.     manner then the follow context will be inaccurate - it was
  80.     inaccurate even before MR14, but it will be inaccurate in a
  81.     different way.
  82.     For the example given earlier, a reasonable way to rewrite the
  83.     grammar:
  84.         rule  : ( alpha )? beta
  85.         alpha : S t ;
  86.         t     : T U
  87.               | T
  88.               ;
  89.         beta  : alpha Z ;
  90.     If there are no other uses of the rule appearing in the guess
  91.     block it will generate a test for EOF - a workaround for
  92.     representing a null set in the lookahead tests.
  93.     If you encounter such a problem you can use the -alpha option
  94.     to get additional information:
  95.     line 2: error: not possible to compute follow set for alpha
  96.               in an "(alpha)? beta" block.
  97.     With the antlr -alpha command line option the following information
  98.     is inserted into the generated file:
  99.     #if 0
  100.       Trace of references leading to attempt to compute the follow set of
  101.       alpha in an "(alpha)? beta" block. It is not possible for antlr to
  102.       compute this follow set because it is not known what part of beta has
  103.       already been matched by alpha and what part remains to be matched.
  104.       Rules which make use of the incorrect follow set will also be incorrect
  105.          1 #token T              alpha/2   line 7     brief.g
  106.          2 end alpha             alpha/3   line 8     brief.g
  107.          2 end (...)? block at   start/1   line 2     brief.g
  108.     #endif
  109.     At the moment, with the -alpha option selected the program marks
  110.     any rules which appear in the trace back chain (above) as rules with
  111.     possible problems computing follow set.
  112.     Reported by Greg Knapen (gregory.knapen@bell.ca).
  113. #195. (Changed in MR14) #line directive not at column 1
  114.       Under certain circunstances a predicate test could generate
  115.       a #line directive which was not at column 1.
  116.       Reported with fix by David K錱edal  (davidk@lysator.liu.se)
  117.       (http://www.lysator.liu.se/~davidk/).
  118. #194. (Changed in MR14) (C Mode only) Demand lookahead with #tokclass
  119.       In C mode with the demand lookahead option there is a bug in the
  120.       code which handles matches for #tokclass (zzsetmatch and
  121.       zzsetmatch_wsig).
  122.       The bug causes the lookahead pointer to get out of synchronization
  123.       with the current token pointer.
  124.       The problem was reported with a fix by Ger Hobbelt (hobbelt@axa.nl).
  125. #193. (Changed in MR14) Use of PCCTS_USE_NAMESPACE_STD
  126.       The pcctscfg.h now contains the following definitions:
  127.         #ifdef PCCTS_USE_NAMESPACE_STD
  128.         #define PCCTS_STDIO_H     <Cstdio>
  129.         #define PCCTS_STDLIB_H    <Cstdlib>
  130.         #define PCCTS_STDARG_H    <Cstdarg>
  131.         #define PCCTS_SETJMP_H    <Csetjmp>
  132.         #define PCCTS_STRING_H    <Cstring>
  133.         #define PCCTS_ASSERT_H    <Cassert>
  134.         #define PCCTS_ISTREAM_H   <istream>
  135.         #define PCCTS_IOSTREAM_H  <iostream>
  136.         #define PCCTS_NAMESPACE_STD     namespace std {}; using namespace std;
  137.         #else
  138.         #define PCCTS_STDIO_H     <stdio.h>
  139.         #define PCCTS_STDLIB_H    <stdlib.h>
  140.         #define PCCTS_STDARG_H    <stdarg.h>
  141.         #define PCCTS_SETJMP_H    <setjmp.h>
  142.         #define PCCTS_STRING_H    <string.h>
  143.         #define PCCTS_ASSERT_H    <assert.h>
  144.         #define PCCTS_ISTREAM_H   <istream.h>
  145.         #define PCCTS_IOSTREAM_H  <iostream.h>
  146.         #define PCCTS_NAMESPACE_STD
  147.         #endif
  148.       The runtime support in pccts/h uses these pre-processor symbols
  149.       consistently.
  150.       Also, antlr and dlg have been changed to generate code which uses
  151.       these pre-processor symbols rather than having the names of the
  152.       #include files hard-coded in the generated code.
  153.       This required the addition of "#include pcctscfg.h" to a number of
  154.       files in pccts/h.
  155.       It appears that this sometimes causes problems for MSVC 5 in
  156.       combination with the "automatic" option for pre-compiled headers.
  157.       In such cases disable the "automatic" pre-compiled headers option.
  158.       Suggested by Hubert Holin (Hubert.Holin@Bigfoot.com).
  159. #192. (Changed in MR14) Change setText() to accept "const ANTLRChar *"
  160.       Changed ANTLRToken::setText(ANTLRChar *) to setText(const ANTLRChar *).
  161.       This allows literal strings to be used to initialize tokens.  Since
  162.       the usual token implementation (ANTLRCommonToken)  makes a copy of the
  163.       input string, this was an unnecessary limitation.
  164.       Suggested by Bob McWhirter (bob@netwrench.com).
  165. #191. (Changed in MR14) HP/UX aCC compiler compatibility problem
  166.       Needed to explicitly declare zzINF_DEF_TOKEN_BUFFER_SIZE and
  167.       zzINF_BUFFER_TOKEN_CHUNK_SIZE as ints in pccts/h/AParser.cpp.
  168.       Reported by David Cook (dcook@bmc.com).
  169. #190. (Changed in MR14) IBM OS/2 CSet compiler compatibility problem
  170.       Name conflict with "_cs" in pccts/h/ATokenBuffer.cpp
  171.       Reported by David Cook (dcook@bmc.com).
  172. #189. (Changed in MR14) -gxt switch in C mode
  173.       The -gxt switch in C mode didn't work because of incorrect
  174.       initialization.
  175.       Reported by Sinan Karasu (sinan@boeing.com).
  176. #188. (Changed in MR14) Added pccts/h/DLG_stream_input.h
  177.       This is a DLG stream class based on C++ istreams.
  178.       Contributed by Hubert Holin (Hubert.Holin@Bigfoot.com).
  179. #187. (Changed in MR14) Rename config.h to pcctscfg.h
  180.       The PCCTS configuration file has been renamed from config.h to
  181.       pcctscfg.h.  The problem with the original name is that it led
  182.       to name collisions when pccts parsers were combined with other
  183.       software.
  184.       All of the runtime support routines in pccts/h/* have been
  185.       changed to use the new name.  Existing software can continue
  186.       to use pccts/h/config.h. The contents of pccts/h/config.h is
  187.       now just "#include "pcctscfg.h".
  188.       I don't have a record of the user who suggested this.
  189. #186. (Changed in MR14) Pre-processor symbol DllExportPCCTS class modifier
  190.       Classes in the C++ runtime support routines are now declared:
  191.         class DllExportPCCTS className ....
  192.       By default, the pre-processor symbol is defined as the empty
  193.       string.  This if for use by MSVC++ users to create DLL classes.
  194.       Suggested by Manfred Kogler (km@cast.uni-linz.ac.at).
  195. #185. (Changed in MR14) Option to not use PCCTS_AST base class for ASTBase
  196.       Normally, the ASTBase class is derived from PCCTS_AST which contains
  197.       functions useful to Sorcerer.  If these are not necessary then the
  198.       user can define the pre-processor symbol "PCCTS_NOT_USING_SOR" which
  199.       will cause the ASTBase class to replace references to PCCTS_AST with
  200.       references to ASTBase where necessary.
  201.       The class ASTDoublyLinkedBase will contain a pure virtual function
  202.       shallowCopy() that was formerly defined in class PCCTS_AST.
  203.       Suggested by Bob McWhirter (bob@netwrench.com).
  204. #184. (Changed in MR14) Grammars with no tokens generate invalid tokens.h
  205.       Reported by Hubert Holin (Hubert.Holin@bigfoot.com).
  206. #183. (Changed in MR14) -f to specify file with names of grammar files
  207.       In DEC/VMS it is difficult to specify very long command lines.
  208.       The -f option allows one to place the names of the grammar files
  209.       in a data file in order to bypass limitations of the DEC/VMS
  210.       command language interpreter.
  211.       Addition supplied by Bernard Giroud (b_giroud@decus.ch).
  212. #182. (Changed in MR14) Output directory option for DEC/VMS
  213.       Fix some problems with the -o option under DEC/VMS.
  214.       Fix supplied by Bernard Giroud (b_giroud@decus.ch).
  215. #181. (Changed in MR14) Allow chars > 127 in DLGStringInput::nextChar()
  216.       Changed DLGStringInput to cast the character using (unsigned char)
  217.       so that languages with character codes greater than 127 work
  218.       without changes.
  219.       Suggested by Manfred Kogler (km@cast.uni-linz.ac.at).
  220. #180. (Added in MR14) ANTLRParser::getEofToken()
  221.       Added "ANTLRToken ANTLRParser::getEofToken() const" to match the
  222.       setEofToken routine.
  223.       Requested by Manfred Kogler (km@cast.uni-linz.ac.at).
  224. #179. (Fixed in MR14) Memory leak for BufFileInput subclass of DLGInputStream
  225.       The BufFileInput class described in Item #142 neglected to release
  226.       the allocated buffer when an instance was destroyed.
  227.       Reported by Manfred Kogler (km@cast.uni-linz.ac.at).
  228. #178. (Fixed in MR14) Bug in "(alpha)? beta" guess blocks first sets
  229.       In 1.33 vanilla, and all maintenance releases prior to MR14
  230.       there is a bug in the handling of guess blocks which use the
  231.       "long" form:
  232.                   (alpha)? beta
  233.       inside a (...)*, (...)+, or {...} block.
  234.       This problem does *not* apply to the case where beta is omitted
  235.       or when the syntactic predicate is on the leading edge of an
  236.       alternative.
  237.       The problem is that both alpha and beta are stored in the
  238.       syntax diagram, and that some analysis routines would fail
  239.       to skip the alpha portion when it was not on the leading edge.
  240.       Consider the following grammar with -ck 2:
  241.                 r : ( (A)? B )* C D
  242.                   | A B      /* forces -ck 2 computation for old antlr    */
  243.                              /*              reports ambig for alts 1 & 2 */
  244.                   | B C      /* forces -ck 2 computation for new antlr    */
  245.                              /*              reports ambig for alts 1 & 3 */
  246.                   ;
  247.       The prediction expression for the first alternative should be
  248.       LA(1)={B C} LA(2)={B C D}, but previous versions of antlr
  249.       would compute the prediction expression as LA(1)={A C} LA(2)={B D}
  250.       Reported by Arpad Beszedes (beszedes@inf.u-szeged.hu) who provided
  251.       a very clear example of the problem and identified the probable cause.
  252. #177. (Changed in MR14) #tokdefs and #token with regular expression
  253.       In MR13 the change described by Item #162 caused an existing
  254.       feature of antlr to fail.  Prior to the change it was possible
  255.       to give regular expression definitions and actions to tokens
  256.       which were defined via the #tokdefs directive.
  257.       This now works again.
  258.       Reported by Manfred Kogler (km@cast.uni-linz.ac.at).
  259. #176. (Changed in MR14) Support for #line in antlr source code
  260.       Note: this was implemented by Arpad Beszedes (beszedes@inf.u-szeged.hu).
  261.       In 1.33MR14 it is possible for a pre-processor to generate #line
  262.       directives in the antlr source and have those line numbers and file
  263.       names used in antlr error messages and in the #line directives
  264.       generated by antlr.
  265.       The #line directive may appear in the following forms:
  266.             #line ll "sss" xx xx ...
  267.       where ll represents a line number, "sss" represents the name of a file
  268.       enclosed in quotation marks, and xxx are arbitrary integers.
  269.       The following form (without "line") is not supported at the moment:
  270.             # ll "sss" xx xx ...
  271.       The result:
  272.         zzline
  273.             is replaced with ll from the # or #line directive
  274.         FileStr[CurFile]
  275.             is updated with the contents of the string (if any)
  276.             following the line number
  277.       Note
  278.       ----
  279.       The file-name string following the line number can be a complete
  280.       name with a directory-path. Antlr generates the output files from
  281.       the input file name (by replacing the extension from the file-name
  282.       with .c or .cpp).
  283.       If the input file (or the file-name from the line-info) contains
  284.       a path:
  285.         "../grammar.g"
  286.       the generated source code will be placed in "../grammar.cpp" (i.e.
  287.       in the parent directory).  This is inconvenient in some cases
  288.       (even the -o switch can not be used) so the path information is
  289.       removed from the #line directive.  Thus, if the line-info was
  290.         #line 2 "../grammar.g"
  291.       then the current file-name will become "grammar.g"
  292.       In this way, the generated source code according to the grammar file
  293.       will always be in the current directory, except when the -o switch
  294.       is used.
  295. #175. (Changed in MR14) Bug when guess block appears at start of (...)*
  296.       In 1.33 vanilla and all maintenance releases prior to 1.33MR14
  297.       there is a bug when a guess block appears at the start of a (...)+.
  298.       Consider the following k=1 (ck=1) grammar:
  299.             rule :
  300.                   ( (STAR)? ZIP )* ID ;
  301.       Prior to 1.33MR14, the generated code resembled:
  302.         ...
  303.         zzGUESS_BLOCK
  304.         while ( 1 ) {
  305.             if ( ! LA(1)==STAR) break;
  306.             zzGUESS
  307.             if ( !zzrv ) {
  308.                 zzmatch(STAR);
  309.                 zzCONSUME;
  310.                 zzGUESS_DONE
  311.                 zzmatch(ZIP);
  312.                 zzCONSUME;
  313.             ...
  314.       Note that the routine uses STAR for the prediction expression
  315.       rather than ZIP.  With 1.33MR14 the generated code resembles:
  316.         ...
  317.         while ( 1 ) {
  318.             if ( ! LA(1)==ZIP) break;
  319.         ...
  320.       This problem existed only with (...)* blocks and was caused
  321.       by the slightly more complicate graph which represents (...)*
  322.       blocks.  This caused the analysis routine to compute the first
  323.       set for the alpha part of the "(alpha)? beta" rather than the
  324.       beta part.
  325.       Both (...)+ and {...} blocks handled the guess block correctly.
  326.       Reported by Arpad Beszedes (beszedes@inf.u-szeged.hu) who provided
  327.       a very clear example of the problem and identified the probable cause.
  328. #174. (Changed in MR14) Bug when action precedes syntactic predicate
  329.       In 1.33 vanilla, and all maintenance releases prior to MR14,
  330.       there was a bug when a syntactic predicate was immediately
  331.       preceded by an action.  Consider the following -ck 2 grammar:
  332.             rule :
  333.                    <<int i;>>
  334.                    (alpha)? beta C
  335.                  | A B
  336.                  ;
  337.             alpha : A ;
  338.             beta  : A B;
  339.       Prior to MR14, the code generated for the first alternative
  340.       resembled:
  341.         ...
  342.         zzGUESS
  343.         if ( !zzrv && LA(1)==A && LA(2)==A) {
  344.             alpha();
  345.             zzGUESS_DONE
  346.             beta();
  347.             zzmatch(C);
  348.             zzCONSUME;
  349.         } else {
  350.         ...
  351.       The prediction expression (i.e. LA(1)==A && LA(2)==A) is clearly
  352.       wrong because LA(2) should be matched to B (first[2] of beta is {B}).
  353.       With 1.33MR14 the prediction expression is:
  354.         ...
  355.         if ( !zzrv && LA(1)==A && LA(2)==B) {
  356.             alpha();
  357.             zzGUESS_DONE
  358.             beta();
  359.             zzmatch(C);
  360.             zzCONSUME;
  361.         } else {
  362.         ...
  363.       This will only affect users in which alpha is shorter than
  364.       than max(k,ck) and there is an action immediately preceding
  365.       the syntactic predicate.
  366.       This problem was reported by reported by Arpad Beszedes
  367.       (beszedes@inf.u-szeged.hu) who provided a very clear example
  368.       of the problem and identified the presence of the init-action
  369.       as the likely culprit.
  370. #173. (Changed in MR13a) -glms for Microsoft style filenames with -gl
  371.       With the -gl option antlr generates #line directives using the
  372.       exact name of the input files specified on the command line.
  373.       An oddity of the Microsoft C and C++ compilers is that they
  374.       don't accept file names in #line directives containing ""
  375.       even though these are names from the native file system.
  376.       With -glms option, the "" in file names appearing in #line
  377.       directives is replaced with a "/" in order to conform to
  378.       Microsoft compiler requirements.
  379.       Reported by Erwin Achermann (erwin.achermann@switzerland.org).
  380. #172. (Changed in MR13) rn in antlr source counted as one line
  381.       Some MS software uses rn to indicate a new line.  Antlr
  382.       now recognizes this in counting lines.
  383.       Reported by Edward L. Hepler (elh@ece.vill.edu).
  384. #171. (Changed in MR13) #tokclass L..U now allowed
  385.       The following is now allowed:
  386.             #tokclass ABC { A..B C }
  387.       Reported by Dave Watola (dwatola@amtsun.jpl.nasa.gov)
  388. #170. (Changed in MR13) Suppression for predicates with lookahead depth >1
  389.       In MR12 the capability for suppression of predicates with lookahead
  390.       depth=1 was introduced.  With MR13 this had been extended to
  391.       predicates with lookahead depth > 1 and released for use by users
  392.       on an experimental basis.
  393.       Consider the following grammar with -ck 2 and the predicate in rule
  394.       "a" with depth 2:
  395.             r1  : (ab)* "@"
  396.                 ;
  397.             ab  : a
  398.                 | b
  399.                 ;
  400.             a   : (A B)? => <<p(LATEXT(2))>>? A B C
  401.                 ;
  402.             b   : A B C
  403.                 ;
  404.       Normally, the predicate would be hoisted into rule r1 in order to
  405.       determine whether to call rule "ab".  However it should *not* be
  406.       hoisted because, even if p is false, there is a valid alternative
  407.       in rule b.  With "-mrhoistk on" the predicate will be suppressed.
  408.       If "-info p" command line option is present the following information
  409.       will appear in the generated code:
  410.                 while ( (LA(1)==A)
  411.         #if 0
  412.         Part (or all) of predicate with depth > 1 suppressed by alternative
  413.             without predicate
  414.         pred  <<  p(LATEXT(2))>>?
  415.                   depth=k=2  ("=>" guard)  rule a  line 8  t1.g
  416.           tree context:
  417.             (root = A
  418.                B
  419.             )
  420.         The token sequence which is suppressed: ( A B )
  421.         The sequence of references which generate that sequence of tokens:
  422.            1 to ab          r1/1       line 1     t1.g
  423.            2 ab             ab/1       line 4     t1.g
  424.            3 to b           ab/2       line 5     t1.g
  425.            4 b              b/1        line 11    t1.g
  426.            5 #token A       b/1        line 11    t1.g
  427.            6 #token B       b/1        line 11    t1.g
  428.         #endif
  429.       A slightly more complicated example:
  430.             r1  : (ab)* "@"
  431.                 ;
  432.             ab  : a
  433.                 | b
  434.                 ;
  435.             a   : (A B)? => <<p(LATEXT(2))>>? (A  B | D E)
  436.                 ;
  437.             b   : <<q(LATEXT(2))>>? D E
  438.                 ;
  439.       In this case, the sequence (D E) in rule "a" which lies behind
  440.       the guard is used to suppress the predicate with context (D E)
  441.       in rule b.
  442.                 while ( (LA(1)==A || LA(1)==D)
  443.             #if 0
  444.             Part (or all) of predicate with depth > 1 suppressed by alternative
  445.                 without predicate
  446.             pred  <<  q(LATEXT(2))>>?
  447.                               depth=k=2  rule b  line 11  t2.g
  448.               tree context:
  449.                 (root = D
  450.                    E
  451.                 )
  452.             The token sequence which is suppressed: ( D E )
  453.             The sequence of references which generate that sequence of tokens:
  454.                1 to ab          r1/1       line 1     t2.g
  455.                2 ab             ab/1       line 4     t2.g
  456.                3 to a           ab/1       line 4     t2.g
  457.                4 a              a/1        line 8     t2.g
  458.                5 #token D       a/1        line 8     t2.g
  459.                6 #token E       a/1        line 8     t2.g
  460.             #endif
  461.             &&
  462.             #if 0
  463.             pred  <<  p(LATEXT(2))>>?
  464.                               depth=k=2  ("=>" guard)  rule a  line 8  t2.g
  465.               tree context:
  466.                 (root = A
  467.                    B
  468.                 )
  469.             #endif
  470.             (! ( LA(1)==A && LA(2)==B ) || p(LATEXT(2)) )  {
  471.                 ab();
  472.                 ...
  473. #169. (Changed in MR13) Predicate test optimization for depth=1 predicates
  474.       When the MR12 generated a test of a predicate which had depth 1
  475.       it would use the depth >1 routines, resulting in correct but
  476.       inefficient behavior.  In MR13, a bit test is used.
  477. #168. (Changed in MR13) Token expressions in context guards
  478.       The token expressions appearing in context guards such as:
  479.             (A B)? => <<test(LT(1))>>?  someRule
  480.       are computed during an early phase of antlr processing.  As
  481.       a result, prior to MR13, complex expressions such as:
  482.             ~B
  483.             L..U
  484.             ~L..U
  485.             TokClassName
  486.             ~TokClassName
  487.       were not computed properly.  This resulted in incorrect
  488.       context being computed for such expressions.
  489.       In MR13 these context guards are verified for proper semantics
  490.       in the initial phase and then re-evaluated after complex token
  491.       expressions have been computed in order to produce the correct
  492.       behavior.
  493.       Reported by Arpad Beszedes (beszedes@inf.u-szeged.hu).
  494. #167. (Changed in MR13) ~L..U
  495.       Prior to MR13, the complement of a token range was
  496.       not properly computed.
  497. #166. (Changed in MR13) token expression L..U
  498.       The token U was represented as an unsigned char, restricting
  499.       the use of L..U to cases where U was assigned a token number
  500.       less than 256.  This is corrected in MR13.
  501. #165. (Changed in MR13) option -newAST
  502.       To create ASTs from an ANTLRTokenPtr antlr usually calls
  503.       "new AST(ANTLRTokenPtr)".  This option generates a call
  504.       to "newAST(ANTLRTokenPtr)" instead.  This allows a user
  505.       to define a parser member function to create an AST object.
  506.       Similar changes for ASTBase::tmake and ASTBase::link were not
  507.       thought necessary since they do not create AST object, only
  508.       use existing ones.
  509. #164. (Changed in MR13) Unused variable _astp
  510.       For many compilations, we have lived with warnings about
  511.       the unused variable _astp.  It turns out that this varible
  512.       can *never* be used because the code which references it was
  513.       commented out.
  514.       This investigation was sparked by a note from Erwin Achermann
  515.       (erwin.achermann@switzerland.org).
  516. #163. (Changed in MR13) Incorrect makefiles for testcpp examples
  517.       All the examples in pccts/testcpp/* had incorrect definitions
  518.       in the makefiles for the symbol "CCC".  Instead of CCC=CC they
  519.       had CC=$(CCC).
  520.       There was an additional problem in testcpp/1/test.g due to the
  521.       change in ANTLRToken::getText() to a const member function
  522.       (Item #137).
  523.       Reported by Maurice Mass (maas@cuci.nl).
  524. #162. (Changed in MR13) Combining #token with #tokdefs
  525.       When it became possible to change the print-name of a
  526.       #token (Item #148) it became useful to give a #token
  527.       statement whose only purpose was to giving a print name
  528.       to the #token.  Prior to this change this could not be
  529.       combined with the #tokdefs feature.
  530. #161. (Changed in MR13) Switch -gxt inhibits generation of tokens.h
  531. #160. (Changed in MR13) Omissions in list of names for remap.h
  532.       When a user selects the -gp option antlr creates a list
  533.       of macros in remap.h to rename some of the standard
  534.       antlr routines from zzXXX to userprefixXXX.
  535.       There were number of omissions from the remap.h name
  536.       list related to the new trace facility.  This was reported,
  537.       along with a fix, by Bernie Solomon (bernard@ug.eds.com).
  538. #159. (Changed in MR13) Violations of classic C rules
  539.       There were a number of violations of classic C style in
  540.       the distribution kit.  This was reported, along with fixes,
  541.       by Bernie Solomon (bernard@ug.eds.com).
  542. #158. (Changed in MR13) #header causes problem for pre-processors
  543.       A user who runs the C pre-processor on antlr source suggested
  544.       that another syntax be allowed.  With MR13 such directives
  545.       such as #header, #pragma, etc. may be written as "#header",
  546.       "#pragma", etc.  For escaping pre-processor directives inside
  547.       a #header use something like the following:
  548.             #header
  549.             <<
  550.                 #include <stdio.h>
  551.             >>
  552. #157. (Fixed in MR13) empty error sets for rules with infinite recursion
  553.       When the first set for a rule cannot be computed due to infinite
  554.       left recursion and it is the only alternative for a block then
  555.       the error set for the block would be empty.  This would result
  556.       in a fatal error.
  557.       Reported by Darin Creason (creason@genedax.com)
  558. #156. (Changed in MR13) DLGLexerBase::getToken() now public
  559. #155. (Changed in MR13) Context behind predicates can suppress
  560.       With -mrhoist enabled the context behind a guarded predicate can
  561.       be used to suppress other predicates.  Consider the following grammar:
  562.         r0 : (r1)+;
  563.         r1  : rp
  564.             | rq
  565.             ;
  566.         rp  : <<p LATEXT(1)>>? B ;
  567.         rq : (A)? => <<q LATEXT(1)>>? (A|B);
  568.       In earlier versions both predicates "p" and "q" would be hoisted into
  569.       rule r0. With MR12c predicate p is suppressed because the context which
  570.       follows predicate q includes "B" which can "cover" predicate "p".  In
  571.       other words, in trying to decide in r0 whether to call r1, it doesn't
  572.       really matter whether p is false or true because, either way, there is
  573.       a valid choice within r1.
  574. #154. (Changed in MR13) Making hoist suppression explicit using <<nohoist>>
  575.       A common error, even among experienced pccts users, is to code
  576.       an init-action to inhibit hoisting rather than a leading action.
  577.       An init-action does not inhibit hoisting.
  578.       This was coded:
  579.         rule1 : <<;>> rule2
  580.       This is what was meant:
  581.         rule1 : <<;>> <<;>> rule2
  582.       With MR13, the user can code:
  583.         rule1 : <<;>> <<nohoist>> rule2
  584.       The following will give an error message:
  585.         rule1 : <<nohoist>> rule2
  586.       If the <<nohoist>> appears as an init-action rather than a leading
  587.       action an error message is issued.  The meaning of an init-action
  588.       containing "nohoist" is unclear: does it apply to just one
  589.       alternative or to all alternatives ?
  590. #153. (Changed in MR12b) Bug in computation of -mrhoist suppression set
  591.       Consider the following grammar with k=1 and "-mrhoist on":
  592.             r1  : (A)? => ((p>>? x      /* l1 */
  593.                 | r2                    /* l2 */
  594.                 ;
  595.             r2  :  A                    /* l4 */
  596.                 | (B)? => <<q>>? y      /* l5 */
  597.                 ;
  598.       In earlier versions the mrhoist routine would see that both l1 and
  599.       l2 contained predicates and would assume that this prevented either
  600.       from acting to suppress the other predicate.  In the example above
  601.       it didn't realize the A at line l4 is capable of suppressing the
  602.       predicate at l1 even though alt l2 contains (indirectly) a predicate.
  603.       This is fixed  in MR12b.
  604.       Reported by Reinier van den Born (reinier@vnet.ibm.com)
  605. #153. (Changed in MR12a) Bug in computation of -mrhoist suppression set
  606.       An oversight similar to that described in Item #152 appeared in
  607.       the computation of the set that "covered" a predicate.  If a
  608.       predicate expression included a term such as p=AND(q,r) the context
  609.       of p was taken to be context(q) & context(r), when it should have
  610.       been context(q) | context(r).  This is fixed in MR12a.
  611. #152. (Changed in MR12) Bug in generation of predicate expressions
  612.       The primary purpose for MR12 is to make quite clear that MR11 is
  613.       obsolete and to fix the bug related to predicate expressions.
  614.       In MR10 code was added to optimize the code generated for
  615.       predicate expression tests.  Unfortunately, there was a
  616.       significant oversight in the code which resulted in a bug in
  617.       the generation of code for predicate expression tests which
  618.       contained predicates combined using AND:
  619.             r0 : (r1)* "@" ;
  620.             r1 : (AAA)? => <<p LATEXT(1)>>? r2 ;
  621.             r2 : (BBB)? => <<q LATEXT(1)>>? Q
  622.                | (BBB)? => <<r LATEXT(1)>>? Q
  623.                ;
  624.       In MR11 (and MR10 when using "-mrhoist on") the code generated
  625.       for r0 to predict r1 would be equivalent to:
  626.         if ( LA(1)==Q &&
  627.                 (LA(1)==AAA && LA(1)==BBB) &&
  628.                     ( p && ( q || r )) ) {
  629.       This is incorrect because it expresses the idea that LA(1)
  630.       *must* be AAA in order to attempt r1, and *must* be BBB to
  631.       attempt r2.  The result was that r1 became unreachable since
  632.       both condition can not be simultaneously true.
  633.       The general philosophy of code generation for predicates
  634.       can be summarized as follows:
  635.             a. If the context is true don't enter an alt
  636.                for which the corresponding predicate is false.
  637.                If the context is false then it is okay to enter
  638.                the alt without evaluating the predicate at all.
  639.             b. A predicate created by ORing of predicates has
  640.                context which is the OR of their individual contexts.
  641.             c. A predicate created by ANDing of predicates has
  642.                (surprise) context which is the OR of their individual
  643.                contexts.
  644.             d. Apply these rules recursively.
  645.             e. Remember rule (a)
  646.       The correct code should express the idea that *if* LA(1) is
  647.       AAA then p must be true to attempt r1, but if LA(1) is *not*
  648.       AAA then it is okay to attempt r1, provided that *if* LA(1) is
  649.       BBB then one of q or r must be true.
  650.         if ( LA(1)==Q &&
  651.                 ( !(LA(1)==AAA || LA(1)==BBB) ||
  652.                     ( ! LA(1) == AAA || p) &&
  653.                     ( ! LA(1) == BBB || q || r ) ) ) {
  654.       I believe this is fixed in MR12.
  655.       Reported by Reinier van den Born (reinier@vnet.ibm.com)
  656. #151a. (Changed in MR12) ANTLRParser::getLexer()
  657.       As a result of several requests, I have added public methods to
  658.       get a pointer to the lexer belonging to a parser.
  659.             ANTLRTokenStream *ANTLRParser::getLexer() const
  660.                 Returns a pointer to the lexer being used by the
  661.                 parser.  ANTLRTokenStream is the base class of
  662.                 DLGLexer
  663.             ANTLRTokenStream *ANTLRTokenBuffer::getLexer() const
  664.                 Returns a pointer to the lexer being used by the
  665.                 ANTLRTokenBuffer.  ANTLRTokenStream is the base
  666.                 class of DLGLexer
  667.       You must manually cast the ANTLRTokenStream to your program's
  668.       lexer class. Because the name of the lexer's class is not fixed.
  669.       Thus it is impossible to incorporate it into the DLGLexerBase
  670.       class.
  671. #151b.(Changed in MR12) ParserBlackBox member getLexer()
  672.       The template class ParserBlackBox now has a member getLexer()
  673.       which returns a pointer to the lexer.
  674. #150. (Changed in MR12) syntaxErrCount and lexErrCount now public
  675.       See Item #127 for more information.
  676. #149. (Changed in MR12) antlr option -info o (letter o for orphan)
  677.       If there is more than one rule which is not referenced by any
  678.       other rule then all such rules are listed.  This is useful for
  679.       alerting one to rules which are not used, but which can still
  680.       contribute to ambiguity.  For example:
  681.             start : a Z ;
  682.             unused: a A ;
  683.             a     : (A)+ ;
  684.       will cause an ambiguity report for rule "a" which will be
  685.       difficult to understand if the user forgets about rule "unused"
  686.       simply because it is not used in the grammar.
  687. #148. (Changed in MR11) #token names appearing in zztokens,token_tbl
  688.       In a #token statement like the following:
  689.             #token Plus "+"
  690.       the string "Plus" appears in the zztokens array (C mode) and
  691.       token_tbl (C++ mode).  This string is used in most error
  692.       messages.  In MR11 one has the option of using some other string,
  693.       (e.g.  "+") in those tables.
  694.       In MR11 one can write:
  695.             #token Plus ("+")             "+"
  696.             #token RP   ("(")             "("
  697.             #token COM  ("comment begin") "/*"
  698.       A #token statement is allowed to appear in more than one #lexclass
  699.       with different regular expressions.  However, the token name appears
  700.       only once in the zztokens/token_tbl array.  This means that only
  701.       one substitute can be specified for a given #token name.  The second
  702.       attempt to define a substitute name (different from the first) will
  703.       result in an error message.
  704. #147. (Changed in MR11) Bug in follow set computation
  705.       There is a bug in 1.33 vanilla and all maintenance releases
  706.       prior to MR11 in the computation of the follow set.  The bug is
  707.       different than that described in Item #82 and probably more
  708.       common.  It was discovered in the ansi.g grammar while testing
  709.       the "ambiguity aid" (Item #119). The search for a bug started
  710.       when the ambiguity aid was unable to discover the actual source
  711.       of an ambiguity reported by antlr.
  712.       The problem appears when an optimization of the follow set
  713.       computation is used inappropriately.  The result is that the
  714.       follow set used is the "worst case".  In other words, the error
  715.       can lead to false reports of ambiguity.  The good news is that
  716.       if you have a grammar in which you have addressed all reported
  717.       ambiguities you are ok.  The bad news is that you may have spent
  718.       time fixing ambiguities that were not real, or used k=2 when
  719.       ck=2 might have been sufficient, and so on.
  720.       The following grammar demonstrates the problem:
  721.         ------------------------------------------------------------
  722.             expr          :   ID ;
  723.             start         :   stmt SEMI ;
  724.             stmt          :   CASE expr COLON
  725.                           |   expr SEMI
  726.                           |   plain_stmt
  727.                           ;
  728.             plain_stmt    :   ID COLON ;
  729.         ------------------------------------------------------------
  730.       When compiled with k=1 and ck=2 it will report:
  731.          warning: alts 2 and 3 of the rule itself ambiguous upon
  732.                                              { IDENTIFIER }, { COLON }
  733.       When antlr analyzes "stmt" it computes the first[1] set of all
  734.       alternatives.  It finds an ambiguity between alts 2 and 3 for ID.
  735.       It then computes the first[2] set for alternatives 2 and 3 to resolve
  736.       the ambiguity.  In computing the first[2] set of "expr" (which is
  737.       only one token long) it needs to determine what could follow "expr".
  738.       Under a certain combination of circumstances antlr forgets that it
  739.       is trying to analyze "stmt" which can only be followed by SEMI and
  740.       adds to the first[2] set of "expr" the "global" follow set (including
  741.       "COLON") which could follow "expr" (under other conditions) in the
  742.       phrase "CASE expr COLON".
  743. #146. (Changed in MR11) Option -treport for locating "difficult" alts
  744.       It can be difficult to determine which alternatives are causing
  745.       pccts to work hard to resolve an ambiguity.  In some cases the
  746.       ambiguity is successfully resolved after much CPU time so there
  747.       is no message at all.
  748.       A rough measure of the amount of work being peformed which is
  749.       independent of the CPU speed and system load is the number of
  750.       tnodes created.  Using "-info t" gives information about the
  751.       total number of tnodes created and the peak number of tnodes.
  752.         Tree Nodes:  peak 1300k  created 1416k  lost 0
  753.       It also puts in the generated C or C++ file the number of tnodes
  754.       created for a rule (at the end of the rule).  However this
  755.       information is not sufficient to locate the alternatives within
  756.       a rule which are causing the creation of tnodes.
  757.       Using:
  758.              antlr -treport 100000 ....
  759.       causes antlr to list on stdout any alternatives which require the
  760.       creation of more than 100,000 tnodes, along with the lookahead sets
  761.       for those alternatives.
  762.       The following is a trivial case from the ansi.g grammar which shows
  763.       the format of the report.  This report might be of more interest
  764.       in cases where 1,000,000 tuples were created to resolve the ambiguity.
  765.       -------------------------------------------------------------------------
  766.         There were 0 tuples whose ambiguity could not be resolved
  767.              by full lookahead
  768.         There were 157 tnodes created to resolve ambiguity between:
  769.           Choice 1: statement/2  line 475  file ansi.g
  770.           Choice 2: statement/3  line 476  file ansi.g
  771.             Intersection of lookahead[1] sets:
  772.                IDENTIFIER
  773.             Intersection of lookahead[2] sets:
  774.                LPARENTHESIS     COLON            AMPERSAND        MINUS
  775.                STAR             PLUSPLUS         MINUSMINUS       ONESCOMPLEMENT
  776.                NOT              SIZEOF           OCTALINT         DECIMALINT
  777.                HEXADECIMALINT   FLOATONE         FLOATTWO         IDENTIFIER
  778.                STRING           CHARACTER
  779.       -------------------------------------------------------------------------
  780. #145. (Documentation)  Generation of Expression Trees
  781.       Item #99 was misleading because it implied that the optimization
  782.       for tree expressions was available only for trees created by
  783.       predicate expressions and neglected to mention that it required
  784.       the use of "-mrhoist on".  The optimization applies to tree
  785.       expressions created for grammars with k>1 and for predicates with
  786.       lookahead depth >1.
  787.       In MR11 the optimized version is always used so the -mrhoist on
  788.       option need not be specified.
  789. #144. (Changed in MR11) Incorrect test for exception group
  790.       In testing for a rule's exception group the label a pointer
  791.       is compared against ''.  The intention is "*pointer".
  792.       Reported by Jeffrey C. Fried (Jeff@Fried.net).
  793. #143. (Changed in MR11) Optional ";" at end of #token statement
  794.       Fixes problem of:
  795.             #token X "x"
  796.             <<
  797.                 parser action
  798.             >>
  799.       Being confused with:
  800.             #token X "x" <<lexical action>>
  801. #142. (Changed in MR11) class BufFileInput subclass of DLGInputStream
  802.       Alexey Demakov (demakov@kazbek.ispras.ru) has supplied class
  803.       BufFileInput derived from DLGInputStream which provides a
  804.       function lookahead(char *string) to test characters in the
  805.       input stream more than one character ahead.
  806.       The default amount of lookahead is specified by the constructor
  807.       and defaults to 8 characters.  This does *not* include the one
  808.       character of lookahead maintained internally by DLG in member "ch"
  809.       and which is not available for testing via BufFileInput::lookahead().
  810.       This is a useful class for overcoming the one-character-lookahead
  811.       limitation of DLG without resorting to a lexer capable of
  812.       backtracking (like flex) which is not integrated with antlr as is
  813.       DLG.
  814.       There are no restrictions on copying or using BufFileInput.* except
  815.       that the authorship and related information must be retained in the
  816.       source code.
  817.       The class is located in pccts/h/BufFileInput.* of the kit.
  818. #141. (Changed in MR11) ZZDEBUG_CONSUME for ANTLRParser::consume()
  819.       A debug aid has been added to file ANTLRParser::consume() in
  820.       file AParser.cpp:
  821.             #ifdef ZZDEBUG_CONSUME_ACTION
  822.                 zzdebug_consume_action();
  823.             #endif
  824.       Suggested by Sramji Ramanathan (ps@kumaran.com).
  825. #140. (Changed in MR11) #pred to define predicates
  826.       +---------------------------------------------------+
  827.       | Note: Assume "-prc on" for this entire discussion |
  828.       +---------------------------------------------------+
  829.       A problem with predicates is that each one is regarded as
  830.       unique and capable of disambiguating cases where two
  831.       alternatives have identical lookahead.  For example:
  832.         rule : <<pred(LATEXT(1))>>? A
  833.              | <<pred(LATEXT(1))>>? A
  834.              ;
  835.       will not cause any error messages or warnings to be issued
  836.       by earlier versions of pccts.  To compare the text of the
  837.       predicates is an incomplete solution.
  838.       In 1.33MR11 I am introducing the #pred statement in order to
  839.       solve some problems with predicates.  The #pred statement allows
  840.       one to give a symbolic name to a "predicate literal" or a
  841.       "predicate expression" in order to refer to it in other predicate
  842.       expressions or in the rules of the grammar.
  843.       The predicate literal associated with a predicate symbol is C
  844.       or C++ code which can be used to test the condition.  A
  845.       predicate expression defines a predicate symbol in terms of other
  846.       predicate symbols using "!", "&&", and "||".  A predicate symbol
  847.       can be defined in terms of a predicate literal, a predicate
  848.       expression, or *both*.
  849.       When a predicate symbol is defined with both a predicate literal
  850.       and a predicate expression, the predicate literal is used to generate
  851.       code, but the predicate expression is used to check for two
  852.       alternatives with identical predicates in both alternatives.
  853.       Here are some examples of #pred statements:
  854.         #pred  IsLabel       <<isLabel(LATEXT(1))>>?
  855.         #pred  IsLocalVar    <<isLocalVar(LATEXT(1))>>?
  856.         #pred  IsGlobalVar   <<isGlobalVar(LATEXT(1)>>?
  857.         #pred  IsVar         <<isVar(LATEXT(1))>>?       IsLocalVar || IsGlobalVar
  858.         #pred  IsScoped      <<isScoped(LATEXT(1))>>?    IsLabel || IsLocalVar
  859.       I hope that the use of EBNF notation to describe the syntax of the
  860.       #pred statement will not cause problems for my readers (joke).
  861.         predStatement : "#pred"
  862.                             CapitalizedName
  863.                               (
  864.                                   "<<predicate_literal>>?"
  865.                                 | "<<predicate_literal>>?"  predOrExpr
  866.                                 | predOrExpr
  867.                               )
  868.                       ;
  869.         predOrExpr    : predAndExpr ( "||" predAndExpr ) * ;
  870.         predAndExpr   : predPrimary ( "&&" predPrimary ) * ;
  871.         predPrimary   : CapitalizedName
  872.                       | "!" predPrimary
  873.                       | "(" predOrExpr ")"
  874.                       ;
  875.       What is the purpose of this nonsense ?
  876.       To understand how predicate symbols help, you need to realize that
  877.       predicate symbols are used in two different ways with two different
  878.       goals.
  879.         a. Allow simplification of predicates which have been combined
  880.            during predicate hoisting.
  881.         b. Allow recognition of identical predicates which can't disambiguate
  882.            alternatives with common lookahead.
  883.       First we will discuss goal (a).  Consider the following rule:
  884.             rule0: rule1
  885.                  | ID
  886.                  | ...
  887.                  ;
  888.             rule1: rule2
  889.                  | rule3
  890.                  ;
  891.             rule2: <<isX(LATEXT(1))>>? ID ;
  892.             rule3: <<!isX(LATEXT(1)>>? ID ;
  893.       When the predicates in rule2 and rule3 are combined by hoisting
  894.       to create a prediction expression for rule1 the result is:
  895.             if ( LA(1)==ID
  896.                 && ( isX(LATEXT(1) || !isX(LATEXT(1) ) ) { rule1(); ...
  897.       This is inefficient, but more importantly, can lead to false
  898.       assumptions that the predicate expression distinguishes the rule1
  899.       alternative with some other alternative with lookahead ID.  In
  900.       MR11 one can write:
  901.             #pred IsX     <<isX(LATEXT(1))>>?
  902.             ...
  903.             rule2: <<IsX>>? ID  ;
  904.             rule3: <<!IsX>>? ID ;
  905.       During hoisting MR11 recognizes this as a special case and
  906.       eliminates the predicates.  The result is a prediction
  907.       expression like the following:
  908.             if ( LA(1)==ID ) { rule1(); ...
  909.       Please note that the following cases which appear to be equivalent
  910.       *cannot* be simplified by MR11 during hoisting because the hoisting
  911.       logic only checks for a "!" in the predicate action, not in the
  912.       predicate expression for a predicate symbol.
  913.         *Not* equivalent and is not simplified during hoisting:
  914.             #pred IsX      <<isX(LATEXT(1))>>?
  915.             #pred NotX     <<!isX(LATEXT(1))>>?
  916.             ...
  917.             rule2: <<IsX>>? ID  ;
  918.             rule3: <<NotX>>? ID ;
  919.         *Not* equivalent and is not simplified during hoisting:
  920.             #pred IsX      <<isX(LATEXT(1))>>?
  921.             #pred NotX     !IsX
  922.             ...
  923.             rule2: <<IsX>>? ID  ;
  924.             rule3: <<NotX>>? ID ;
  925.       Now we will discuss goal (b).
  926.       When antlr discovers that there is a lookahead ambiguity between
  927.       two alternatives it attempts to resolve the ambiguity by searching
  928.       for predicates in both alternatives.  In the past any predicate
  929.       would do, even if the same one appeared in both alternatives:
  930.             rule: <<p(LATEXT(1))>>? X
  931.                 | <<p(LATEXT(1))>>? X
  932.                 ;
  933.       The #pred statement is a start towards solving this problem.
  934.       During ambiguity resolution (*not* predicate hoisting) the
  935.       predicates for the two alternatives are expanded and compared.
  936.       Consider the following example:
  937.             #pred Upper     <<isUpper(LATEXT(1))>>?
  938.             #pred Lower     <<isLower(LATEXT(1))>>?
  939.             #pred Alpha     <<isAlpha(LATEXT(1))>>?  Upper || Lower
  940.             rule0: rule1
  941.                  | <<Alpha>>? ID
  942.                  ;
  943.             rule1:
  944.                  | rule2
  945.                  | rule3
  946.                  ...
  947.                  ;
  948.             rule2: <<Upper>>? ID;
  949.             rule3: <<Lower>>? ID;
  950.       The definition of #pred Alpha expresses:
  951.             a. to test the predicate use the C code "isAlpha(LATEXT(1))"
  952.             b. to analyze the predicate use the information that
  953.                Alpha is equivalent to the union of Upper and Lower,
  954.       During ambiguity resolution the definition of Alpha is expanded
  955.       into "Upper || Lower" and compared with the predicate in the other
  956.       alternative, which is also "Upper || Lower".  Because they are
  957.       identical MR11 will report a problem.
  958.     -------------------------------------------------------------------------
  959.       t10.g, line 5: warning: the predicates used to disambiguate rule rule0
  960.              (file t10.g alt 1 line 5 and alt 2 line 6)
  961.              are identical when compared without context and may have no
  962.              resolving power for some lookahead sequences.
  963.     -------------------------------------------------------------------------
  964.       If you use the "-info p" option the output file will contain:
  965.     +----------------------------------------------------------------------+
  966.     |#if 0                                                                 |
  967.     |                                                                      |
  968.     |The following predicates are identical when compared without          |
  969.     |  lookahead context information.  For some ambiguous lookahead        |
  970.     |  sequences they may not have any power to resolve the ambiguity.     |
  971.     |                                                                      |
  972.     |Choice 1: rule0/1  alt 1  line 5  file t10.g                          |
  973.     |                                                                      |
  974.     |  The original predicate for choice 1 with available context          |
  975.     |    information:                                                      |
  976.     |                                                                      |
  977.     |    OR expr                                                           |
  978.     |                                                                      |
  979.     |      pred  <<  Upper>>?                                              |
  980.     |                        depth=k=1  rule rule2  line 14  t10.g         |
  981.     |        set context:                                                  |
  982.     |           ID                                                         |
  983.     |                                                                      |
  984.     |      pred  <<  Lower>>?                                              |
  985.     |                        depth=k=1  rule rule3  line 15  t10.g         |
  986.     |        set context:                                                  |
  987.     |           ID                                                         |
  988.     |                                                                      |
  989.     |  The predicate for choice 1 after expansion (but without context     |
  990.     |    information):                                                     |
  991.     |                                                                      |
  992.     |    OR expr                                                           |
  993.     |                                                                      |
  994.     |      pred  <<  isUpper(LATEXT(1))>>?                                 |
  995.     |                        depth=k=1  rule   line 1  t10.g               |
  996.     |                                                                      |
  997.     |      pred  <<  isLower(LATEXT(1))>>?                                 |
  998.     |                        depth=k=1  rule   line 2  t10.g               |
  999.     |                                                                      |
  1000.     |                                                                      |
  1001.     |Choice 2: rule0/2  alt 2  line 6  file t10.g                          |
  1002.     |                                                                      |
  1003.     |  The original predicate for choice 2 with available context          |
  1004.     |    information:                                                      |
  1005.     |                                                                      |
  1006.     |  pred  <<  Alpha>>?                                                  |
  1007.     |                    depth=k=1  rule rule0  line 6  t10.g              |
  1008.     |    set context:                                                      |
  1009.     |       ID                                                             |
  1010.     |                                                                      |
  1011.     |  The predicate for choice 2 after expansion (but without context     |
  1012.     |    information):                                                     |
  1013.     |                                                                      |
  1014.     |  OR expr                                                             |
  1015.     |                                                                      |
  1016.     |    pred  <<  isUpper(LATEXT(1))>>?                                   |
  1017.     |                      depth=k=1  rule   line 1  t10.g                 |
  1018.     |                                                                      |
  1019.     |    pred  <<  isLower(LATEXT(1))>>?                                   |
  1020.     |                      depth=k=1  rule   line 2  t10.g                 |
  1021.     |                                                                      |
  1022.     |                                                                      |
  1023.     |#endif                                                                |
  1024.     +----------------------------------------------------------------------+
  1025.       The comparison of the predicates for the two alternatives takes
  1026.       place without context information, which means that in some cases
  1027.       the predicates will be considered identical even though they operate
  1028.       on disjoint lookahead sets.  Consider:
  1029.             #pred Alpha
  1030.             rule1: <<Alpha>>? ID
  1031.                  | <<Alpha>>? Label
  1032.                  ;
  1033.       Because the comparison of predicates takes place without context
  1034.       these will be considered identical.  The reason for comparing
  1035.       without context is that otherwise it would be necessary to re-evaluate
  1036.       the entire predicate expression for each possible lookahead sequence.
  1037.       This would require more code to be written and more CPU time during
  1038.       grammar analysis, and it is not yet clear whether anyone will even make
  1039.       use of the new #pred facility.
  1040.       A temporary workaround might be to use different #pred statements
  1041.       for predicates you know have different context.  This would avoid
  1042.       extraneous warnings.
  1043.       The above example might be termed a "false positive".  Comparison
  1044.       without context will also lead to "false negatives".  Consider the
  1045.       following example:
  1046.             #pred Alpha
  1047.             #pred Beta
  1048.             rule1: <<Alpha>>? A
  1049.                  | rule2
  1050.                  ;
  1051.             rule2: <<Alpha>>? A
  1052.                  | <<Beta>>?  B
  1053.                  ;
  1054.       The predicate used for alt 2 of rule1 is (Alpha || Beta).  This
  1055.       appears to be different than the predicate Alpha used for alt1.
  1056.       However, the context of Beta is B.  Thus when the lookahead is A
  1057.       Beta will have no resolving power and Alpha will be used for both
  1058.       alternatives.  Using the same predicate for both alternatives isn't
  1059.       very helpful, but this will not be detected with 1.33MR11.
  1060.       To properly handle this the predicate expression would have to be
  1061.       evaluated for each distinct lookahead context.
  1062.       To determine whether two predicate expressions are identical is
  1063.       difficult.  The routine may fail to identify identical predicates.
  1064.       The #pred feature also compares predicates to see if a choice between
  1065.       alternatives which is resolved by a predicate which makes the second
  1066.       choice unreachable.  Consider the following example:
  1067.             #pred A         <<A(LATEXT(1)>>?
  1068.             #pred B         <<B(LATEXT(1)>>?
  1069.             #pred A_or_B    A || B
  1070.             r   : s
  1071.                 | t
  1072.                 ;
  1073.             s   : <<A_or_B>>? ID
  1074.                 ;
  1075.             t   : <<A>>? ID
  1076.                 ;
  1077.         ----------------------------------------------------------------------------
  1078.         t11.g, line 5: warning: the predicate used to disambiguate the
  1079.                first choice of  rule r
  1080.              (file t11.g alt 1 line 5 and alt 2 line 6)
  1081.              appears to "cover" the second predicate when compared without context.
  1082.              The second predicate may have no resolving power for some lookahead
  1083.                sequences.
  1084.         ----------------------------------------------------------------------------
  1085. #139. (Changed in MR11) Problem with -gp in C++ mode
  1086.       The -gp option to add a prefix to rule names did not work in
  1087.       C++ mode.  This has been fixed.
  1088.       Reported by Alexey Demakov (demakov@kazbek.ispras.ru).
  1089. #138. (Changed in MR11) Additional makefiles for non-MSVC++ MS systems
  1090.       Sramji Ramanathan (ps@kumaran.com) has supplied makefiles for
  1091.       building antlr and dlg with Win95/NT development tools that
  1092.       are not based on MSVC5.  They are pccts/antlr/AntlrMS.mak and
  1093.       pccts/dlg/DlgMS.mak.
  1094.       The first line of the makefiles require a definition of PCCTS_HOME.
  1095.       These are in additiion to the AntlrMSVC50.* and DlgMSVC50.*
  1096.       supplied by Jeff Vincent (JVincent@novell.com).
  1097. #137. (Changed in MR11) Token getType(), getText(), getLine() const members
  1098.       --------------------------------------------------------------------
  1099.       If you use ANTLRCommonToken this change probably does not affect you.
  1100.       --------------------------------------------------------------------
  1101.       For a long time it has bothered me that these accessor functions
  1102.       in ANTLRAbstractToken were not const member functions.  I have
  1103.       refrained from changing them because it require users to modify
  1104.       existing token class definitions which are derived directly
  1105.       from ANTLRAbstractToken.  I think it is now time.
  1106.       For those who are not used to C++, a "const member function" is a
  1107.       member function which does not modify its own object - the thing
  1108.       to which "this" points. This is quite different from a function
  1109.       which does not modify its arguments
  1110.       Most token definitions based on ANTLRAbstractToken have something like
  1111.       the following in order to create concrete definitions of the pure
  1112.       virtual methods in ANTLRAbstractToken:
  1113.         class MyToken : public ANTLRAbstractToken {
  1114.             ...
  1115.             ANTLRTokenType getType() {return _type; }
  1116.             int getLine()            {return _line; }
  1117.             ANTLRChar * getText()    {return _text; }
  1118.             ...
  1119.         }
  1120.       The required change is simply to put "const" following the function
  1121.       prototype in the header (.h file) and the definition file (.cpp if
  1122.       it is not inline):
  1123.         class MyToken : public ANTLRAbstractToken {
  1124.             ...
  1125.             ANTLRTokenType getType() const {return _type; }
  1126.             int getLine() const            {return _line; }
  1127.             ANTLRChar * getText() const    {return _text; }
  1128.             ...
  1129.         }
  1130.       This was originally proposed a long time ago by Bruce
  1131.       Guenter (bruceg@qcc.sk.ca).
  1132. #136. (Changed in MR11) Added getLength() to ANTLRCommonToken
  1133.       Classes ANTLRCommonToken and ANTLRCommonTokenNoRefCountToken
  1134.       now have a member function:
  1135.             int getLength() const { return strlen(getText()) }
  1136.       Suggested by Sramji Ramanathan (ps@kumaran.com).
  1137. #135. (Changed in MR11) Raised antlr's own default ZZLEXBUFSIZE to 8k
  1138. #134a. (ansi_mr10.zip)  T.J. Parr's ANSI C grammar made 1.33MR11 compatible
  1139.        There is a typographical error in the definition of BITWISEOREQ:
  1140.         #token BITWISEOREQ "!=" should be "|="
  1141.        When this change is combined with the bugfix to the follow set cache
  1142.        problem (Item #147) and a minor rearrangement of the grammar
  1143.        (Item #134b) it becomes a k=1 ck=2 grammar.
  1144. #134b. (ansi_mr10.zip)  T.J. Parr's ANSI C grammar made 1.33MR11 compatible
  1145.       The following changes were made in the ansi.g grammar (along with
  1146.       using -mrhoist on):
  1147.         ansi.g
  1148.         ======
  1149.         void tracein(char *)     ====>    void tracein(const char *)
  1150.         void traceout(char *)    ====>    void traceout(const char *)
  1151.         <LT(1)->getType()==IDENTIFIER ? isTypeName(LT(1)->getText()) : 1>>?
  1152.         ====> <<isTypeName(LT(1)->getText())>>?
  1153.         <<(LT(1)->getType()==LPARENTHESIS && LT(2)->getType()==IDENTIFIER) ? 
  1154.                         isTypeName(LT(2)->getText()) : 1>>?
  1155.         ====> (LPARENTHESIS IDENTIFIER)? => <<isTypeName(LT(2)->getText())>>?
  1156.         <<(LT(1)->getType()==LPARENTHESIS && LT(2)->getType()==IDENTIFIER) ? 
  1157.                         isTypeName(LT(2)->getText()) : 1>>?
  1158.         ====> (LPARENTHESIS IDENTIFIER)? => <<isTypeName(LT(2)->getText())>>?
  1159.         added to init(): traceOptionValueDefault=0;
  1160.         added to init(): traceOption(-1);
  1161.         change rule "statement":
  1162.             statement
  1163.                 :   plain_label_statement
  1164.                 |   case_label_statement
  1165.                 |   <<;>> expression SEMICOLON
  1166.                 |   compound_statement
  1167.                 |   selection_statement
  1168.                 |   iteration_statement
  1169.                 |   jump_statement
  1170.                 |   SEMICOLON
  1171.                 ;
  1172.             plain_label_statement
  1173.                 :   IDENTIFIER COLON statement
  1174.                 ;
  1175.             case_label_statement
  1176.                 :   CASE constant_expression COLON statement
  1177.                 |   DEFAULT COLON statement
  1178.             ;
  1179.         support.cpp
  1180.         ===========
  1181.         void tracein(char *)     ====>    void tracein(const char *)
  1182.         void traceout(char *)    ====>    void traceout(const char *)
  1183.         added to tracein():  ANTLRParser::tracein(r);  // call superclass method
  1184.         added to traceout(): ANTLRParser::traceout(r); // call superclass method
  1185.         Makefile
  1186.         ========
  1187.         added to AFLAGS: -mrhoist on -prc on
  1188. #133. (Changed in 1.33MR11) Make trace options public in ANTLRParser
  1189.       In checking T.J. Parr's ANSI C grammar for compatibility with
  1190.       1.33MR11 discovered that it was inconvenient to have the
  1191.       trace facilities with protected access.
  1192. #132. (Changed in 1.33MR11) Recognition of identical predicates in alts
  1193.       Prior to 1.33MR11, there would be no ambiguity warning when the
  1194.       very same predicate was used to disambiguate both alternatives:
  1195.         test: ref B
  1196.             | ref C
  1197.             ;
  1198.         ref : <<pred(LATEXT(1)>>? A
  1199.       In 1.33MR11 this will cause the warning:
  1200.         warning: the predicates used to disambiguate rule test
  1201.             (file v98.g alt 1 line 1 and alt 2 line 2)
  1202.              are identical and have no resolving power
  1203.         -----------------  Note  -----------------
  1204.           This is different than the following case
  1205.                 test: <<pred(LATEXT(1))>>? A B
  1206.                     | <<pred(LATEXT(1)>>?  A C
  1207.                     ;
  1208.           In this case there are two distinct predicates
  1209.           which have exactly the same text.  In the first
  1210.           example there are two references to the same
  1211.           predicate.  The problem represented by this
  1212.           grammar will be addressed later.
  1213. #131. (Changed in 1.33MR11) Case insensitive command line options
  1214.       Command line switches like "-CC" and keywords like "on", "off",
  1215.       and "stdin" are no longer case sensitive in antlr, dlg, and sorcerer.
  1216. #130. (Changed in 1.33MR11) Changed ANTLR_VERSION to int from string
  1217.       The ANTLR_VERSION was not an integer, making it difficult to
  1218.       perform conditional compilation based on the antlr version.
  1219.       Henceforth, ANTLR_VERSION will be:
  1220.             (base_version * 10000) + release number
  1221.             thus 1.33MR11 will be: 133*100+11 = 13311
  1222.       Suggested by Rainer Janssen (Rainer.Janssen@Informatik.Uni-Oldenburg.DE).
  1223. #129. (Changed in 1.33MR11) Addition of ANTLR_VERSION to <parserName>.h
  1224.       The following code is now inserted into <parserName>.h amd
  1225.       stdpccts.h:
  1226.             #ifndef ANTLR_VERSION
  1227.             #define ANTLR_VERSION 13311
  1228.             #endif
  1229.       Suggested by Rainer Janssen (Rainer.Janssen@Informatik.Uni-Oldenburg.DE)
  1230. #128. (Changed in 1.33MR11) Redundant predicate code in (<<pred>>? ...)+
  1231.       Prior to 1.33MR11, the following grammar would generate
  1232.       redundant tests for the "while" condition.
  1233.         rule2 : (<<pred>>? X)+ X
  1234.               | B
  1235.               ;
  1236.       The code would resemble:
  1237.             if (LA(1)==X) {
  1238.                 if (pred) {
  1239.                     do {
  1240.                         if (!pred) {zzfailed_pred("  pred");}
  1241.                         zzmatch(X); zzCONSUME;
  1242.                     } while (LA(1)==X && pred && pred);
  1243.             } else {...
  1244.       With 1.33MR11 the redundant predicate test is omitted.
  1245. #127. (Changed in 1.33MR11)
  1246.                     Count Syntax Errors     Count DLG Errors
  1247.                     -------------------     ----------------
  1248.        C++ mode     ANTLRParser::           DLGLexerBase::
  1249.                       syntaxErrCount          lexErrCount
  1250.        C mode       zzSyntaxErrCount        zzLexErrCount
  1251.        The C mode variables are global and initialized to 0.
  1252.        They are *not* reset to 0 automatically when antlr is
  1253.        restarted.
  1254.        The C++ mode variables are public.  They are initialized
  1255.        to 0 by the constructors.  They are *not* reset to 0 by the
  1256.        ANTLRParser::init() method.
  1257.        Suggested by Reinier van den Born (reinier@vnet.ibm.com).
  1258. #126. (Changed in 1.33MR11) Addition of #first <<...>>
  1259.        The #first <<...>> inserts the specified text in the output
  1260.        files before any other #include statements required by pccts.
  1261.        The only things before the #first text are comments and
  1262.        a #define ANTLR_VERSION.
  1263.        Requested by  and Esa Pulkkinen (esap@cs.tut.fi) and Alexin
  1264.        Zoltan (alexin@inf.u-szeged.hu).
  1265. #125. (Changed in 1.33MR11) Lookahead for (guard)? && <<p>>? predicates
  1266.        When implementing the new style of guard predicate (Item #113)
  1267.        in 1.33MR10 I decided to temporarily ignore the problem of
  1268.        computing the "narrowest" lookahead context.
  1269.        Consider the following k=1 grammar:
  1270.             start : a
  1271.                   | b
  1272.                   ;
  1273.             a     : (A)? && <<pred1(LATEXT(1))>>? ab ;
  1274.             b     : (B)? && <<pred2(LATEXT(1))>>? ab ;
  1275.             ab    : A | B ;
  1276.        In MR10 the context for both "a" and "b" was {A B} because this is
  1277.        the first set of rule "ab".  Normally, this is not a problem because
  1278.        the predicate which follows the guard inhibits any ambiguity report
  1279.        by antlr.
  1280.        In MR11 the first set for rule "a" is {A} and for rule "b" it is {B}.
  1281. #124. A Note on the New "&&" Style Guarded Predicates
  1282.         I've been asked several times, "What is the difference between
  1283.         the old "=>" style guard predicates and the new style "&&" guard
  1284.         predicates, and how do you choose one over the other" ?
  1285.         The main difference is that the "=>" does not apply the
  1286.         predicate if the context guard doesn't match, whereas
  1287.         the && form always does.  What is the significance ?
  1288.         If you have a predicate which is not on the "leading edge"
  1289.         it is cannot be hoisted.  Suppose you need a predicate that
  1290.         looks at LA(2).  You must introduce it manually.  The
  1291.         classic example is:
  1292.             castExpr :
  1293.                      LP typeName RP
  1294.                      | ....
  1295.                      ;
  1296.             typeName : <<isTypeName(LATEXT(1))>>?  ID
  1297.                      | STRUCT ID
  1298.                      ;
  1299.         The problem  is that isTypeName() isn't on the leading edge
  1300.         of typeName, so it won't be hoisted into castExpr to help
  1301.         make a decision on which production to choose.
  1302.         The *first* attempt to fix it is this:
  1303.             castExpr :
  1304.                      <<isTypeName(LATEXT(2))>>?
  1305.                                         LP typeName RP
  1306.                      | ....
  1307.                      ;
  1308.         Unfortunately, this won't work because it ignores
  1309.         the problem of STRUCT.  The solution is to apply
  1310.         isTypeName() in castExpr if LA(2) is an ID and
  1311.         don't apply it when LA(2) is STRUCT:
  1312.             castExpr :
  1313.                      (LP ID)? => <<isTypeName(LATEXT(2))>>?
  1314.                                         LP typeName RP
  1315.                      | ....
  1316.                      ;
  1317.         In conclusion, the "=>" style guarded predicate is
  1318.         useful when:
  1319.             a. the tokens required for the predicate
  1320.                are not on the leading edge
  1321.             b. there are alternatives in the expression
  1322.                selected by the predicate for which the
  1323.                predicate is inappropriate
  1324.         If (b) were false, then one could use a simple
  1325.         predicate (assuming "-prc on"):
  1326.             castExpr :
  1327.                      <<isTypeName(LATEXT(2))>>?
  1328.                                         LP typeName RP
  1329.                      | ....
  1330.                      ;
  1331.             typeName : <<isTypeName(LATEXT(1))>>?  ID
  1332.                      ;
  1333.         So, when do you use the "&&" style guarded predicate ?
  1334.         The new-style "&&" predicate should always be used with
  1335.         predicate context.  The context guard is in ADDITION to
  1336.         the automatically computed context.  Thus it useful for
  1337.         predicates which depend on the token type for reasons
  1338.         other than context.
  1339.         The following example is contributed by Reinier van den Born
  1340.         (reinier@vnet.ibm.com).
  1341.  +-------------------------------------------------------------------------+
  1342.  | This grammar has two ways to call functions:                            |
  1343.  |                                                                         |
  1344.  |  - a "standard" call syntax with parens and comma separated args        |
  1345.  |  - a shell command like syntax (no parens and spacing separated args)   |
  1346.  |                                                                         |
  1347.  | The former also allows a variable to hold the name of the function,     |
  1348.  | the latter can also be used to call external commands.                  |
  1349.  |                                                                         |
  1350.  | The grammar (simplified) looks like this:                               |
  1351.  |                                                                         |
  1352.  |   fun_call   :     ID "(" { expr ("," expr)* } ")"                      |
  1353.  |                                  /* ID is function name */              |
  1354.  |              | "@" ID "(" { expr ("," expr)* } ")"                      |
  1355.  |                                  /* ID is var containing fun name */    |
  1356.  |              ;                                                          |
  1357.  |                                                                         |
  1358.  |   command    : ID expr*          /* ID is function name */              |
  1359.  |              | path expr*        /* path is external command name */    |
  1360.  |              ;                                                          |
  1361.  |                                                                         |
  1362.  |   path       : ID                /* left out slashes and such */        |
  1363.  |              | "@" ID            /* ID is environment var */            |
  1364.  |              ;                                                          |
  1365.  |                                                                         |
  1366.  |   expr       : ....                                                     |
  1367.  |              | "(" expr ")";                                            |
  1368.  |                                                                         |
  1369.  |   call       : fun_call                                                 |
  1370.  |              | command                                                  |
  1371.  |              ;                                                          |
  1372.  |                                                                         |
  1373.  | Obviously the call is wildly ambiguous. This is more or less how this   |
  1374.  | is to be resolved:                                                      |
  1375.  |                                                                         |
  1376.  |    A call begins with an ID or an @ followed by an ID.                  |
  1377.  |                                                                         |
  1378.  |    If it is an ID and if it is an ext. command name  -> command         |
  1379.  |                       if followed by a paren         -> fun_call        |
  1380.  |                       otherwise                      -> command         |
  1381.  |                                                                         |
  1382.  |    If it is an @  and if the ID is a var name        -> fun_call        |
  1383.  |                       otherwise                      -> command         |
  1384.  |                                                                         |
  1385.  | One can implement these rules quite neatly using && predicates:         |
  1386.  |                                                                         |
  1387.  |   call       : ("@" ID)? && <<isVarName(LT(2))>>? fun_call              |
  1388.  |              | (ID)?     && <<isExtCmdName>>?     command               |
  1389.  |              | (ID "(")?                          fun_call              |
  1390.  |              |                                    command               |
  1391.  |              ;                                                          |
  1392.  |                                                                         |
  1393.  | This can be done better, so it is not an ideal example, but it          |
  1394.  | conveys the principle.                                                  |
  1395.  +-------------------------------------------------------------------------+
  1396. #123. (Changed in 1.33MR11) Correct definition of operators in ATokPtr.h
  1397.         The return value of operators in ANTLRTokenPtr:
  1398.         changed: unsigned ... operator !=(...)
  1399.              to: int ... operator != (...)
  1400.         changed: unsigned ... operator ==(...)
  1401.              to: int ... operator == (...)
  1402.         Suggested by R.A. Nelson (cowboy@VNET.IBM.COM)
  1403. #122. (Changed in 1.33MR11)  Member functions to reset DLG in C++ mode
  1404.          void DLGFileReset(FILE *f) { input = f; found_eof = 0; }
  1405.          void DLGStringReset(DLGChar *s) { input = s; p = &input[0]; }
  1406.         Supplied by R.A. Nelson (cowboy@VNET.IBM.COM)
  1407. #121. (Changed in 1.33MR11)  Another attempt to fix -o (output dir) option
  1408.       Another attempt is made to improve the -o option of antlr, dlg,
  1409.       and sorcerer.  This one by JVincent (JVincent@novell.com).
  1410.       The current rule:
  1411.         a. If -o  is not specified than any explicit directory
  1412.            names are retained.
  1413.         b. If -o is specified than the -o directory name overrides any
  1414.            explicit directory names.
  1415.         c. The directory name of the grammar file is *not* stripped
  1416.            to create the main output file.  However it is stil subject
  1417.            to override by the -o directory name.
  1418. #120. (Changed in 1.33MR11) "-info f" output to stdout rather than stderr
  1419.       Added option 0 (e.g. "-info 0") which is a noop.
  1420. #119. (Changed in 1.33MR11) Ambiguity aid for grammars
  1421.       The user can ask for additional information on ambiguities reported
  1422.       by antlr to stdout.  At the moment, only one ambiguity report can
  1423.       be created in an antlr run.
  1424.       This feature is enabled using the "-aa" (Ambiguity Aid)  option.
  1425.       The following options control the reporting of ambiguities:
  1426.           -aa ruleName       Selects reporting by name of rule
  1427.           -aa lineNumber     Selects reporting by line number
  1428.                                (file name not compared)
  1429.           -aam               Selects "multiple" reporting for a token
  1430.                              in the intersection set of the
  1431.                              alternatives.
  1432.                              For instance, the token ID may appear dozens
  1433.                              of times in various paths as the program
  1434.                              explores the rules which are reachable from
  1435.                              the point of an ambiguity. With option -aam
  1436.                              every possible path the search program
  1437.                              encounters is reported.
  1438.                              Without -aam only the first encounter is
  1439.                              reported.  This may result in incomplete
  1440.                              information, but the information may be
  1441.                              sufficient and much shorter.
  1442.           -aad depth         Selects the depth of the search.
  1443.                              The default value is 1.
  1444.                              The number of paths to be searched, and the
  1445.                              size of the report can grow geometrically
  1446.                              with the -ck value if a full search for all
  1447.                              contributions to the source of the ambiguity
  1448.                              is explored.
  1449.                              The depth represents the number of tokens
  1450.                              in the lookahead set which are matched against
  1451.                              the set of ambiguous tokens.  A depth of 1
  1452.                              means that the search stops when a lookahead
  1453.                              sequence of just one token is matched.
  1454.                              A k=1 ck=6 grammar might generate 5,000 items
  1455.                              in a report if a full depth 6 search is made
  1456.                              with the Ambiguity Aid.  The source of the
  1457.                              problem may be in the first token and obscured
  1458.                              by the volume of data - I hesitate to call
  1459.                              it information.
  1460.                              When the user selects a depth > 1, the search
  1461.                              is first performed at depth=1 for both
  1462.                              alternatives, then depth=2 for both alternatives,
  1463.                              etc.
  1464.       Sample output for rule grammar in antlr.g itself:
  1465.   +---------------------------------------------------------------------+
  1466.   | Ambiguity Aid                                                       |
  1467.   |                                                                     |
  1468.   |   Choice 1: grammar/70                 line 632  file a.g           |
  1469.   |   Choice 2: grammar/82                 line 644  file a.g           |
  1470.   |                                                                     |
  1471.   |   Intersection of lookahead[1] sets:                                |
  1472.   |                                                                     |
  1473.   |      "}"             "class"          "#errclass"      "#tokclass" |
  1474.   |                                                                     |
  1475.   |    Choice:1  Depth:1  Group:1  ("#errclass")                        |
  1476.   |  1 in (...)* block                grammar/70       line 632   a.g   |
  1477.   |  2 to error                       grammar/73       line 635   a.g   |
  1478.   |  3 error                          error/1          line 894   a.g   |
  1479.   |  4 #token "#errclass"             error/2          line 895   a.g   |
  1480.   |                                                                     |
  1481.   |    Choice:1  Depth:1  Group:2  ("#tokclass")                        |
  1482.   |  2 to tclass                      grammar/74       line 636   a.g   |
  1483.   |  3 tclass                         tclass/1         line 937   a.g   |
  1484.   |  4 #token "#tokclass"             tclass/2         line 938   a.g   |
  1485.   |                                                                     |
  1486.   |    Choice:1  Depth:1  Group:3  ("class")                            |
  1487.   |  2 to class_def                   grammar/75       line 637   a.g   |
  1488.   |  3 class_def                      class_def/1      line 669   a.g   |
  1489.   |  4 #token "class"                 class_def/3      line 671   a.g   |
  1490.   |                                                                     |
  1491.   |    Choice:1  Depth:1  Group:4  ("}")                               |
  1492.   |  2 #token "}"                    grammar/76       line 638   a.g   |
  1493.   |                                                                     |
  1494.   |    Choice:2  Depth:1  Group:5  ("#errclass")                        |
  1495.   |  1 in (...)* block                grammar/83       line 645   a.g   |
  1496.   |  2 to error                       grammar/93       line 655   a.g   |
  1497.   |  3 error                          error/1          line 894   a.g   |
  1498.   |  4 #token "#errclass"             error/2          line 895   a.g   |
  1499.   |                                                                     |
  1500.   |    Choice:2  Depth:1  Group:6  ("#tokclass")                        |
  1501.   |  2 to tclass                      grammar/94       line 656   a.g   |
  1502.   |  3 tclass                         tclass/1         line 937   a.g   |
  1503.   |  4 #token "#tokclass"             tclass/2         line 938   a.g   |
  1504.   |                                                                     |
  1505.   |    Choice:2  Depth:1  Group:7  ("class")                            |
  1506.   |  2 to class_def                   grammar/95       line 657   a.g   |
  1507.   |  3 class_def                      class_def/1      line 669   a.g   |
  1508.   |  4 #token "class"                 class_def/3      line 671   a.g   |
  1509.   |                                                                     |
  1510.   |    Choice:2  Depth:1  Group:8  ("}")                               |
  1511.   |  2 #token "}"                    grammar/96       line 658   a.g   |
  1512.   +---------------------------------------------------------------------+
  1513.       For a linear lookahead set ambiguity (where k=1 or for k>1 but
  1514.       when all lookahead sets [i] with i<k all have degree one) the
  1515.       reports appear in the following order:
  1516.         for (depth=1 ; depth <= "-aad depth" ; depth++) {
  1517.           for (alternative=1; alternative <=2 ; alternative++) {
  1518.             while (matches-are-found) {
  1519.               group++;
  1520.               print-report
  1521.             };
  1522.           };
  1523.        };
  1524.       For reporting a k-tuple ambiguity, the reports appear in the
  1525.       following order:
  1526.         for (depth=1 ; depth <= "-aad depth" ; depth++) {
  1527.           while (matches-are-found) {
  1528.             for (alternative=1; alternative <=2 ; alternative++) {
  1529.               group++;
  1530.               print-report
  1531.             };
  1532.           };
  1533.        };
  1534.       This is because matches are generated in different ways for
  1535.       linear lookahead and k-tuples.
  1536. #118. (Changed in 1.33MR11) DEC VMS makefile and VMS related changes
  1537.       Revised makefiles for DEC/VMS operating system for antlr, dlg,
  1538.       and sorcerer.
  1539.       Reduced names of routines with external linkage to less than 32
  1540.       characters to conform to DEC/VMS linker limitations.
  1541.       Jean-Francois Pieronne discovered problems with dlg and antlr
  1542.       due to the VMS linker not being case sensitive for names with
  1543.       external linkage.  In dlg the problem was with "className" and
  1544.       "ClassName".  In antlr the problem was with "GenExprSets" and
  1545.       "genExprSets".
  1546.       Added genmms, a version of genmk for the DEC/VMS version of make.
  1547.       The source is in directory pccts/support/DECmms.
  1548.       All VMS contributions by Jean-Francois Pieronne (jfp@iname.com).
  1549. #117. (Changed in 1.33MR10) new EXPERIMENTAL predicate hoisting code
  1550.       The hoisting of predicates into rules to create prediction
  1551.       expressions is a problem in antlr.  Consider the following
  1552.       example (k=1 with -prc on):
  1553.         start   : (a)* "@" ;
  1554.         a       : b | c ;
  1555.         b       : <<isUpper(LATEXT(1))>>? A ;
  1556.         c       : A ;
  1557.       Prior to 1.33MR10 the code generated for "start" would resemble:
  1558.         while {
  1559.             if (LA(1)==A &&
  1560.                     (!LA(1)==A || isUpper())) {
  1561.               a();
  1562.             }
  1563.         };
  1564.       This code is wrong because it makes rule "c" unreachable from
  1565.       "start".  The essence of the problem is that antlr fails to
  1566.       recognize that there can be a valid alternative within "a" even
  1567.       when the predicate <<isUpper(LATEXT(1))>>? is false.
  1568.       In 1.33MR10 with -mrhoist the hoisting of the predicate into
  1569.       "start" is suppressed because it recognizes that "c" can
  1570.       cover all the cases where the predicate is false:
  1571.         while {
  1572.             if (LA(1)==A) {
  1573.               a();
  1574.             }
  1575.         };
  1576.       With the antlr "-info p" switch the user will receive information
  1577.       about the predicate suppression in the generated file:
  1578.       --------------------------------------------------------------
  1579.         #if 0
  1580.         Hoisting of predicate suppressed by alternative without predicate.
  1581.         The alt without the predicate includes all cases where
  1582.             the predicate is false.
  1583.            WITH predicate: line 7  v1.g
  1584.            WITHOUT predicate: line 7  v1.g
  1585.         The context set for the predicate:
  1586.              A
  1587.         The lookahead set for the alt WITHOUT the semantic predicate:
  1588.              A
  1589.         The predicate:
  1590.           pred <<  isUpper(LATEXT(1))>>?
  1591.                           depth=k=1  rule b  line 9  v1.g
  1592.             set context:
  1593.                A
  1594.             tree context: null
  1595.         Chain of referenced rules:
  1596.             #0  in rule start (line 5 v1.g) to rule a
  1597.             #1  in rule a (line 7 v1.g)
  1598.         #endif
  1599.       --------------------------------------------------------------
  1600.       A predicate can be suppressed by a combination of alternatives
  1601.       which, taken together, cover a predicate:
  1602.         start   : (a)* "@" ;
  1603.         a       : b | ca | cb | cc ;
  1604.         b       : <<isUpper(LATEXT(1))>>? ( A | B | C ) ;
  1605.         ca      : A ;
  1606.         cb      : B ;
  1607.         cc      : C ;
  1608.       Consider a more complex example in which "c" covers only part of
  1609.       a predicate:
  1610.         start   : (a)* "@" ;
  1611.         a       : b
  1612.                 | c
  1613.                 ;
  1614.         b       : <<isUpper(LATEXT(1))>>?
  1615.                     ( A
  1616.                     | X
  1617.                     );
  1618.         c       : A
  1619.                 ;
  1620.       Prior to 1.33MR10 the code generated for "start" would resemble:
  1621.         while {
  1622.             if ( (LA(1)==A || LA(1)==X) &&
  1623.                     (! (LA(1)==A || LA(1)==X) || isUpper()) {
  1624.               a();
  1625.             }
  1626.         };
  1627.       With 1.33MR10 and -mrhoist the predicate context is restricted to
  1628.       the non-covered lookahead.  The code resembles:
  1629.         while {
  1630.             if ( (LA(1)==A || LA(1)==B) &&
  1631.                   (! (LA(1)==X) || isUpper()) {
  1632.               a();
  1633.             }
  1634.         };
  1635.       With the antlr "-info p" switch the user will receive information
  1636.       about the predicate restriction in the generated file:
  1637.       --------------------------------------------------------------
  1638.         #if 0
  1639.         Restricting the context of a predicate because of overlap
  1640.           in the lookahead set between the alternative with the
  1641.           semantic predicate and one without
  1642.         Without this restriction the alternative without the predicate
  1643.           could not be reached when input matched the context of the
  1644.           predicate and the predicate was false.