PBlackBox.h
上传用户:itx_2006
上传日期:2007-01-06
资源大小:493k
文件大小:2k
源码类别:

编译器/解释器

开发平台:

Others

  1. #ifndef PBLACKBOX_H
  2. #define PBLACKBOX_H
  3. /*
  4.  * SOFTWARE RIGHTS
  5.  *
  6.  * We reserve no LEGAL rights to the Purdue Compiler Construction Tool
  7.  * Set (PCCTS) -- PCCTS is in the public domain.  An individual or
  8.  * company may do whatever they wish with source code distributed with
  9.  * PCCTS or the code generated by PCCTS, including the incorporation of
  10.  * PCCTS, or its output, into commerical software.
  11.  *
  12.  * We encourage users to develop software with PCCTS.  However, we do ask
  13.  * that credit is given to us for developing PCCTS.  By "credit",
  14.  * we mean that if you incorporate our source code into one of your
  15.  * programs (commercial product, research project, or otherwise) that you
  16.  * acknowledge this fact somewhere in the documentation, research report,
  17.  * etc...  If you like PCCTS and have developed a nice tool with the
  18.  * output, please mention that you developed it using PCCTS.  In
  19.  * addition, we ask that this header remain intact in our source code.
  20.  * As long as these guidelines are kept, we expect to continue enhancing
  21.  * this system and expect to make other tools available as they are
  22.  * completed.
  23.  *
  24.  * ANTLR 1.33
  25.  * Terence Parr
  26.  * Parr Research Corporation
  27.  * with Purdue University and AHPCRC, University of Minnesota
  28.  * 1989-1998
  29.  */
  30. #include "pcctscfg.h"
  31. #include PCCTS_IOSTREAM_H
  32. PCCTS_NAMESPACE_STD
  33. //
  34. //  The default buffer size of the lexer is given by the
  35. //   second argument of the lexer's ctor.  It is optional
  36. //   and defaults to 2000
  37. //
  38. template<class Lexer, class Parser, class Token>
  39. class DllExportPCCTS ParserBlackBox {
  40. protected:
  41. DLGFileInput *in;
  42. Lexer *scan;
  43. _ANTLRTokenPtr tok;
  44. ANTLRTokenBuffer *pipe;
  45. Parser *_parser;
  46. FILE *file;
  47. public:
  48. ParserBlackBox(FILE *f)
  49. {
  50. file = f;
  51. in = new DLGFileInput(f);
  52. scan = new Lexer(in);
  53. pipe = new ANTLRTokenBuffer(scan);
  54. tok = new Token;
  55. scan->setToken(tok);
  56. _parser = new Parser(pipe);
  57. _parser->init();
  58. }
  59. ParserBlackBox(char *fname)
  60. {
  61. FILE *f = fopen(fname, "r");
  62. if ( f==NULL ) {cerr << "cannot open " << fname << "n"; return;}
  63. else {
  64. file = f;
  65. in = new DLGFileInput(f);
  66. scan = new Lexer(in);
  67. pipe = new ANTLRTokenBuffer(scan);
  68. tok = new Token;
  69. scan->setToken(tok);
  70. _parser = new Parser(pipe);
  71. _parser->init();
  72. }
  73. }
  74. ~ParserBlackBox()
  75. {
  76. delete in; delete scan; delete pipe; delete _parser; delete tok;
  77. fclose(file);
  78. }
  79. Parser *parser()    { return _parser; }
  80.     Lexer  *getLexer()     { return scan; }
  81. };
  82. #endif