CharScanner.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
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)
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)
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)
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
00074
00075 append(inputState->getInput().LA(1));
00076 }
00077
00078
00079 if (c == '\t')
00080 tab();
00081 else
00082 inputState->column++;
00083 }
00084 inputState->getInput().consume();
00085 }
00086
00087
00088
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
This file is part of the documentation for KDevelop Version 3.1.2.