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 formin %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