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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
|
#ifndef guard_opencxx_Lex_h
#define guard_opencxx_Lex_h
#include <opencxx/parser/GC.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@
namespace Opencxx
{
class Program;
class Token;
class Ptree;
class HashTable;
class Lex : public Object {
public:
Lex(Program*, bool wchars = false, bool recognizeOpencxxExtensions = true);
int GetToken(Token&);
int LookAhead(int);
int LookAhead(int, Token&);
char* Save();
void Restore(char*);
void GetOnlyClosingBracket(Token&);
Ptree* GetComments();
Ptree* GetComments2();
unsigned LineNumber(char*, char*&, int&);
static bool RecordKeyword(char*, int);
static bool Reify(Ptree*, unsigned int&);
static bool Reify(Ptree* t, char*&);
private:
class TokenFifo {
public:
TokenFifo(Lex*);
~TokenFifo();
void Clear();
void Push(int, char*, int);
int Pop(char*&, int&);
int Peek(int);
int Peek(int, char*&, int&);
private:
int Peek2(int);
Lex* lex;
int head;
int tail;
int size;
struct Slot {
int token;
char* pos;
int len;
}* ring;
};
friend class TokenFifo;
unsigned Tokenp() { return tokenp; }
int TokenLen() { return token_len; }
char* TokenPosition();
char Ref(unsigned i);
void Rewind(char*);
int ReadToken(char*&, int&);
void SkipAttributeToken();
int SkipExtensionToken(char*&, int&);
#if defined(_MSC_VER) || defined(_PARSE_VCC)
void SkipAsmToken();
void SkipDeclspecToken();
#endif
char GetNextNonWhiteChar();
int ReadLine();
bool ReadCharConst(unsigned top);
bool ReadStrConst(unsigned top);
int ReadNumber(char c, unsigned top);
int ReadFloat(unsigned top);
bool ReadLineDirective();
int ReadIdentifier(unsigned top);
int Screening(char *identifier, int len);
int ReadSeparator(char c, unsigned top);
int SingleCharOp(unsigned char c);
int ReadComment(char c, unsigned top);
private:
Program* file;
TokenFifo fifo;
unsigned tokenp;
int token_len;
int last_token;
static HashTable* user_keywords;
static Ptree* comments;
bool wcharSupport;
};
}
#endif /* ! guard_opencxx_Lex_h */
|