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 mcld::ScriptScanner::lex( \ 19 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 28namespace mcld { 29 30/** \class ScriptScanner 31 * 32 */ 33class ScriptScanner : public yyFlexLexer { 34 public: 35 explicit ScriptScanner(std::istream* yyin = NULL, std::ostream* yyout = NULL); 36 37 virtual ~ScriptScanner(); 38 39 virtual ScriptParser::token_type lex(ScriptParser::semantic_type* yylval, 40 ScriptParser::location_type* yylloc, 41 const ScriptFile& pScriptFile); 42 43 void setLexState(ScriptFile::Kind pKind); 44 45 void popLexState(); 46 47 private: 48 void enterComments(ScriptParser::location_type& pLocation); 49 50 private: 51 ScriptFile::Kind m_Kind; 52 std::stack<ScriptFile::Kind> m_StateStack; 53}; 54 55} // namespace mcld 56 57#endif // MCLD_SCRIPT_SCRIPTSCANNER_H_ 58