00001 #ifndef BITCLEXER_HXX 00002 #define BITCLEXER_HXX 00003 00004 /************************************************************************** 00005 * 00006 * Copyright (C) 2006, Johns Hopkins University. 00007 * All rights reserved. 00008 * 00009 * Redistribution and use in source and binary forms, with or 00010 * without modification, are permitted provided that the following 00011 * conditions are met: 00012 * 00013 * - Redistributions of source code must contain the above 00014 * copyright notice, this list of conditions, and the following 00015 * disclaimer. 00016 * 00017 * - Redistributions in binary form must reproduce the above 00018 * copyright notice, this list of conditions, and the following 00019 * disclaimer in the documentation and/or other materials 00020 * provided with the distribution. 00021 * 00022 * - Neither the names of the copyright holders nor the names of any 00023 * of any contributors may be used to endorse or promote products 00024 * derived from this software without specific prior written 00025 * permission. 00026 * 00027 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 00028 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 00029 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 00030 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 00031 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 00032 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 00033 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00034 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00035 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00036 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 00037 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00038 * 00039 **************************************************************************/ 00040 00041 #include <iostream> 00042 00043 #include <libsherpa/Path.hxx> 00044 #include "ParseType.hxx" 00045 00046 /* We need to include this file into the lex file so that the class 00047 * declaration for IdlLexer2 is available. In all other inclusions we 00048 * are going to need FlexLexer.h, but if we include that in the lexer 00049 * we will get a redundantly defined lexer class. 00050 * 00051 * It proves that FlexLexer.h is included into the lex.l output after 00052 * YYSTATE is defined, so use the presence or absence of YYSTATE to 00053 * decide whether to include FlexLexer.h. 00054 */ 00055 #ifndef YYSTATE 00056 00057 #undef yyFlexLexer 00058 #define yyFlexLexer bitcFlexLexer 00059 #include <FlexLexer.h> 00060 00061 #endif /* YYSTATE */ 00062 00063 struct BitcLexer : bitcFlexLexer { 00064 sherpa::LexLoc here; 00065 int num_errors; 00066 bool isRuntimeUoc; 00067 bool ifIdentMode; 00068 std::ostream& errStream; 00069 00070 BitcLexer(std::ostream& _err, std::istream& in, 00071 sherpa::Path *inputPath); 00072 00073 void ReportParseError(); 00074 void ReportParseError(std::string /* msg */); 00075 void ReportParseWarning(std::string /* msg */); 00076 void setDebug(bool); 00077 00078 inline void setIfIdentMode(bool arg) 00079 { 00080 ifIdentMode = arg; 00081 } 00082 00083 int lex(ParseType *yylvalp); 00084 00085 int kwCheck(const char *s); 00086 00087 ~BitcLexer() {} 00088 }; 00089 00090 #endif /* BITCLEXER_HXX */ 00091
1.4.7