main.cpp
#include <iostream>
#include "driver.h"
using namespace Marker;
int main(int argc, char const *argv[]) {
/* code */
Driver driver;
driver.parse();
return 0;
}
driver.h
#ifndef DRIVER_HH
#define DRIVER_HH
#include <iostream>
#include "scanner.h"
#include "parser.hpp"
namespace Marker {
class Driver {
friend class Scanner;
friend class Parser;
private:
/* data */
Parser m_parser;
Scanner m_scanner;
public:
Driver ();
int parse();
virtual ~Driver ();
};
} /*Marker */
#endif
driver.cpp
#ifndef DRIVER_CPP
#define DRIVER_CPP
#include "driver.h"
#include <iostream>
using namespace Marker;
using namespace std;
Driver::Driver():m_scanner(*this),m_parser(m_scanner,*this){
}
Driver::~Driver(){
}
int Driver::parse(){
m_scanner.switch_streams(cin,cout);
return m_parser.parse();
}
#endif
scanner.h
/***********************************/
/*对yyFlexLexer进行继承,获得更多的控制
*
***********************************/
#ifndef SCANNER_HH
#define SCANNER_HH
/*重要*/
#if ! defined(yyFlexLexerOnce)
#undef yyFlexLexer
#define yyFlexLexer Marker_FlexLexer //根据prefix修改
#include <FlexLexer.h>
#endif
/*替换默认的get_next_token定义*/
#undef YY_DECL
#define YY_DECL Marker::Parser::symbol_typ