]> pd.if.org Git - pccts/commitdiff
auto commit for import
authorTerence Parr <>
Fri, 6 Oct 1995 00:39:46 +0000 (19:39 -0500)
committerNathan Wagner <nw@hydaspes.if.org>
Sun, 26 Feb 2017 02:16:52 +0000 (20:16 -0600)
CHANGES_FROM_1.31 [new file with mode: 0755]
install.mpw [new file with mode: 0755]
pccts.1 [new file with mode: 0755]
pccts1.txt [new file with mode: 0755]

diff --git a/CHANGES_FROM_1.31 b/CHANGES_FROM_1.31
new file mode 100755 (executable)
index 0000000..6383e2d
--- /dev/null
@@ -0,0 +1,522 @@
+CHANGES FROM 1.31
+
+This file contains the migration of PCCTS from 1.31 in the order that
+changes were made.  1.32b7 is the last beta before full 1.32.
+Terence Parr, Parr Research Corporation 1995.
+
+
+======================================================================
+1.32b1
+Added Russell Quong to banner, changed banner for output slightly
+Fixed it so that you have before / after actions for C++ in class def
+Fixed bug in optimizer that made it sometimes forget to set internal
+        token pointers.  Only showed up when a {...} was in the "wrong spot".
+
+======================================================================
+1.32b2
+Added fixes by Dave Seidel for PC compilers in 32 bit mode (config.h
+and set.h).
+
+======================================================================
+1.32b3
+Fixed hideous bug in code generator for wildcard and for ~token op.
+
+from Dave Seidel
+
+   Added pcnames.bat
+   1. in antlr/main.c: change strcasecmp() to stricmp()
+
+   2. in dlg/output.c: use DLEXER_C instead on "DLexer.C"
+
+   3. in h/PBlackBox.h: use <iostream.h> instead of <stream.h>
+
+======================================================================
+1.32b4
+When the -ft option was used, any path prefix screwed up
+the gate on the .h files
+
+Fixed yet another bug due to the optimizer.
+
+The exception handling thing was a bit wacko:
+
+a : ( A B )? A B
+  | A C
+  ;
+  exception ...
+
+caused an exception if "A C" was the input.  In other words,
+it found that A C didn't match the (A B)? pred and caused
+an exception rather than trying the next alt.  All I did
+was to change the zzmatch_wsig() macros.
+
+Fixed some problems in gen.c relating to the name of token
+class bit sets in the output.
+
+Added the tremendously cool generalized predicate.  For the
+moment, I'll give this bried description.
+
+a : <<predicate>>? blah
+  | foo
+  ;
+
+This implies that (assuming blah and foo are syntactically
+ambiguous) "predicate" indicates the semantic validity of
+applying "blah".  If "predicate" is false, "foo" is attempted.
+
+Previously, you had to say:
+
+a : <<LA(1)==ID ? predicate : 1>>? ID
+  | ID
+  ;
+
+Now, you can simply use "predicate" without the ?: operator
+if you turn on ANTLR command line option: "-prc on".  This
+tells ANTLR to compute that all by itself.  It computes n
+tokens of lookahead where LT(n) or LATEXT(n) is the farthest
+ahead you look.
+
+If you give a predicate using "-prc on" that is followed
+by a construct that can recognize more than one n-sequence,
+you will get a warning from ANTLR.  For example,
+
+a : <<isTypeName(LT(1)->getText())>>? (ID|INT)
+  ;
+
+This is wrong because the predicate will be applied to INTs
+as well as ID's.  You should use this syntax to make
+the predicate more specific:
+
+a : (ID)? => <<isTypeName(LT(1)->getText())>>? (ID|INT)
+  ;
+
+which says "don't apply the predicate unless ID is the
+current lookahead context".
+
+You cannot currently have anything in the "(context)? =>"
+except sequences such as:
+
+( LPAREN ID | LPAREN SCOPE )? => <<pred>>?
+
+I haven't tested this THAT much, but it does work for the
+C++ grammar.
+
+======================================================================
+1.32b5
+
+Added getLine() to the ANTLRTokenBase and DLGBasedToken classes
+left line() for backward compatibility.
+----
+Removed SORCERER_TRANSFORM from the ast.h stuff.
+-------
+Fixed bug in code gen of ANTLR such that nested syn preds work more
+efficiently now.  The ANTLRTokenBuffer was getting very large
+with nested predicates.
+------
+Memory leak is now gone from ANTLRTokenBuf; all tokens are deleted.
+For backward compatibility reasons, you have to say parser->deleteTokens()
+or mytokenbuffer->deleteTokens() but later it will be the default mode.
+Say this after the parser is constructed. E.g.,
+
+    ParserBlackBox<DLGLexer, MyParser, ANTLRToken> p(stdin);
+    p.parser()->deleteTokens();
+    p.parser()->start_symbol();
+
+
+==============================
+1.32b6
+
+Changed so that deleteTokens() will do a delete ((ANTLRTokenBase *))
+on the ptr.  This gets the virtual destructor.
+
+Fixed some weird things in the C++ header files (a few return types).
+
+Made the AST routines correspond to the book and SORCERER stuff.
+
+New token stuff:  See testcpp/14/test.g
+
+ANTLR accepts a #pragma gc_tokens which says
+[1]     Generate label = copy(LT(1)) instead of label=LT(1) for
+        all labeled token references.
+[2]     User now has to define ANTLRTokenPtr (as a class or a typedef
+        to just a pointer) as well as the ANTLRToken class itself.
+               See the example.
+
+To delete tokens in token buffer, use deleteTokens() message on parser.
+
+        All tokens that fall off the ANTLRTokenBuffer get deleted
+        which is what currently happens when deleteTokens() message
+        has been sent to token buffer.
+
+We always generate ANTLRTokenPtr instead of 'ANTLRToken *' now.
+Then if no pragma set, ANTLR generates a
+
+        class ANTLRToken;
+        typedef ANTLRToken *ANTLRTokenPtr;
+
+in each file.
+
+Made a warning for x:rule_ref <<$x>>; still no warning for $i's, however.
+class BB {
+
+a : x:b y:A <<$x
+$y>>
+  ;
+
+b : B;
+
+}
+generates
+Antlr parser generator   Version 1.32b6   1989-1995
+test.g, line 3: error: There are no token ptrs for rule references: '$x'
+
+===================
+1.32b7:
+
+[With respect to token object garbage collection (GC), 1.32b7
+ backtracks from 1.32b6, but results in better and less intrusive GC.
+ This is the last beta version before full 1.32.]
+
+BIGGEST CHANGES:
+
+o      The "#pragma gc_tokens" is no longer used.
+
+o      .C files are now .cpp files (hence, makefiles will have to
+       be changed; or you can rerun genmk).  This is a good move,
+       but causes some backward incompatibility problems.  You can
+       avoid this by changing CPP_FILE_SUFFIX to ".C" in pccts/h/config.h.
+
+o      The token object class hierarchy has been flattened to include
+       only three classes: ANTLRAbstractToken, ANTLRCommonToken, and
+       ANTLRCommonNoRefCountToken.  The common token now does garbage
+       collection via ref counting.
+
+o      "Smart" pointers are now used for garbage collection.  That is,
+       ANTLRTokenPtr is used instead of "ANTLRToken *".
+
+o      The antlr.1 man page has been cleaned up slightly.
+
+o      The SUN C++ compiler now complains less about C++ support code.
+
+o      Grammars which subclass ANTLRCommonToken must wrap all token
+       pointer references in mytoken(token_ptr).  This is the only
+       serious backward incompatibility.  See below.
+
+
+MINOR CHANGES:
+
+--------------------------------------------------------
+1      deleteTokens()
+
+The deleteTokens() message to the parser or token buffer has been changed
+to one of:
+
+    void noGarbageCollectTokens()   { inputTokens->noGarbageCollectTokens(); }
+    void garbageCollectTokens()     { inputTokens->garbageCollectTokens(); }
+
+The token buffer deletes all non-referenced tokens by default now.
+
+--------------------------------------------------------
+2      makeToken()
+
+The makeToken() message returns a new type.  The function should look
+like:
+
+    virtual ANTLRAbstractToken *makeToken(ANTLRTokenType tt,
+                                          ANTLRChar *txt,
+                                          int line)
+    {
+        ANTLRAbstractToken *t = new ANTLRCommonToken(tt,txt);
+        t->setLine(line);
+        return t;
+    }
+
+--------------------------------------------------------
+3      TokenType
+
+Changed TokenType-> ANTLRTokenType  (often forces changes in AST defs due
+to #[] constructor called to AST(tokentype, string)).
+
+--------------------------------------------------------
+4      AST()
+
+You must define AST(ANTLRTokenPtr t) now in your AST class definition.
+You might also have to include ATokPtr.h above the definition; e.g.,
+if AST is defined in a separate file, such as AST.h, it's a good idea
+to include ATOKPTR_H (ATokPtr.h).  For example,
+
+       #include ATOKPTR_H
+       class AST : public ASTBase {
+       protected:
+           ANTLRTokenPtr token;
+       public:
+           AST(ANTLRTokenPtr t) { token = t; }
+           void preorder_action() {
+               char *s = token->getText();
+               printf(" %s", s);
+           }
+       };
+
+Note the use of smart pointers rather than "ANTLRToken *".
+
+--------------------------------------------------------
+5      SUN C++
+
+From robertb@oakhill.sps.mot.com Bob Bailey. Changed ANTLR C++ output
+to avoid an error in Sun C++ 3.0.1.  Made "public" return value
+structs created to hold multiple return values public.
+
+--------------------------------------------------------
+6      genmk
+
+Fixed genmk so that target List.* is not included anymore.  It's
+called SList.* anyway.
+
+--------------------------------------------------------
+7      \r vs \n
+
+Scott Vorthmann <vorth@cmu.edu> fixed antlr.g in ANTLR so that \r
+is allowed as the return character as well as \n.
+
+--------------------------------------------------------
+8      Exceptions
+
+Bug in exceptions attached to labeled token/tokclass references.  Didn't gen
+code for exceptions.  This didn't work:
+
+a : "help" x:ID
+  ;
+        exception[x]
+        catch MismatchedToken : <<printf("eh?\n");>>
+
+Now ANTLR generates (which is kinda big, but necessary):
+
+        if ( !_match_wsig(ID) ) {
+                if ( guessing ) goto fail;
+                _signal=MismatchedToken;
+                switch ( _signal ) {
+                case MismatchedToken :
+                        printf("eh?\n");
+                        _signal = NoSignal;
+                        break;
+                default :
+                        goto _handler;
+                }
+        }
+
+which implies that you can recover and continue parsing after a missing/bad
+token reference.
+
+--------------------------------------------------------
+9      genmk
+
+genmk now correctly uses config file for CPP_FILE_SUFFIX stuff.
+
+--------------------------------------------------------
+10     general cleanup / PURIFY
+
+Anthony Green <green@vizbiz.com> suggested a bunch of good general
+clean up things for the code; he also suggested a few things to
+help out the "PURIFY" memory allocation checker.
+
+--------------------------------------------------------
+11     $-variable references.
+
+Manuel ORNATO indicated that a $-variable outside of a rule caused
+ANTLR to crash.  I fixed this.
+
+12     Tom Moog suggestion
+
+Fail action of semantic predicate needs "{}" envelope.  FIXED.
+
+13     references to LT(1).
+
+I have enclosed all assignments such as:
+
+             _t22 = (ANTLRTokenPtr)LT(1);
+
+in "if ( !guessing )" so that during backtracking the reference count
+for token objects is not increased.
+
+
+TOKEN OBJECT GARBAGE COLLECTION
+
+1      INTRODUCTION
+
+The class ANTLRCommonToken is now garbaged collected through a "smart"
+pointer called ANTLRTokenPtr using reference counting.  Any token
+object not referenced by your grammar actions is destroyed by the
+ANTLRTokenBuffer when it must make room for more token objects.
+Referenced tokens are then destroyed in your parser when local
+ANTLRTokenPtr objects are deleted.  For example,
+
+a : label:ID ;
+
+would be converted to something like:
+
+void yourclass::a(void)
+{
+       zzRULE;
+       ANTLRTokenPtr label=NULL;       // used to be ANTLRToken *label;
+        zzmatch(ID);
+        label = (ANTLRTokenPtr)LT(1);
+       consume();
+       ...
+}
+
+When the "label" object is destroyed (it's just a pointer to your
+input token object LT(1)), it decrements the reference count on the
+object created for the ID.  If the count goes to zero, the object
+pointed by label is deleted.
+
+To correctly manage the garbage collection, you should use
+ANTLRTokenPtr instead of "ANTLRToken *".  Most ANTLR support code
+(visible to the user) has been modified to use the smart pointers.
+
+***************************************************************
+Remember that any local objects that you create are not deleted when a
+lonjmp() is executed.  Unfortunately, the syntactic predicates (...)?
+use setjmp()/longjmp().  There are some situations when a few tokens
+will "leak".
+***************************************************************
+
+2      DETAILS
+
+o      The default is to perform token object garbage collection.
+       You may use parser->noGarbageCollectTokens() to turn off
+       garbage collection.
+
+
+o      The type ANTLRTokenPtr is always defined now (automatically).
+       If you do not wish to use smart pointers, you will have to
+       redefined ANTLRTokenPtr by subclassing, changing the header
+       file or changing ANTLR's code generation (easy enough to
+       do in gen.c).
+
+o      If you don't use ParserBlackBox, the new initialization sequence is:
+
+           ANTLRTokenPtr aToken = new ANTLRToken;
+           scan.setToken(mytoken(aToken));
+
+       where mytoken(aToken) gets an ANTLRToken * from the smart pointer.
+
+o      Define C++ preprocessor symbol DBG_REFCOUNTTOKEN to see a bunch of
+       debugging stuff for reference counting if you suspect something.
+
+
+3      WHY DO I HAVE TO TYPECAST ALL MY TOKEN POINTERS NOW??????
+
+If you subclass ANTLRCommonToken and then attempt to refer to one of
+your token members via a token pointer in your grammar actions, the
+C++ compiler will complain that your token object does not have that
+member.  For example, if you used to do this
+
+<<
+class ANTLRToken : public ANTLRCommonToken {
+        int muck;
+       ...
+};
+>>
+
+class Foo {
+a : t:ID << t->muck = ...; >> ;
+}
+
+Now, you must do change the t->muck reference to:
+
+a : t:ID << mytoken(t)->muck = ...; >> ;
+
+in order to downcast 't' to be an "ANTLRToken *" not the
+"ANTLRAbstractToken *" resulting from ANTLRTokenPtr::operator->().
+The macro is defined as:
+
+/*
+ * Since you cannot redefine operator->() to return one of the user's
+ * token object types, we must down cast.  This is a drag.  Here's
+ * a macro that helps.  template: "mytoken(a-smart-ptr)->myfield".
+ */
+#define mytoken(tp) ((ANTLRToken *)(tp.operator->()))
+
+You have to use macro mytoken(grammar-label) now because smart
+pointers are not specific to a parser's token objects.  In other
+words, the ANTLRTokenPtr class has a pointer to a generic
+ANTLRAbstractToken not your ANTLRToken; the ANTLR support code must
+use smart pointers too, but be able to work with any kind of
+ANTLRToken.  Sorry about this, but it's C++'s fault not mine.  Some
+nebulous future version of the C++ compilers should obviate the need
+to downcast smart pointers with runtime type checking (and by allowing
+different return type of overridden functions).
+
+A way to have backward compatible code is to shut off the token object
+garbage collection; i.e., use parser->noGarbageCollectTokens() and
+change the definition of ANTLRTokenPtr (that's why you get source code
+<wink>).
+
+
+PARSER EXCEPTION HANDLING
+
+I've noticed some weird stuff with the exception handling.  I intend
+to give this top priority for the "book release" of ANTLR.
+
+==========
+1.32 Full Release
+
+o      Changed Token class hierarchy to be (Thanks to Tom Moog):
+
+        ANTLRAbstractToken
+          ANTLRRefCountToken
+             ANTLRCommonToken
+          ANTLRNoRefCountCommonToken
+
+o      Added virtual panic() to ANTLRAbstractToken.  Made ANTLRParser::panic()
+       virtual also.
+
+o      Cleaned up the dup() stuff in AST hierarchy to use shallowCopy() to
+       make node copies.  John Farr at Medtronic suggested this.  I.e.,
+       if you want to use dup() with either ANTLR or SORCERER or -transform
+       mode with SORCERER, you must defined shallowCopy() as:
+
+       virtual PCCTS_AST *shallowCopy()
+       {
+           return new AST;
+           p->setDown(NULL);
+           p->setRight(NULL);
+           return p;
+       }
+
+       or
+
+       virtual PCCTS_AST *shallowCopy()
+       {
+           return new AST(*this);
+       }
+       
+       if you have defined a copy constructor such as
+
+       AST(const AST &t)       // shallow copy constructor
+       {
+               token = t.token;
+               iconst = t.iconst;
+               setDown(NULL);
+               setRight(NULL);
+       }
+
+o      Added a warning with -CC and -gk are used together.  This is broken,
+       hence a warning is appropriate.
+
+o      Added warning when #-stuff is used w/o -gt option.
+
+o      Updated MPW installation.
+
+o      "Miller, Philip W." <MILLERPW@f1groups.fsd.jhuapl.edu> suggested
+       that genmk be use RENAME_OBJ_FLAG RENAME_EXE_FLAG instead of
+       hardcoding "-o" in genmk.c.
+
+o      made all exit() calls use EXIT_SUCCESS or EXIT_FAILURE.
+
+===========================================================================
+1.33
+
+EXIT_FAILURE and EXIT_SUCCESS were not always defined.  I had to modify
+a bunch of files to use PCCTS_EXIT_XXX, which forces a new version.  Sorry
+about that.
+
diff --git a/install.mpw b/install.mpw
new file mode 100755 (executable)
index 0000000..d8cdaae
--- /dev/null
@@ -0,0 +1,80 @@
+# Note: this script assumes that your MPW and PCCTS directories are
+#       of a standard configuration.
+
+# To install PCCTS: 'Set Directory' to the directory containing this
+# file (should be the main PCCTS directory) and execute this script.
+#
+# By default, it will install ANTLR and DLG in your {MPW}Tools folder.
+#
+# ANTLR and DLG have Commando interfaces, check them out.
+#
+# Report MPW-Specific problems to Scott Haney at haney@random.llnl.gov.
+
+Echo "# `Date -t` ----- Building PCCTS v1.33 for MPW."
+
+# Make 'Macintosh' folders to hold object files.
+
+Echo "# `Date -t` -----   Making Object File Folders."
+If (!`exists :dlg:Macintosh:`)
+  NewFolder :dlg:Macintosh:
+End
+If (!`exists :antlr:Macintosh:`)
+  NewFolder :antlr:Macintosh:
+End
+If (!`exists :support:set:Macintosh:`)
+  NewFolder :support:set:Macintosh:
+End
+If (!`exists :support:sym:Macintosh:`)
+  NewFolder :support:sym:Macintosh:
+End
+
+Echo "# `Date -t` -----   Done."
+Echo "#"
+
+# DLG build commands
+
+Echo "# `Date -t` -----   Building DLG."
+Echo "# `Date -t` -----     Analyzing dependencies."
+Directory :dlg:
+Begin
+       If (!`exists dlg.make`)
+               Move -y makefile.mpw dlg.make
+       End
+       If (!`exists dlg.r`)
+               Move -y dlg.mpw.r dlg.r
+       End
+       Echo "Set Echo 1"
+       Make Install -f dlg.make
+End > dlg.makeout
+Echo "# `Date -t` -----     Executing build commands."
+dlg.makeout
+Delete dlg.makeout
+Echo "# `Date -t` -----   Done."
+Echo "#"
+Directory ::
+
+# ANTLR build commands
+
+Echo "# `Date -t` -----   Building ANTLR."
+Echo "# `Date -t` -----     Analyzing dependencies."
+Directory :antlr:
+Begin
+       If (!`exists antlr.make`)
+               Move -y makefile.mpw antlr.make
+       End
+       If (!`exists antlr.r`)
+               Move -y antlr.mpw.r antlr.r
+       End
+       Echo "Set Echo 1"
+       Make Install -f antlr.make
+End > antlr.makeout
+Echo "# `Date -t` -----     Executing build commands."
+antlr.makeout
+Delete antlr.makeout
+Echo "# `Date -t` -----   Done."
+Echo "#"
+Directory ::
+
+# Done
+
+Echo "# `Date -t` ----- Done Building PCCTS v1.33. Have a nice day."
diff --git a/pccts.1 b/pccts.1
new file mode 100755 (executable)
index 0000000..0b2aaf3
--- /dev/null
+++ b/pccts.1
@@ -0,0 +1,77 @@
+.TH PCCTS 1 "April 1994" "PCCTS" "PCCTS Manual Pages"
+.SH NAME
+PCCTS \- The Purdue Compiler Construction Tool Set
+.SH DESCRIPTION
+.PP
+PCCTS is a set of public domain software tools designed to facilitate
+the implementation of compilers and other translation systems.  These
+tools currently include \fIantlr\fP, \fIdlg\fP and support code.  In
+many ways, PCCTS is similar to a highly integrated version of YACC
+[Joh78] and LEX [Les75]; where \fIantlr\fP (ANother Tool for Language
+Recognition) corresponds to YACC and \fIdlg\fP (DFA-based Lexical
+analyzer Generator) functions like LEX.  However, PCCTS has many
+additional features which make it easier to use for a wider range of
+translation problems.
+.PP
+PCCTS grammars contain specifications for lexical and syntactic
+analysis, intermediate-form construction and error reporting.  Rules
+may employ Extended Backus Naur Form (EBNF) grammar constructs and may
+define parameters, return values and local variables.  Languages
+described in PCCTS are recognized via Strong LL(k) parsers constructed
+in pure, human-readable, C code.  As a result, standard debugging
+tools can be used to trace and debug PCCTS parsers.  Breakpoints can
+be set so that parser execution stops before or after grammar
+fragments of interest have been recognized.
+.PP
+PCCTS grammars may contain predicates which allow parsing to be a
+function of semantics as well as syntax\ \(em context-sensitive
+grammars.  Backtracking can also be specified to recognized non-LL(k)
+and non-LALR(k) constructs.  In addition, PCCTS supports
+intermediate-form (such as expression-trees) construction via a
+flexible Abstract-Syntax Tree (AST) mechanism which allows trees to be
+built explicitly or automatically.  The user explicitly creates trees
+via a LISP-like tree constructor or directs the automatic tree
+construction facility via simple grammar directives.  AST nodes are
+user-defined and are generally a function of attributes.  A default
+transformation from attributes (\fB$\fP-variables) to AST nodes can be
+specified.  Alternatively, each tree node can be defined explicitly
+via an AST node constructor.
+.SH INSTALLATION
+.PP
+PCCTS includes a number of different programs and examples in the
+software release package\(emmost of which like to live in their own
+directories.  The install script will build a standard hierarchy.  The
+PCCTS executables (\fIantlr\fP, \fIdlg\fP) may be placed anywhere the
+user wishes but the install script places them in the bin directory
+created during installation.
+.PP
+To begin installation, place the pccts.tar file into the directory
+where you want to place a pccts subdirectory.  Untar the file with
+
+     tar xvf pccts.tar
+
+and cd into it.  To install PCCTS, simply type
+     make
+
+which will build the standard PCCTS directory hierarchy (under the
+directory where you ran the install script) and build executable
+versions of antlr and dlg.
+.PP
+The examples associated with PCCTS have makefile variables called
+\fBANTLR\fP, \fBDLG\fP etc... which must be set according to your
+personal directory structure before \fImake\fP'ing.  Some variables
+point to the PCCTS executables if the \fBPATH\fP environment variable
+does not include your \fBbin\fP directory.  Also, there are variables
+that point to PCCTS include directories and must be changed if you
+deviate from the standard PCCTS installation hierarchy.  \fIantlr\fP
+and \fIdlg\fP can be built without executable versions of themselves
+(\fIantlr\fP and \fIdlg\fP are written in themselves).
+.SH "GETTING STARTED"
+.PP
+A C program called \fBgenmk.c\fP is available in the \fBsupport/genmk\fP
+directory of the PCCTS release.
+.SH "SEE ALSO"
+.LP
+dlg(1), antlr(1)
+
diff --git a/pccts1.txt b/pccts1.txt
new file mode 100755 (executable)
index 0000000..b87ed6f
--- /dev/null
@@ -0,0 +1,132 @@
+
+
+
+PCCTS(1)                PCCTS Manual Pages               PCCTS(1)
+
+
+N\bNA\bAM\bME\bE
+       PCCTS - The Purdue Compiler Construction Tool Set
+
+D\bDE\bES\bSC\bCR\bRI\bIP\bPT\bTI\bIO\bON\bN
+       PCCTS is a set of public domain software tools designed to
+       facilitate  the  implementation  of  compilers  and  other
+       translation systems.  These tools currently include _\ba_\bn_\bt_\bl_\br,
+       _\bd_\bl_\bg and support code.  In many ways, PCCTS is similar to a
+       highly integrated version of YACC [Joh78] and LEX [Les75];
+       where _\ba_\bn_\bt_\bl_\br (ANother Tool for Language Recognition) corre-
+       sponds to YACC and _\bd_\bl_\bg (DFA-based Lexical analyzer Genera-
+       tor) functions like LEX.  However, PCCTS  has  many  addi-
+       tional  features  which  make it easier to use for a wider
+       range of translation problems.
+
+       PCCTS grammars contain specifications for lexical and syn-
+       tactic  analysis, intermediate-form construction and error
+       reporting.  Rules may employ  Extended  Backus  Naur  Form
+       (EBNF)  grammar  constructs  and  may  define  parameters,
+       return values and local variables.  Languages described in
+       PCCTS  are recognized via Strong LL(k) parsers constructed
+       in pure, human-readable, C code.  As  a  result,  standard
+       debugging  tools  can  be  used  to  trace and debug PCCTS
+       parsers.  Breakpoints can be set so that parser  execution
+       stops  before  or after grammar fragments of interest have
+       been recognized.
+
+       PCCTS grammars may contain predicates which allow  parsing
+       to  be  a  function of semantics as well as syntax -- con-
+       text-sensitive grammars.  Backtracking can also be  speci-
+       fied  to  recognized non-LL(k) and non-LALR(k) constructs.
+       In addition, PCCTS  supports  intermediate-form  (such  as
+       expression-trees)  construction  via  a flexible Abstract-
+       Syntax Tree (AST) mechanism which allows trees to be built
+       explicitly  or automatically.  The user explicitly creates
+       trees via a LISP-like  tree  constructor  or  directs  the
+       automatic  tree  construction  facility via simple grammar
+       directives.  AST nodes are user-defined and are  generally
+       a  function  of attributes.  A default transformation from
+       attributes ($\b$-variables) to AST nodes  can  be  specified.
+       Alternatively,  each  tree  node can be defined explicitly
+       via an AST node constructor.
+
+I\bIN\bNS\bST\bTA\bAL\bLL\bLA\bAT\bTI\bIO\bON\bN
+       PCCTS includes a number of different programs and examples
+       in  the  software  release  package--most of which like to
+       live in their own directories.  The  install  script  will
+       build a standard hierarchy.  The PCCTS executables (_\ba_\bn_\bt_\bl_\br,
+       _\bd_\bl_\bg) may be  placed  anywhere  the  user  wishes  but  the
+       install  script  places  them in the bin directory created
+       during installation.
+
+       To begin installation, place the pccts.tar file  into  the
+       directory  where  you  want to place a pccts subdirectory.
+
+
+
+PCCTS                       April 1994                          1
+
+
+
+
+
+PCCTS(1)                PCCTS Manual Pages               PCCTS(1)
+
+
+       Untar the file with
+
+            tar xvf pccts.tar
+
+       and cd into it.  To install PCCTS, simply type
+
+            make
+
+       which will build the standard  PCCTS  directory  hierarchy
+       (under the directory where you ran the install script) and
+       build executable versions of antlr and dlg.
+
+       The examples associated with PCCTS have makefile variables
+       called  A\bAN\bNT\bTL\bLR\bR,  D\bDL\bLG\bG  etc... which must be set according to
+       your personal directory structure before  _\bm_\ba_\bk_\be'ing.   Some
+       variables point to the PCCTS executables if the P\bPA\bAT\bTH\bH envi-
+       ronment variable does  not  include  your  b\bbi\bin\bn  directory.
+       Also,  there  are  variables  that  point to PCCTS include
+       directories and must be changed if you  deviate  from  the
+       standard  PCCTS installation hierarchy.  _\ba_\bn_\bt_\bl_\br and _\bd_\bl_\bg can
+       be built without executable versions of themselves  (_\ba_\bn_\bt_\bl_\br
+       and _\bd_\bl_\bg are written in themselves).
+
+G\bGE\bET\bTT\bTI\bIN\bNG\bG S\bST\bTA\bAR\bRT\bTE\bED\bD
+       A  C  program  called  g\bge\ben\bnm\bmk\bk.\b.c\bc  is  available  in the s\bsu\bup\bp-\b-
+       p\bpo\bor\brt\bt/\b/g\bge\ben\bnm\bmk\bk directory of the PCCTS release.
+
+S\bSE\bEE\bE A\bAL\bLS\bSO\bO
+       dlg(1), antlr(1)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+PCCTS                       April 1994                          2
+
+