Home | History | Annotate | Download | only in Script
      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