1 //===- ScriptScanner.h ----------------------------------------------------===// 2 // 3 // The MCLinker Project 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 #ifndef MCLD_SCRIPT_SCRIPTSCANNER_H 10 #define MCLD_SCRIPT_SCRIPTSCANNER_H 11 12 #ifndef __FLEX_LEXER_H 13 #include "FlexLexer.h" 14 #endif 15 16 #ifndef YY_DECL 17 #define YY_DECL \ 18 mcld::ScriptParser::token_type \ 19 mcld::ScriptScanner::lex(mcld::ScriptParser::semantic_type* yylval, \ 20 mcld::ScriptParser::location_type* yylloc, \ 21 const mcld::ScriptFile& pScriptFile) 22 #endif 23 24 #include <mcld/Script/ScriptFile.h> 25 #include "ScriptParser.h" 26 #include <stack> 27 28 namespace mcld { 29 30 /** \class ScriptScanner 31 * 32 */ 33 class ScriptScanner : public yyFlexLexer 34 { 35 public: 36 ScriptScanner(std::istream* yyin = NULL, std::ostream* yyout = NULL); 37 38 virtual ~ScriptScanner(); 39 40 virtual ScriptParser::token_type lex(ScriptParser::semantic_type* yylval, 41 ScriptParser::location_type* yylloc, 42 const ScriptFile& pScriptFile); 43 44 void setLexState(ScriptFile::Kind pKind); 45 46 void popLexState(); 47 48 private: 49 void enterComments(ScriptParser::location_type& pLocation); 50 51 private: 52 ScriptFile::Kind m_Kind; 53 std::stack<ScriptFile::Kind> m_StateStack; 54 }; 55 56 } // namespace of mcld 57 58 #endif 59 60