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 #ifdef ANDROID 14 #include "mcld/Script/FlexLexer.h" 15 #else 16 #include <FlexLexer.h> 17 #endif 18 #endif 19 20 #ifndef YY_DECL 21 #define YY_DECL \ 22 mcld::ScriptParser::token_type mcld::ScriptScanner::lex( \ 23 mcld::ScriptParser::semantic_type* yylval, \ 24 mcld::ScriptParser::location_type* yylloc, \ 25 const mcld::ScriptFile& pScriptFile) 26 #endif 27 28 #include "mcld/Script/ScriptFile.h" 29 #include "ScriptParser.h" 30 #include <stack> 31 32 namespace mcld { 33 34 /** \class ScriptScanner 35 * 36 */ 37 class ScriptScanner : public yyFlexLexer { 38 public: 39 explicit ScriptScanner(std::istream* yyin = NULL, std::ostream* yyout = NULL); 40 41 virtual ~ScriptScanner(); 42 43 virtual ScriptParser::token_type lex(ScriptParser::semantic_type* yylval, 44 ScriptParser::location_type* yylloc, 45 const ScriptFile& pScriptFile); 46 47 void setLexState(ScriptFile::Kind pKind); 48 49 void popLexState(); 50 51 private: 52 void enterComments(ScriptParser::location_type& pLocation); 53 54 private: 55 ScriptFile::Kind m_Kind; 56 std::stack<ScriptFile::Kind> m_StateStack; 57 }; 58 59 } // namespace mcld 60 61 #endif // MCLD_SCRIPT_SCRIPTSCANNER_H_ 62