KDevelop API Documentation

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.1.2.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Wed Mar 23 00:03:50 2005 by doxygen 1.3.9.1 written by Dimitri van Heesch, © 1997-2003