rendered paste body#ifndef PARSER_H#define PARSER_H#include <vector>#include <fstream>#include "elements.h"#include "dispatcher.h"namespace Iscas {class Parser { enum parser_token { TK_ERR, TK_SPACE, TK_ENDLINE, TK_LBRACE, TK_RBRACE, TK_COMMA, TK_EQUAL, TK_ELEM, TK_NAME }; static const char* token_names[]; enum parser_state { ST_NULL, //initial state ST_INPUT, ST_INPUT_LBRACE, ST_INPUT_EDGE_NAME, ST_INPUT_RBRACE, ST_INPUT_COMPLETE, ST_OUTPUT, ST_OUTPUT_LBRACE, ST_OUTPUT_EDGE_NAME, ST_OUTPUT_RBRACE, ST_OUTPUT_COMPLETE, ST_LNAME, //edge name on the left, expect space ST_LNAME_SPACE, //edge name and space on the left, expect equal ST_LNAME_SPACE_EQUAL, //edge name space equal on the left, expect space ST_LNAME_COMPLETE, //complete left part of the assignment ST_ELEMENT_NAME, ST_ELEMENT_NAME_LBRACE, ST_ELEMENT_NAME_RBRACE, ST_ELEMENT_NAME_EDGE_NAME, ST_ELEMENT_NAME_EDGE_NAME_COMMA, ST_ELEMENT_NAME_EDGE_NAME_COMMA_SPACE }; enum { chunk_size = 1024 }; std::ifstream m_infile; std::string m_fileName; int m_size; char m_buf[chunk_size]; logical_elements m_curElement; std::string m_inputOutputName; std::vector<std::string> m_edgeNames; int m_edgeNumber; char *m_start, *m_end; Dispatcher *m_dispatcher; parser_token get_token();public: Parser() : m_start(0), m_end(0) {} Parser( const std::string &file, Dispatcher *dispatcher ); int parse();};} //namespace Iscas#endif