12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #include "automata.h"
- namespace L87 {
- Automata::Error::Error() {
- name = "unknown"; // TBD 反制魔法字符串
- details = "undefined error"; // TBD 反制魔法字符串
- }
- Automata::Error::Error(std::string& _name) {
- InnerMapIterator it = Inner_Error_Table.find(_name);
- if (it != Inner_Error_Table.end()) {
- name = it->first.c_str();
- details = it->second.c_str();
- }
- else {
- name = "unknown";
- details = "undefined error";
- }
- }
- Automata::Error::InnerMap Automata::Error::Inner_Error_Table;
- }
- namespace L87 {
- Automata::Result::Result(State* _state) : state(_state) {}
- }
- namespace L87 {
- Automata::Automata(StateDiagram& _diagram) : diagram(_diagram) {}
- Automata::Result Automata::Run(std::string _input) {
- State* current = diagram.initial;
- Result result(current);
- result.value = current->name();
- for (auto& item : _input) {
- result.state = current = current->next(item);
- result.value += " -> ";
- result.value += current->name();
- if (current->bad()) {
- // TBD
- break;
- }
- if (current->done()) {
- // TBD
- break;
- }
- }
- return result; // 拷贝构造
- }
- }
|