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 #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 
     28 namespace mcld {
     29 
     30 /** \class ScriptScanner
     31  *
     32  */
     33 class 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