#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; // 拷贝构造 } }