1 #ifndef INC_CharScanner_hpp__
2 #define INC_CharScanner_hpp__
17 #ifdef HAS_NOT_CCTYPE_H
23 #if ( _MSC_VER == 1200 )
37 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
45 #ifdef ANTLR_REALLY_NO_STRCASECMP
48 inline int strcasecmp(
const char *s1,
const char *s2)
52 char c1 = tolower(*s1++),
54 if (c1 < c2)
return -1;
55 if (c1 > c2)
return 1;
56 if (c1 == 0)
return 0;
73 #ifdef NO_TEMPLATE_PARTS
100 virtual int LA(
unsigned int i);
102 virtual void append(
char c)
104 if (saveConsumedInput)
106 size_t l = text.length();
111 text.replace(l,0,&c,1);
117 if( saveConsumedInput )
121 virtual void commit()
123 inputState->getInput().commit();
132 consumeUntil(tokenSet);
135 virtual void consume()
137 if (inputState->guessing == 0)
148 append(inputState->getInput().LA(1));
155 inputState->column++;
157 inputState->getInput().consume();
161 virtual void consumeUntil(
int c)
166 if( la_1 == EOF_CHAR || la_1 == c )
173 virtual void consumeUntil(
const BitSet&
set)
178 if( la_1 == EOF_CHAR ||
set.member(la_1) )
185 virtual unsigned int mark()
187 return inputState->getInput().mark();
190 virtual void rewind(
unsigned int pos)
192 inputState->getInput().rewind(pos);
196 virtual void match(
int c)
219 virtual void match(
const char* s )
224 int la_1 = LA(1), c = (*s++ & 0xFF);
237 size_t len = s.length();
239 for (
size_t i = 0; i < len; i++)
242 int la_1 = LA(1), c = (s[i] & 0xFF);
253 virtual void matchNot(
int c)
265 virtual void matchRange(
int c1,
int c2)
269 if ( la_1 < c1 || la_1 > c2 )
275 virtual bool getCaseSensitive()
const
277 return caseSensitive;
280 virtual void setCaseSensitive(
bool t)
285 virtual bool getCaseSensitiveLiterals()
const=0;
288 virtual int getLine()
const
290 return inputState->line;
294 virtual void setLine(
int l)
296 inputState->line = l;
300 virtual int getColumn()
const
302 return inputState->column;
305 virtual void setColumn(
int c)
307 inputState->column = c;
313 return inputState->filename;
318 inputState->filename = f;
321 virtual bool getCommitToPath()
const
326 virtual void setCommitToPath(
bool commit)
328 commitToPath = commit;
342 virtual void resetText()
345 inputState->tokenStartColumn = inputState->column;
346 inputState->tokenStartLine = inputState->line;
357 virtual void newline()
360 inputState->column = 1;
370 int nc = ( ((c-1)/tabsize) + 1) * tabsize + 1;
374 int setTabsize(
int size )
376 int oldsize = tabsize;
381 int getTabSize()
const
397 return inputState->getInput();
413 virtual void setTokenObjectFactory(factory_type factory)
415 tokenFactory = factory;
421 virtual int testLiteralsTable(
int ttype)
const
423 ANTLR_USE_NAMESPACE(std)map<ANTLR_USE_NAMESPACE(std)string,int,CharScannerLiteralsLess>::const_iterator i = literals.find(text);
424 if (i != literals.end())
436 ANTLR_USE_NAMESPACE(std)map<ANTLR_USE_NAMESPACE(std)string,int,CharScannerLiteralsLess>::const_iterator i = literals.find(txt);
437 if (i != literals.end())
443 virtual int toLower(
int c)
const
448 return (c == EOF_CHAR ? EOF_CHAR : tolower(c));
466 virtual void uponEOF()
471 virtual void traceIndent();
472 virtual void traceIn(
const char* rname);
473 virtual void traceOut(
const char* rname);
475 #ifndef NO_STATIC_CONSTS
476 static const int EOF_CHAR = EOF;
485 bool saveConsumedInput;
486 factory_type tokenFactory;
526 parser->traceIn(text);
530 parser->traceOut(text);
539 #ifndef NO_STATIC_CONSTS
540 static const int NO_CHAR = 0;
550 int c = inputState->getInput().LA(i);
560 if (scanner->getCaseSensitiveLiterals())
565 return (stricmp(x.c_str(),y.c_str())<0);
567 return (strcasecmp(x.c_str(),y.c_str())<0);
572 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE
576 #endif //INC_CharScanner_hpp__