• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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