1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
|
#ifndef guard_opencxx_Program_h
#define guard_opencxx_Program_h
//@beginlicenses@
//@license{chiba_tokyo}{}@
//@license{xerox}{}@
//@license{contributors}{}@
//
// Permission to use, copy, distribute and modify this software and its
// documentation for any purpose is hereby granted without fee, provided that
// the above copyright notice appears in all copies and that both that copyright
// notice and this permission notice appear in supporting documentation.
//
// 1997-2001 Shigeru Chiba, Tokyo Institute of Technology. make(s) no representations about the suitability of this
// software for any purpose. It is provided "as is" without express or implied
// warranty.
//
// Copyright (C) 1997-2001 Shigeru Chiba, Tokyo Institute of Technology.
//
// -----------------------------------------------------------------
//
//
// Copyright (c) 1995, 1996 Xerox Corporation.
// All Rights Reserved.
//
// Use and copying of this software and preparation of derivative works
// based upon this software are permitted. Any copy of this software or
// of any derivative work must include the above copyright notice of
// Xerox Corporation, this paragraph and the one after it. Any
// distribution of this software or derivative works must comply with all
// applicable United States export control laws.
//
// This software is made available AS IS, and XEROX CORPORATION DISCLAIMS
// ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
// PURPOSE, AND NOTWITHSTANDING ANY OTHER PROVISION CONTAINED HEREIN, ANY
// LIABILITY FOR DAMAGES RESULTING FROM THE SOFTWARE OR ITS USE IS
// EXPRESSLY DISCLAIMED, WHETHER ARISING IN CONTRACT, TORT (INCLUDING
// NEGLIGENCE) OR STRICT LIABILITY, EVEN IF XEROX CORPORATION IS ADVISED
// OF THE POSSIBILITY OF SUCH DAMAGES.
//
// -----------------------------------------------------------------
//
// Permission to use, copy, distribute and modify this software and its
// documentation for any purpose is hereby granted without fee, provided that
// the above copyright notice appears in all copies and that both that copyright
// notice and this permission notice appear in supporting documentation.
//
// Other Contributors (see file AUTHORS) make(s) no representations about the suitability of this
// software for any purpose. It is provided "as is" without express or implied
// warranty.
//
// Copyright (C) Other Contributors (see file AUTHORS)
//
//@endlicenses@
#include <iosfwd>
#include <opencxx/parser/GC.h>
namespace Opencxx
{
class Ptree;
class Program : public Object {
public:
Program(char *name) {
replacement = 0;
defaultname = name;
}
virtual ~Program() {}
void Rewind() { index = 0; }
void Rewind(unsigned i) { index = i; }
unsigned GetSize() { return size; }
void Unget() { --index; }
char Ref(unsigned position) { return buf[position]; }
void Set(char c, unsigned position) { buf[position] = c; }
/* The location of the last character obtained by Get(). */
unsigned GetCurPos() { return index - 1; }
/* The location of the next character obtained by Get(). */
unsigned GetNextPos() { return index; }
/* The result of Read() must be the same for each call. */
const char* Read(unsigned p) { return &buf[p]; }
virtual char Get();
void Subst(Ptree* newtext, Ptree* oldtext);
void Insert(Ptree* pos, Ptree* before_text, Ptree* after_text);
void Replace(char*, char*, Ptree*);
void MinimumSubst(Ptree* newtext, Ptree* oldtext);
unsigned LineNumber(char*, char*&, int&);
void Write(std::ostream&, const char*);
int ReadLineDirective(unsigned, int, unsigned&, int&);
private:
bool MinimumSubst2(Ptree* newtext, Ptree* oldtext);
protected:
char* buf;
unsigned size, index;
char *defaultname;
private:
class Replacement : public LightObject {
public:
Replacement(Replacement*, unsigned, unsigned, Ptree*);
Replacement* next;
unsigned startpos;
unsigned endpos;
Ptree* text;
};
Replacement* replacement;
};
}
#endif /* ! guard_opencxx_Program_h */
|