7 * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
8 * Set (PCCTS) -- PCCTS is in the public domain. An individual or
9 * company may do whatever they wish with source code distributed with
10 * PCCTS or the code generated by PCCTS, including the incorporation of
11 * PCCTS, or its output, into commerical software.
13 * We encourage users to develop software with PCCTS. However, we do ask
14 * that credit is given to us for developing PCCTS. By "credit",
15 * we mean that if you incorporate our source code into one of your
16 * programs (commercial product, research project, or otherwise) that you
17 * acknowledge this fact somewhere in the documentation, research report,
18 * etc... If you like PCCTS and have developed a nice tool with the
19 * output, please mention that you developed it using PCCTS. In
20 * addition, we ask that this header remain intact in our source code.
21 * As long as these guidelines are kept, we expect to continue enhancing
22 * this system and expect to make other tools available as they are
27 * Parr Research Corporation
28 * with Purdue University and AHPCRC, University of Minnesota
32 /* Completely rewritten by Chris Uzdavinis (chris@atdesk.com) for MR23 */
36 #include "pccts_iostream.h"
40 // MR20 Added #include for "DLexerBase.h"
42 #include "DLexerBase.h"
45 // The default buffer size of the lexer is given by the
46 // second argument of the lexer's ctor. It is optional
47 // and defaults to 2000
50 template<class Lexer
, class Parser
, class Token
>
51 class DllExportPCCTS ParserBlackBox
{
53 // no copy construction allowed
54 ParserBlackBox(ParserBlackBox
const &);
56 // no copy assignment allowed
57 ParserBlackBox
& operator=(ParserBlackBox
const &);
63 ANTLRTokenBuffer
*pipe
;
66 int openByBlackBox
; /* MR21 Don't close what we haven't opened */
69 ParserBlackBox(FILE *f
)
80 cerr
<< "invalid file pointer\n";
84 openByBlackBox
= 0; /* MR21a */
86 in
= new DLGFileInput(f
);
88 pipe
= new ANTLRTokenBuffer(scan
);
91 _parser
= new Parser(pipe
);
95 ParserBlackBox(char *fname
)
104 FILE *f
= fopen(fname
, "r");
107 cerr
<< "cannot open " << fname
<< "\n"; return;
112 in
= new DLGFileInput(f
);
113 scan
= new Lexer(in
);
114 pipe
= new ANTLRTokenBuffer(scan
);
117 _parser
= new Parser(pipe
);
124 delete in
; delete scan
; delete pipe
; delete _parser
; delete tok
;
125 if (1 == openByBlackBox
) {
130 Parser
*parser() { return _parser
; }
131 Lexer
*getLexer() { return scan
; }