www.pudn.com > LexYaccProgs.zip > READ.ME


 
TP Lex and Yacc Version 3.0 as of April 1991, Version 3.0a as of May 1992 
Copyright (c) 1990-92 by Albert Graef, Schillerstrasse 18, 6509 Schornsheim, 
Germany (ag@muwiinfa.geschichte.uni-mainz.de) 
All rights reserved 
 
This disk contains TP Lex and Yacc, compiler generator tools for Borland's 
Turbo Pascal (4.0 or later), running under MS-DOS (3.0 or later). 
 
(Turbo Pascal is a trademark of Borland International.) 
 
The TP Lex and Yacc software is licensed free of charge and may be copied 
and redistributed for non-profit purposes. There is no warranty of any kind. 
In particular, I do not guarantee that the software is free of bugs, or fits 
some particular purpose, and I take no responsibility for damages or any 
other consequences of its use. 
 
The manual is contained in the file TPLY.DOC on the disk. It can be printed 
using the DOS command `copy tply.doc prn'. (A TeX'ed version of the manual 
is contained in the file TPLY.TEX.) The manual provides a rather terse 
description of TP Lex and Yacc and you should follow the references given 
there for further reading. 
 
As distributed, the TP Lex and Yacc library units (LEXLIB.TPU and 
YACCLIB.TPU) are compiled with Turbo Pascal 6.0; to use them with other 
Turbo Pascal versions you probably have to recompile these units (sources 
LEXLIB.PAS and YACCLIB.PAS on the distribution disk). 
 
Older versions of TP Lex and Yacc are no longer supported. Most programs 
written for TP Lex and Yacc 2.0 should not to be too difficult to adapt 
to the new version. The major differences are: 
 
- The TP Lex library routine `start' is now used to set the start state of 
  the lexical analyzer (in V2.0, this routine was named `begin_'). 
 
- TP Lex no longer supports character tables (%T). 
 
- TP Lex now provides an optimization option which causes TP Lex to generate 
  minimal DFA's, and a verbose option to generate a readable description 
  (.LST file) of the constructed DFA. 
 
- The TP Yacc error message printing routine is now named `yyerror' (as in 
  the UNIX version); in V2.0 it was named `yymsg'. The V2.0 routine named 
  `yyerror' (which triggered error recovery in the parser) is now named 
  `yyerrlab'. 
 
- TP Yacc no longer supports %union definitions; instead, value types are 
  specified directly using tags of the form  in %token 
  and %type definitions. TP Yacc automatically generates a suitable 
  variant record type (YYSType) from the type definitions in the grammar. 
 
- TP Yacc no longer generates a separate header (.H) file; all definitions 
  for the lexical analyzer (token numbers, yylval variable) are put into 
  the .PAS output file. Hence the lexical analyzer should be included right 
  behind the parser (e.g., in the auxiliary procedures section of the Yacc 
  grammar); it cannot be put into a separate unit any more. Although this 
  might seem a little restrictive, I decided to use this scheme in order to 
  facilitate communication between parser and lexical analyzer, and I think 
  that it actually simplifies matters for the programmer. 
 
- TP Yacc provides an option to generate the parser description (.LST file) 
  and an option to trigger debugging output of the parser. 
 
- The code templates for the TP Lex and Yacc output files are now supplied 
  as ASCII files. This gives you the possibility to adapt the yylex and 
  yyparse routines to your applications. 
 
- The DFA and LALR parser construction algorithms have been reimplemented 
  from scratch, and they are now far more efficient than in the 2.0 
  version. 
 
Version 3.0a fixes the following known bugs of the 3.0 version: 
 
- TP Lex 3.0 sometimes loses transitions to the same state, e.g. in the 
  following rule: 
    a(b|c|d)*           return(1); 
 
- TP Yacc 3.0 erases type and precedence information in multiple definitions 
  of the same token, e.g.: 
    %token  OP 
    %left OP 
 
- TP Yacc 3.0 loses rule precedence information in case of actions within 
  a rule following the rightmost terminal of the rule, e.g.: 
    %token OP 
    %% 
    expr : OP { act; } expr ; 
 
The following incompatibility between TP and UNIX Lex is known, but will 
NOT be fixed: 
 
- The TP Lex library unit starts counting line numbers at 0, incrementing 
  the count BEFORE a line is read (in contrast, UNIX Lex initializes 
  yylineno to 1 and increments it AFTER the line end has been read). This 
  is motivated by the way in which TP Lex maintains the current line, 
  and will not affect your programs unless you explicitly reset the 
  yylineno value (e.g., when opening a new input file). In such a case 
  you should set yylineno to 0 rather than 1. 
 
5-13-92 Albert Graef