187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===- ScriptScanner.h ----------------------------------------------------===//
287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//                     The MCLinker Project
487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// This file is distributed under the University of Illinois Open Source
687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines// License. See LICENSE.TXT for details.
787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//
887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines//===----------------------------------------------------------------------===//
987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef MCLD_SCRIPT_SCRIPTSCANNER_H
1087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define MCLD_SCRIPT_SCRIPTSCANNER_H
1187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef __FLEX_LEXER_H
1387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include "FlexLexer.h"
1487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#endif
1587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
1687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#ifndef YY_DECL
1787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#define YY_DECL                                                       \
1887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  mcld::ScriptParser::token_type                                      \
1987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  mcld::ScriptScanner::lex(mcld::ScriptParser::semantic_type* yylval, \
2087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                           mcld::ScriptParser::location_type* yylloc, \
2187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                           const mcld::ScriptFile& pScriptFile)
2287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#endif
2387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
2487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <mcld/Script/ScriptFile.h>
2587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include "ScriptParser.h"
2687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#include <stack>
2787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
2887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesnamespace mcld {
2987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
3087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines/** \class ScriptScanner
3187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines *
3287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines */
3387f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesclass ScriptScanner : public yyFlexLexer
3487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines{
3587f34658dec9097d987d254a990ea7f311bfc95fStephen Hinespublic:
3687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  ScriptScanner(std::istream* yyin = NULL, std::ostream* yyout = NULL);
3787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
3887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  virtual ~ScriptScanner();
3987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  virtual ScriptParser::token_type lex(ScriptParser::semantic_type* yylval,
4187f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                                       ScriptParser::location_type* yylloc,
4287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines                                       const ScriptFile& pScriptFile);
4387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  void setLexState(ScriptFile::Kind pKind);
4587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  void popLexState();
4787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
4887f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesprivate:
4987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  void enterComments(ScriptParser::location_type& pLocation);
5087f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5187f34658dec9097d987d254a990ea7f311bfc95fStephen Hinesprivate:
5287f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  ScriptFile::Kind m_Kind;
5387f34658dec9097d987d254a990ea7f311bfc95fStephen Hines  std::stack<ScriptFile::Kind> m_StateStack;
5487f34658dec9097d987d254a990ea7f311bfc95fStephen Hines};
5587f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5687f34658dec9097d987d254a990ea7f311bfc95fStephen Hines} // namespace of mcld
5787f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
5887f34658dec9097d987d254a990ea7f311bfc95fStephen Hines#endif
5987f34658dec9097d987d254a990ea7f311bfc95fStephen Hines
60