Created
July 31, 2023 11:38
-
-
Save LucianoPAlmeida/6c66c9aaf04eecad08c8e039f6f9622c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "FSM.h" | |
// A finite state machine that contains either ..abc.. | |
static std::unique_ptr<Machine> makeContainsAbc() { | |
Machine::state_set finalStates = {4}; | |
Machine::state_set q = {1, 2, 3, 4}; | |
auto machine = std::make_unique<Machine>(q, /*startState=*/1, finalStates); | |
machine->addTransition(1, 'a', 2); | |
machine->addTransition(1, 'b', 1); | |
machine->addTransition(1, 'c', 1); | |
machine->addTransition(2, 'a', 2); | |
machine->addTransition(2, 'b', 3); | |
machine->addTransition(2, 'c', 1); | |
machine->addTransition(3, 'a', 2); | |
machine->addTransition(3, 'b', 1); | |
machine->addTransition(3, 'c', 4); | |
machine->addTransition(4, 'a', 4); | |
machine->addTransition(4, 'b', 4); | |
machine->addTransition(4, 'c', 4); | |
return machine; | |
} | |
template <class StateMachine> | |
inline void assertAccepted(const StateMachine &M, std::string_view str) { | |
auto result = M.accept(str); | |
std::cout << std::boolalpha << str << ": " << result << std::endl; | |
assert(result); | |
} | |
template <class StateMachine> | |
inline void assertNotAccepted(const StateMachine &M, std::string_view str) { | |
auto result = M.accept(str); | |
std::cout << std::boolalpha << str << ": " << result << std::endl; | |
assert(!result); | |
} | |
int main(int argc, const char * argv[]) { | |
std::cout << "Contains abc" << std::endl; | |
auto M = makeContainsAbc(); | |
assertNotAccepted(*M, "aabac"); | |
assertAccepted(*M, "aacbabca"); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment