#pragma once #include #include namespace L87 { class State; struct StateDiagram { ::std::unordered_map<::std::string, State*> states; State* initial; virtual ~StateDiagram(); }; } namespace L87 { struct StateDiagram; class State { protected: StateDiagram* diagram; ::std::unordered_map<::std::string, State*>& states; void auto_register(); public: State(StateDiagram* _diagram); virtual bool done(); virtual bool bad(); public: // 具体状态必须实现 virtual const char* name() = 0; virtual State* next(char input) = 0; }; }