KDevelop API Documentation

lib/antlr/src/CharScanner.cpp

Go to the documentation of this file.
00001 /* ANTLR Translator Generator 00002 * Project led by Terence Parr at http://www.jGuru.com 00003 * Software rights: http://www.antlr.org/RIGHTS.html 00004 * 00005 * $Id: CharScanner.cpp,v 1.2 2003/05/02 00:36:20 okellogg Exp $ 00006 */ 00007 00008 #include <map> 00009 00010 #include <iostream> 00011 00012 #ifdef HAS_NOT_CSTRING_H 00013 #include <string> 00014 #else 00015 #include <cstring> 00016 #endif 00017 00018 #include "antlr/CharScanner.hpp" 00019 #include "antlr/CommonToken.hpp" 00020 00021 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 00022 namespace antlr { 00023 #endif 00024 ANTLR_C_USING(exit) 00025 00026 CharScanner::CharScanner(InputBuffer& cb, bool case_sensitive ) 00027 : saveConsumedInput(true) //, caseSensitiveLiterals(true) 00028 , caseSensitive(case_sensitive) 00029 , literals(CharScannerLiteralsLess(this)) 00030 , inputState(new LexerInputState(cb)) 00031 , commitToPath(false) 00032 , tabsize(8) 00033 , traceDepth(0) 00034 { 00035 setTokenObjectFactory(&CommonToken::factory); 00036 } 00037 00038 CharScanner::CharScanner(InputBuffer* cb, bool case_sensitive ) 00039 : saveConsumedInput(true) //, caseSensitiveLiterals(true) 00040 , caseSensitive(case_sensitive) 00041 , literals(CharScannerLiteralsLess(this)) 00042 , inputState(new LexerInputState(cb)) 00043 , commitToPath(false) 00044 , tabsize(8) 00045 , traceDepth(0) 00046 { 00047 setTokenObjectFactory(&CommonToken::factory); 00048 } 00049 00050 CharScanner::CharScanner( const LexerSharedInputState& state, bool case_sensitive ) 00051 : saveConsumedInput(true) //, caseSensitiveLiterals(true) 00052 , caseSensitive(case_sensitive) 00053 , literals(CharScannerLiteralsLess(this)) 00054 , inputState(state) 00055 , commitToPath(false) 00056 , tabsize(8) 00057 , traceDepth(0) 00058 { 00059 setTokenObjectFactory(&CommonToken::factory); 00060 } 00061 00062 void CharScanner::consume() 00063 { 00064 if (inputState->guessing == 0) 00065 { 00066 int c = LA(1); 00067 if (caseSensitive) 00068 { 00069 append(c); 00070 } 00071 else 00072 { 00073 // use input.LA(), not LA(), to get original case 00074 // CharScanner.LA() would toLower it. 00075 append(inputState->getInput().LA(1)); 00076 } 00077 00078 // RK: in a sense I don't like this automatic handling. 00079 if (c == '\t') 00080 tab(); 00081 else 00082 inputState->column++; 00083 } 00084 inputState->getInput().consume(); 00085 } 00086 00087 //bool CharScanner::getCaseSensitiveLiterals() const 00088 //{ return caseSensitiveLiterals; } 00089 00090 void CharScanner::panic() 00091 { 00092 ANTLR_USE_NAMESPACE(std)cerr << "CharScanner: panic" << ANTLR_USE_NAMESPACE(std)endl; 00093 exit(1); 00094 } 00095 00096 void CharScanner::panic(const ANTLR_USE_NAMESPACE(std)string& s) 00097 { 00098 ANTLR_USE_NAMESPACE(std)cerr << "CharScanner: panic: " << s.c_str() << ANTLR_USE_NAMESPACE(std)endl; 00099 exit(1); 00100 } 00101 00103 void CharScanner::reportError(const RecognitionException& ex) 00104 { 00105 ANTLR_USE_NAMESPACE(std)cerr << ex.toString().c_str() << ANTLR_USE_NAMESPACE(std)endl; 00106 } 00107 00109 void CharScanner::reportError(const ANTLR_USE_NAMESPACE(std)string& s) 00110 { 00111 if (getFilename() == "") 00112 ANTLR_USE_NAMESPACE(std)cerr << "error: " << s.c_str() << ANTLR_USE_NAMESPACE(std)endl; 00113 else 00114 ANTLR_USE_NAMESPACE(std)cerr << getFilename().c_str() << ": error: " << s.c_str() << ANTLR_USE_NAMESPACE(std)endl; 00115 } 00116 00118 void CharScanner::reportWarning(const ANTLR_USE_NAMESPACE(std)string& s) 00119 { 00120 if (getFilename() == "") 00121 ANTLR_USE_NAMESPACE(std)cerr << "warning: " << s.c_str() << ANTLR_USE_NAMESPACE(std)endl; 00122 else 00123 ANTLR_USE_NAMESPACE(std)cerr << getFilename().c_str() << ": warning: " << s.c_str() << ANTLR_USE_NAMESPACE(std)endl; 00124 } 00125 00126 void CharScanner::traceIndent() 00127 { 00128 for( int i = 0; i < traceDepth; i++ ) 00129 ANTLR_USE_NAMESPACE(std)cout << " "; 00130 } 00131 00132 void CharScanner::traceIn(const char* rname) 00133 { 00134 traceDepth++; 00135 traceIndent(); 00136 ANTLR_USE_NAMESPACE(std)cout << "> lexer " << rname 00137 << "; c==" << LA(1) << ANTLR_USE_NAMESPACE(std)endl; 00138 } 00139 00140 void CharScanner::traceOut(const char* rname) 00141 { 00142 traceIndent(); 00143 ANTLR_USE_NAMESPACE(std)cout << "< lexer " << rname 00144 << "; c==" << LA(1) << ANTLR_USE_NAMESPACE(std)endl; 00145 traceDepth--; 00146 } 00147 00148 #ifndef NO_STATIC_CONSTS 00149 const int CharScanner::NO_CHAR; 00150 const int CharScanner::EOF_CHAR; 00151 #endif 00152 00153 #ifdef ANTLR_CXX_SUPPORTS_NAMESPACE 00154 } 00155 #endif 00156
KDE Logo
This file is part of the documentation for KDevelop Version 3.0.4.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Oct 19 08:01:47 2004 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003