[Comp.Sci.Dept, Utrecht] Note from archiver<at>cs.uu.nl: This page is part of a big collection of Usenet postings, archived here for your convenience. For matters concerning the content of this page, please contact its author(s); use the source, if all else fails. For matters concerning the archive as a whole, please refer to the archive description or contact the archiver.

Subject: comp.compilers monthly message and Frequently Asked Questions

This article was archived around: Sat, 01 Feb 2014 05:00:00 EST

All FAQs in Directory: compilers
All FAQs posted in: comp.compilers
Source: Usenet Version


Archive-name: compilers/faq Last-modified: $Date: 2013/11/16 16:17:23 $
This is the comp.compilers monthly message. Changes since last month are indicated by the usual marks in the right margin. Contents: -- What is comp.compilers? -- How do I receive it? -- How do I submit a message? -- What happens to submitted messages? -- What message formats are appropriate? -- What topics are and aren't appropriate? -- Are help-wanted messages allowed? -- Why wasn't my message posted? -- How do I respond to the author of a message? -- How do I contact the moderator? -- Are back issues available? -- Some Frequently Asked Questions: * How can I make a flex and/or yacc parser read input from a string? * Where can I get a C or C++ grammar in yacc? * Where can I get the Gnu C compiler? * Are there other free C compilers? * Where can I get a free compiler for MS Windows and other systems? * Where can I get a Fortran grammar in yacc or a Fortran compiler? * Where can I get Modula-2, Pascal, Ada, or SQL grammars in yacc? * Where can I get a Cobol grammar in yacc? * Where can I get a QBasic compiler? * Where can I get a Basic grammar in yacc or a Basic compiler? * Where can I get a PL/I or PL/M grammar? * Where can I get yacc and lex ? * Are there versions of yacc and lex for MS-DOS? * Are there C++ or Pascal versions of yacc and lex? * What other compilers and tools are freely available? * How can I get started with yacc and lex and compiler writing in general? * Where can I FTP the sources to the programs in Holub's "Compiler Design in C" or Mak's "Writing Compilers and Interpreters" ? * Where can I learn about garbage collection ? * Where can I find specs for Intel object files? -- What is comp.compilers? It is a moderated usenet news group addressing the topics of compilers in particular and programming language design and implementation in general. It started in 1986 as a moderated mailing list, but interest quickly grew to the point where it was promoted to a news group. Recent topics have included optimization techniques, language design issues, announcements of new compiler tools, and book reviews. Messages come from a wide variety of people ranging from undergraduate students to well-known experts in industry and academia. Authors live all over the world -- there are regular messages from the U.S, Canada, Europe, Australia, and Japan, with occasional ones from as far away as Malaysia. I cannot tell how large the readership is, since the anarchic nature of usenet makes it impossible to tell who reads it, but a reasonable guess is that the total is over 100,000, which would make it by far the most widely read medium on the topic in the world. Unless there is specific language to the contrary, each message represents only the personal opinion of its author. I claim no compilation copyright on comp.compilers. As far as I am concerned, anyone can reproduce any message for any purpose. Individual authors may retain rights to their messages, although I will not knowingly post anything that does not permit unlimited distribution in any form. If you find comp.compilers useful in writing a book, producing a product, etc., I would appreciate an acknowledgement of usenet and comp.compilers. -- How do I receive it? The easiest way is to read comp.compilers on a system that gets usenet news. It's also on the web at http://compilers.iecc.com. There are links to the most recent articles on the home page, and an RSS feed at http://compilers.iecc.com/comparch/rss Each message is tweeted to a twitter feed at @compcompilers. If you don't have access to usenet news and don't like RSS, it's also available via E-mail via a Majordomo mailing list. To subscribe, a person should send e-mail to majordomo@lists.iecc.com with one line in the mail message (not in the subject!) That line should read: subscribe compilers (to get individual messages) subscribe compilers-digest (to get a daily digest) You will get a confirmation message that you have to read and respond to in order to complete your subscription. To get off the list the subscriber should send e-mail to the same address with one of these messages: unsubscribe compilers unsubscribe compilers-digest If you have problems getting on or off the list, please contact me. In particular, if you want to use an address other than your own personal mail address, you have to ask me to set it up. If I receive bounce messages for an address on the mailing list for several messages in a row, it's automatically deleted. If this happens to you and your address subsequently becomes reachable again, you can resubscribe. -- How do I submit a message? Mail it to compilers@iecc.com. I review messages nearly every day, usually including weekends, and most messages are posted to the net within a day after I receive them. Occasionally when I go out of town there may be up to a week's delay, though I try to send out a message when that will happen. Most net news systems will automatically turn posted messages into mail to compilers, but some don't do that correctly. Please mail your contributions. This is particularly true if you use Google Groups, since nearly all the mail from Groups is spam, and your message will probably disappear into the spam filter if you let Google post it for you. When you send a message to compilers, I understand that to mean that you want me to post it to usenet, which means it will be sent to tens of thousands of potential readers at thousands of computers all around the world. It may also appear in a printed comp.compilers annual and other books, in printed journals, in on-line and off-line archives, CD-ROMs, and anywhere else that some reader decides to use it. If you don't want me to post something, send it instead to compilers-request. (See below.) -- What happens to submitted messages? Barring mail problems, they arrive in a special mailbox here, which sends an automated confirmation message that each has been received. If they're appropriate to post, I then edit them a little, remove cute signatures, and then post them to usenet. If I think a message needs more editing than that but is otherwise worth posting, I return it to the author for rewriting. Other messages are discarded (see below.) If I see that the automatically generated confirmation message bounced, I discard the message. If you want your messages to be posted, please be sure the From: or Reply-To: line contains your correct e-mail address. If you ask a question with a simple answer, I'll often just send the answer, which you won't get if you don't provide a way for me to send you mail. -- What message formats are appropriate? Plain old ASCII. No MIME, uuencoded, zipped, LaTeX, HTML, NeXTmail, RTF, GIF, gzip, MS Exchange, or anything else, just ASCII, because a lot of the readership still can't handle anything else. Messages received in the broken HTML sent by misconfigured versions of mail programs such as Outlook Express and Netscape Messenger are usually discarded, since had you actually wanted people to read your message, you could have sent something legible. Also, keep line lengths to between 70 and 80 characters, and don't justify lines with extra white space nor indent the whole message with white space. Messages received entirely in lower case are subject to gratuitous recapitalization. (Your moderator has strong aesthetic opinions.) If you want to make something non-ASCII available to the readership, put it on an FTP or WWW server and send in a descriptive note with the URL. Material of general interest can go on the archive server here. Send me a message at compilers-request@iecc.com if you have something for the archive. -- What topics are and aren't appropriate? Any message discussing aspects of compiler design and implementation is appropriate. Language design is usually OK as well insofar as it affects compiler design, until it drifts off into theological issues like where the semicolon goes. Questions about particular compilers, programming languages, and systems should go to newsgroups about the language or system. "For sale" messages should go to one of the misc.forsale or regional forsale groups. I post one announcement per conference, for any conference with a topic relevant to compilers. I usually post student offers to share a room at a conference, and should probably digest them as well. Postings announcing commercial products are welcome so long as there is substantially more technical content than hype. For technical reasons, I can't cross-post messages to other moderated groups, except one or two like comp.parallel with whom I have an informal agreement to allow cross-posts. -- Are help-wanted messages allowed? ``Help wanted'' and ``Position Available'' messages are collected each week and posted in a digest every Sunday. Jobs remaining open may be re-posted once a month. Since comp.compilers readers live all over the world, please be sure that your message includes some hint about the location of the job and whether non-residents of your country can apply. Messages from recruiters are OK, but they must advertise actual specific job openings. -- Why wasn't my message posted? The main reasons I don't post a message are that I never received it in the first place, it appears more appropriate for another group, the message is too garbled to fix, it contains too much quoted material relative to the amount of new material, or I don't understand it. Another possibility is that I tried to write back but the message doesn't have a valid return e-mail address. When you respond to a previous article, you MUST edit down the quoted material to the minimum needed to remind readers about the topic. In the past I usually did such editing myself, but with the increasing number of messages, I just don't have time any more and discard such messages. If you can't take the time to edit your message, neither can I. The mail receipt robot makes a guess about the amount of quoted material in each message and sends a warning in response if a message appears to have more quoted than new stuff. Unless it guessed wrong, please edit and resumbit your message if you want it to appear. I discard messages that say "reply to me because I don't read this group", and forward spams back to the appropriate postmaster. Messages from anonymous or anonymized addresses are not acceptable, although I could be persuaded to post a message with the sender's identity removed given a plausible reason. If a message asks a simple question I sometimes answer it myself rather than posting it. If you ask a question answered in the FAQ, discussed to death in the past, or appropriate for a different group, you'll get a form response. If you send in a message and don't either see it posted or receive an acknowledgement from the robot, it probably got lost in the mail and you should contact me, preferably via a different mail route. -- How do I respond to the author of a message? I try to be sure that every message contains valid From: and Reply-To: headers. The automatic "reply" commands in most news readers let you send mail to the author. If you're replying to a message in a digest, be sure to respond to the author of the particular message, not to the pseudo-author of the digest. Sometimes mail to an author bounces. Please don't ask me to forward it, since my machine is no better connected than anyone else's. (It's just another node on the Internet.) If you send me a message obviously intended for the author of an item, I will discard it on the theory that if it wasn't important enough for you to send it to the right place, it isn't important enough for me, either. -- How do I contact the moderator? Send me mail at compilers-request@iecc.com. I treat messages to compilers-request as private messages to me unless they state that they are for publication. -- Are back issues available? I have complete archives going back to the original mailing list in 1986. The archives now fill over 58 megabytes, and are growing at about 500K per month. You can retrieve messages by full text search or by message number at the compilers web site at http://compilers.iecc.com/. People with ftp access can get them from ftp://ftp.iecc.com/pub/articles. The FTP archives contain a gzipped Unix mailbox format file for each month, with names like 91-08.gz. Directory ftp://ftp.iecc.com/pub/index contains table of contents files, one for each year. -- Some Frequently Asked Questions: NOTE: Many issues are discussed occasionally on comp.compilers, but not frequently enought to make the FAQ list. If you have a question but the answer isn't in the FAQ, you may well be able to get good background by reading the appropriate articles in the archive. Please at least visit the archive at http://compilers.iecc.com and do a little searching. The various files that I mention below that I have are in the compilers FTP archive at http://ftp.iecc.com/pub/file/. * How can I make a flex and/or bison parser read input from a string? Bison (and yacc) parsers read all their input from a routine called yylex(), which is generally provided via a flex scanner. The flex man page tells you how to make it read from a string, in the somewhat obscurely named section on MULTIPLE INPUT BUFFERS. * Where can I get a C or C++ grammar in yacc? Jim Roskind's well-known C and C++ grammars are in the FTP archive, as is a C grammar written by Jeff Lee. Dave Jones posted a parser as message 91-09-030. Another C grammar was posted to comp.sources.misc in June 1990, v13 i52, archive name ansi-c_su. Old versions of GCC and G++ were based on yacc grammars, although a few years ago both switched to faster hand-written parsers. Also see ctree, which parses C code into parse trees and makes symbol tables, described in message 95-07-114. http://www.kagi.com/flisakow/ctree.html or, ftp://ftp.kagi.com/flisakow/ctree_XXX.tar.gz * Where can I get the Gnu C compiler? GCC is a high-quality free C and C++ compiler. (Free is not the same as public domain, see the GCC distribution for details.) It is available in source from gcc.gnu.org. You need an existing C compiler and libraries to bootstrap it. There are also front ends for Fortran, Objective C, and other languages. * Are there other free C compilers? lcc is the retargetable compiler for ANSI C described in `A Retargetable C Compiler: Design and Implementation' (Benjamin/Cummings, 1995, ISBN 0-8053-1670-1). lcc is in production use at Princeton University and AT&T Bell Laboratories. The current version of lcc generates code for many different architectures. The code generator generator is available too as a icon program, and a C version is available as of version 3.5. There are mailing lists lcc{,-bugs}@cs.princeton.edu, managed by majordomo@cs.princeton.edu. The object code is not as good as GCC, but the compiler is ANSI compatible and is small and fast. Lcc uses a hard-coded C parser because it's faster than yacc, and now includes a preprocessor. Lcc is available at http://sites.google.com/site/lccretargetablecompiler/ Thanks to Horst von Brand <vonbrand@inf.utfsm.cl> and Johann 'Myrkraverk' Oskarsson <johann@2ndquadrant.com> and Tom Harwood <harwood@bedford.progress.COM> for this info. * Where can I get a free compiler for MS Windows and other systems? The MinGW, Minimalist GNU for Windows, project includes ports of much of GCC. See http://www.mingw.org/ A package called GNUWIN32 from Cygnus Sypport is based on the EGCS compiler project. It includes C, C++, Objective C, and Fortran 77, along with Unix emulation tools and libraries. It can build either GUI or console applications. It's still at the beta stage, but works pretty well and at the price, it's hard to complain. Info at http://www.xraylith.wisc.edu/~khan/software/gnu-win32/ or http://www.cygnus.com/misc/gnu-win32/ Thanks to Alex Martelli <martelli@cadlab.it> for this info. A development system called "djgpp" by DJ Delorie <dj@delorie.com> is based on gcc and other GNU programs, and runs on 386 or higher PCs running MS-DOS. DJGPP also has Pascal, FORTRAN, Ada, Bison and Flex for MS-DOS. It also has many other GNU tools that programmers often need, like emacs, make, fileutils, shellutils, textutils, sed, awk, perl, etc. This is all available from ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/ or http://www.delorie.com/djgpp/ Microsoft's Visual Studio Express, a limited but functional subset of their Visual Studio product, can be downloaded for free. http://www.microsoft.com/express OpenWatcom C, C++, and Fortran is free and available for DOS, OS/2, Linux and Windows at http://openwatcom.org/index.php/Main_Page Solaris Studio (formerly Sun Studio) is also free and available for Solaris and Linux. http://www.oracle.com/technetwork/server-storage/solarisstudio/overview/index.html lcc-win32, a free C compiler system for windows 95/NT can be downloaded from http://www.cs.virginia.edu/~lcc-win32/ Another C compiler with source is available at: http://ladsoft.tripod.com/cc386.htm. (Thanks to Quinn Tyler Jackson <qjackson@wave.home.com>.) * Where can I get a Fortran grammar in yacc or a Fortran compiler? I have a small subset parser in the archive at ftp.iecc.com. The F2C Fortran to C translator is a respectable Fortran system (so long as you have a C compiler to compile its output and its libraries) and contains a full F77 parser and is available in source form via FTP from netlib.bell-labs.com and by mail from netlib@research.bell-labs.com. GCC at gcc.gnu.org includes a Fortran 90 compiler. Also see the separately maintained g95 at http://www.g95.org. * Where can I get Modula-2, Pascal, Ada, or SQL grammars in yacc? I have one each of those, too, in the archive at ftp.iecc.com, though I haven't tried to use any of them. According to the comp.lang.ada FAQ, a yacc grammar for Ada 95 is available: ftp://sw-eng.falls-church.va.us/public/AdaIC/standards/95lrm_rat/grammar9x.y and a lex grammar for Ada 95 is available: ftp://sw-eng.falls-church.va.us/public/AdaIC/standards/95lrm_rat/lexer9x.l There's an Ada front end called GNAT for GCC, available at ftp://cs.nyu.edu/pub/gnat/. * Where can I get a free Cobol grammar in yacc? See message 99-06-079 for a free Cobol compiler with source. See http://adam.wins.uva.nl/~x/grammars/vs-cobol-ii/ for a grammar, but not one that yacc can use directly. Siber Systems at http://www.siber.com/sct/ has a variety of Cobol tools for sale including a parser. At http://www.netsis.it/~asantini/cobcy/ you can find a partial Cobol to C translator with a parser that handles about half of Cobol syntax. Half is a lot better than none. The LRGen web site at http://home.earthlink.net/~autom/downloads.html has a Cobol grammar available to LRGen customers. Ken Foskey waratah@zip.com.au has a Cobol parser project at http://www.zipworld.com.au/~waratah/ Also see the Cobol FAQ posted monthly to comp.lang.misc and comp.lang.cobol. * Where can I get a QBasic compiler? See http://www.qbcafe.net/ for links to QBasic tools. * Where can I get a Basic grammar in yacc? Take a look at ftp://ftp.uu.net:/usenet/comp.sources.unix/volume2/basic/ which contains a Basic interpreter with yacc parser. Also see http://www.basic256.org/ for an open source byte code compiler and interpreter. * Where can I get a PL/I or PL/M grammar? There's a PL/I source code formatting package at vm1.velocity-software.com in PLIFORM.ZIP. It's all written in PL/I. There's a PL/M in the archives at ftp://ftp.iecc.com/pub/file/plm.shar.gz Also see message 94-03-062 for a report on a PL/M to C translator. * Where can I get yacc and lex ? Flex, originally written by Vern Paxson, is a superior reimplementation of lex. It is available from the same places as Gnu sources, but is not subject to the Gnu copyleft. Berkeley Yacc is a quite compatible PD version of yacc by Bob Corbett. Thomas E. Dickey is now maintaining a variant of Berkeley Yacc, at http://invisible-island.net/byacc/byacc.html, and a fork of flex called reflex at http://invisible-island.net/reflex/reflex.html Gnu Bison is derived from an earlier version of Corbett's work and is also fairly compatible with yacc. * Are there C++ versions of yacc and lex? Bison has an option to create C++ grammars. Flex has a C++ option which doesn't work, but its C code compiles fine in C++. * How can I get started with yacc and lex and compiler writing in general? There are short on-line tutorials for lex and yacc at http://www-isia.cma.fr/~bernard/textes/minimanlexyacc-english.html#toc5 http://members.xoom.com/thomasn/y_man.htm Or read any of the many books on the topic. Here are a few of them. Also see message 93-01-155 which reviews many compiler textbooks. Pat Terry's "Compilers and Compiler Generators", originally published as a book, is on the web at http://www.scifac.ru.ac.za/compilers/ Aho, Sethi, and Ullman, "Compilers: Principles, Techniques, and Tools," Addison Wesley, 1986, ISBN 0-201-10088-6, the "dragon book". Describes clearly and completely lexing and parsing techniques including the ones in yacc and lex. The authors work or have worked at Bell Labs with Steve Johnson and Mike Lesk, the authors of Yacc and Lex. It's still the classic text, although it's getting kind of old. Alan Holub, "Compiler Design in C," Prentice-Hall, 1990, ISBN 0-13-155045-4. A large book containing the complete source code to a reimplementation of yacc and lex and a C compiler. Quite well written, too, though it has a lot of errors. The fourth printing is supposed to correct most of them. An errata list is in message 90-06-081, and a newer one in PDF (yuck) on his web site at <http://www.holub.com>. John R. Levine (that's me), "flex & bison",, O'Reilly and Associates, 2009, ISBN 978-0-596-15597-1, $29.99. A concise introduction with completely worked out examples and an extensive reference section. It is mostly aimed at the C programmer, but also has some discussion of parsers in C++ and Java. Donnely and Stallman, "The Bison Manual," part of the on-line distrubution of the FSF's Bison, a reimplementation of yacc. As with everything else from the FSF, full source code is included. Axel T. Schreiner and H. George Friedman, Jr., "Introduction to Compiler Construction with UNIX," Prentice-Hall, 1985. Oriented to tutorial work. Good for beginners. Develops a small subset-of-C compiler through the book. (Recommended by Eric Hughes <hughes@ocf.Berkeley.EDU>.) Richard Hash <rgh@shell.com> comments that the book has many typographical errors, and readers should be suspicious of the examples until they actually try them. Sources are available as http://www.cs.illinois.edu/homes/friedman/tar Bennett, J.P. "Introduction to Compiling Techniques - A First Course Using Ansi C, Lex and Yacc," McGraw Hill Book Co, 1990, ISBN 0-07-707215-4. It's intended for a first course in modern compiler techniques, is very clearly written, and has a full chapter on YACC. I found it to be a good introductory text before getting into the 'Dragon book'. (Recommended by John Merlin <J.H.Merlin@ecs.southampton.ac.uk>.) Source code is available at ftp.bath.ac.uk. Charles N. Fischer & Richard J. LeBlanc, "Crafting A Compiler", Benjamin Cummings Publishing, Menlo Park, CA, 1988, ISBN 0-8053-3201-4. There's also a revised version as of 1990 or 1991 titled "Crafting A Compiler in C", with all examples in C (the original used ADA/CS). The tools are at http://www.cs.wisc.edu/~fischer/ftp/tools/ Erich Nahum <nahum@cs.umass.edu> writes: A key compiler reference. We used the original to great effect in Eliot Moss' graduate compiler construction class here at UMass. My feeling is that Fischer & LeBlanc is a good tutorial, and one should use Aho, Sethi, & Ullman as a reference. Des Watson, "High-Level Languages and Their Compilers," International Computer Science Series, Addison-Wesley Publishing Company, Wokingham England, 1989. Adrian Howard <adrianh@cogs.sussex.ac.uk> writes: This is the kindest, most readable introduction to compilers at the graduate level I have ever read - an excellent example of what textbooks should all be like. W.M. Waite and G. Goos, "Compiler Construction," Springer-Verlag, New York, 1984. Dick Grune <dick@cs.vu.nl> writes: A theoretical approach to compiler construction. Refreshing in that it gives a completely new view of many subjects. Heavy reading, high information density. J.P. Tremblay and P.G. Sorenson, "The Theory and Practice of Compiler Writing," McGraw-Hill, 1985. Dick Grune <dick@cs.vu.nl> writes: Extensive and detailed. Heavy reading. To be consulted when other sources fail. James E. Hendrix, "The Small-C Compiler", 2nd ed., M&T Books, ISBN 0-934375-88-7 <Book Alone>, 1-55851-007-9 <MS-DOS Disk>, 0-934375-97-6 <Book and Disk>. William Jhun <ec_ind03@oswego.edu> writes: It explaines the C-language is thorough....and explains every single aspect of the compiler. The book compares source code to p-code to assembly. It goes over a nice set of optimization routines, explains the parser, the back end, and even includes source code, which the compiler on the disk can actually compile itself. It's an extremely interesting book, check it out. (Out of print, but see http://www.ddj.com/cdrom/ where you can buy a CD-ROM that has the full text of the book and a lot of other stuff.) Ronald Mak, "Writing Compilers and Interpreters: An Applied Approach", 1991, John Wiley and Sons, Inc. ISBN 0-471-50968-X. Andrew Tucker <a_tucker@paul.spu.edu> writes: This 512-page book presents a strictly hands on approach, developing a Pascal interpreter and interactive debugger, then completing with a compiler which emits 8086 assembly. All source code is provided in print and on disk. This book is very low to non-existent in theoretical content, but is very practical and readable for an introduction. Taylor Hutt <thutt@access.digex.net> comments that the book is a piece of junk. The code that is contained in the book is full of bugs, and the code that it generates will not work. "The Art of Compiler Design", Thomas Pittman & James Peters, Prentice-Hall International, 1992, Englewood Cliffs, NJ 07632, 0-13-046160-1 Franklin L. Vermeulen <vfrank@vnet3.vub.ac.be> writes: This is a very nicely written and straightforward text on compiler construction. There is a certain (unavoidable?) amount of overlap with a course on automata (as in Aho, Sethi and Ullman). It is based on Modula-2 and on an experimental tool, the TAG compiler-compiler (Transformational Attribute Grammar) which seems to be a C-independent superset of lex/yacc, because its syntax allows you to specify all semantic actions without a single line of C-code (or any other implementation language, for that matter). A. Pyster, "Compiler Design and Constuction (Tools and Techniques)", Second Ed., Van Nostrand Reinhold, ISBN: 0-442-27536-6. Gabriela O. de Vivo <gdevivo@dino.conicit.ve> writes: The book covers the general principles of compiler design and presents a good number of examples focusing on the building of pieceparts of compilers for C and Pascal. The implementation (construction) language is C. Note that this edition (in contrast with the previous one) is very related to the Unix world, including the use of tools like Lex, Yacc, and standard utilities. (Out of print.) Thomas W. Parsons, "Introduction to compiler construction", Computer Science Press, c1992, ISBN: 0-716782618. Quinn Tyler Jackson <qjackson@direct.ca> writes: Provides a broad overview of the topics of finite state automaton theory (deterministic and non-deterministic), lexical analysis, parsing models, and target generation and optimization strategies. Includes appendices on lex and yacc. Most examples in Pascal. (Recommended reading for the faint at heart.) "Programming a Personal Computer" by Per Brinch Hansen Prentice-Hall 1982 ISBN 0-13-730283-5 Joe Snyder <joe@semaphorecorp.com> writes: This unfortunately-titled book explains the design and creation of a single-user programming environment for micros, using a Pascal-like language called Edison. The author presents all source code and explanations for the step-by-step implementation of an Edison compiler and simple supporting operating system, all written in Edison itself (except for a small supporting kernel written in a symbolic assembler for PDP 11/23; the complete source can also be ordered for the IBM PC). The most interesting things about this book are: 1) its ability to demonstrate how to create a complete, self-contained, self-maintaining, useful compiler and operating system, and 2) the interesting discussion of language design and specification problems and trade-offs in Chapter 2. "Brinch Hansen on Pascal Compilers" by Per Brinch Hansen Prentice-Hall 1985 ISBN 0-13-083098-4 Joe Snyder <joe@semaphorecorp.com> writes: Another light-on-theory heavy-on-pragmatics here's-how-to-code-it book. The author presents the design, implementation, and complete source code for a compiler and p-code interpreter for Pascal- (Pascal "minus"), a Pascal subset with boolean and integer types (but no characters, reals, subranged or enumerated types), constant and variable definitions and array and record types (but no packed, variant, set, pointer, nameless, renamed, or file types), expressions, assignment statements, nested procedure definitions with value and variable parameters, if statements, while statements, and begin-end blocks (but no function definitions, procedural parameters, goto statements and labels, case statements, repeat statements, for statements, and with statements). The compiler and interpreter are written in Pascal* (Pascal "star"), a Pascal subset extended with some Edison-style features for creating software development systems. A Pascal* compiler for the IBM PC is sold by the author, but it's easy to port the book's Pascal- compiler to any convenient Pascal platform. This book makes the design and implementation of a compiler look easy. I particularly like the way the author is concerned with quality, reliability, and testing. The compiler and interpreter can easily be used as the basis for a more involved language or compiler project, especially if you're pressed to quickly get something up and running. "A Model Implementation of Standard Pascal" by Jim Welsh & Atholl Hay Prentice-Hall 1986 ISBN 0-13-586454-2 Joe Snyder <joe@semaphorecorp.com> writes: This book is only really useful if you need to implement a COMPLETE version of a platform-independent Pascal, but I find it interesting because the 483 pages consist entirely of the source code listing for the compiler and p-code interpreter (both written in Pascal itself), including copious {comments} to explain the code. The code eagerly delves into the horrible minutiae necessary when implementing a complete language, and proves that no language designer should be allowed to present his design until AFTER being forced to write a complete compiler for the language. "Writing Interactive Compilers and Interpreters" bu P.J. Brown, 1979, John Wiley & Sons Ltd ISBN 0 471 27609 X hbk ISBN 0471 100722 pbk Martin Rodgers <cyber_surfer@wildcard.demon.co.uk> writes: Brown explains why we might wish to use an interactive compiler, and what we might mean when we make distinctions like "compiled" and "interpreted". He uses Basic as the example language for his book, plus a little pseudo code where necessary. Modern Basic may be very different to what he used, but it's easy to see how techniques that apply a line oriented language might be extended to a larger unit of compilation. Brown discusses issues that are specific to interactive language systems, which may be neglected in compiler books that focus more on a batch approach and optimised code. Still, he has a few things to say about the use of bytecodes and native code, plus what might today be called "Just In Time" compiling. An excellent introduction to compilers, with a few ideas for advanced compilers, too. (Out of print.) Peter Calingaert, "Program Translation Fundamentals", Computer Science Press, c1988, ISBN: 0-88175-096-4, pp 366. Quinn Tyler Jackson <qjackson@wave.home.com> writes: Covers assemblers, program modules, macro processing, interpretation and generation, source-program analysis, data structures, compilation, linking and loading. The reader is assumed to have some experience "both in an assembler language and in a machine-independent procedural language." It's a good overview of the many aspects of program translation and compilation, this book would make a good second look into compilation before diving into hard theory, but after having gleaned some basics from a more introductory work such. Alberto Apostolico & Zvi Galil, "Pattern Matching Algorithms", Oxford University Press, 1997, ISBN: 0-19-511367-5. Quinn Tyler Jackson <qjackson@wave.home.com> writes: This book "attempts a snapshot of the current state of the art in Pattern Matching" research, and in this reader's opinion, it achieves its stated goal. From algorithms to find the shortest common superstrings, to 2D matrix searches, almost no pattern matching problem encountered by today's stringologist is left unaddressed. The preface declares the book's intention to combine a graduate or advanced level course textbook with a source for the specialist as well as the neophyte -- but I would advise the "neophyte" to have an adequate background in notation and formalisms, since the many authors are academics, and no algorithm presented goes without formal quantification. The bibliographies at the end of each chapter are a priceless resource. Steven S. Muchnick, Advanced Compiler Design & Implementation,Morgan Kaufmann Publishers, (1997), pp. 856, ISBN: 1-55860-320-4. Quinn Tyler Jackson <qjackson@wave.home.com> writes: Except perhaps for the brief overview of compiler architecture at the beginning, this book is for the seasoned compiler writer rather than the novice or student wanting an overview of compiler construction. Muchnick's focus is on code generation, optimization, and, as the title suggests, advanced issues. My opinion is that this clear, thorough treatment is for the seasoned compiler engineer who already has one or two compiler or interpreter implementations on the curriculum vitae and who is looking for new ways to address some of the deeper issues of the field. There is no hand holding going on with a book like this. Andrew W. Appel, Modern Compiler Implementation in C Cambridge University Press (1998), pp. 544, ISBN: 0-521-58390-X Quinn Tyler Jackson <qjackson@wave.home.com> writes: This book shines with the experience of those that came before it. It covers all of the phases of compilation in a clear, readable fashion. Many of the topics it brings to light were once the domain of the illuminati of compiler construction. A conscientious reader, with some of the other literature (such as Levine et al.'s Lex & Yacc) under his belt, an Internet connection to hunt down the errata and source to the samples in the book, a good C compiler, and a determination to absorb the details, could probably learn to write a compiler from the ground up and come out of the experience without too many major holes in knowledge. If anyone sends in others, I'll be happy to add them to the list. * Where can I FTP the sources to the programs in Holub's "Compiler Design in C" or Mak's "Writing Compilers and Interpreters" ? The programs in Mak's second edition are at ftp://ftp.wiley.com/public/computer_books/Software_Development/Mak-Writing_Compilers/ in an odd MS-DOS only format. Holub's code is shareware, available on his web site at <http://www.holub.com>. * Where can I learn about garbage collection ? Garbage collection (more properly, automatic storage management) has its own mailing list and FAQ. Find more info at: http://iecc.com/gclist/ To join the list, send "subscribe gclist" to majordomo@iecc.com. * Where can I find specs for Intel object files? Specs for Windows OMF and PE are available via a link at the bottom of the Wikipedia article http://en.wikipedia.org/wiki/Relocatable_Object_Module_Format. Unix ELF and DWARF are available in PDF at http://refspecs.linuxbase.org/. A more recent definition of PE is on Microsoft's web site at http://msdn.microsoft.com. (Registration required.) Extensive information on DWARF is at http://dwarfstd.org/. Regards, John Levine, comp.compilers moderator -- Send compilers articles to compilers@iecc.com, meta-mail to compilers-request@iecc.com. Archives at http://compilers.iecc.com