automata.h 719 B

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. #pragma once
  2. #include <string>
  3. #include <unordered_map>
  4. #include "state.h"
  5. #include "tape.h"
  6. namespace L87 {
  7. class Automata {
  8. public:
  9. // TBD 添加错误信息使用
  10. struct Error {
  11. using InnerMap = std::unordered_map<std::string, std::string>;
  12. using InnerMapIterator = InnerMap::iterator;
  13. private:
  14. static InnerMap Inner_Error_Table;
  15. public:
  16. const char* name;
  17. const char* details;
  18. Error();
  19. Error(std::string& _name);
  20. };
  21. public:
  22. struct Error;
  23. struct Result {
  24. public:
  25. State* state;
  26. Error error;
  27. std::string value;
  28. Result(State* _state);
  29. };
  30. protected:
  31. StateDiagram& diagram;
  32. public:
  33. Automata(StateDiagram& _diagram);
  34. Result Run(std::string _input);
  35. };
  36. }