入力と出力のペアに対して,上のようなグラフを作るのが目標です.テーブルの出力のとこは数字が書いてありますが,文字列だと思ってとらえて下さい.map だと出力は1つに限られちゃいますが,ひとつの入力に対して出力が複数あってもいいです.たとえば入力 "feb" に対して,出力は "28" と "29" があります.(2月は28日と29日のときがありますね). ノードの部分が状態で,そこから出ている矢印が状態遷移になります.矢印には a/b というラベルがついていますが,a の部分が入力とのマッチを意味し,b の部分がそのときの出力を意味します. 上の例で示すFSTで,"aug"を処理するには,"aug"を頭から読んで,入力"a"に対応するの(9)から(3)への矢印を選択します.そのとき,出力として"3"を記録しておきます.そのあと,"u"に対して(3)から(2)への矢印を選択し,"1"を先ほど
![Luceneで使われてるFSTを実装してみた(正規表現マッチ:VMアプローチへの招待) - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/645f41e1156fdc72e40be9c714a0603fbeabb79b/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9THVjZW5lJUUzJTgxJUE3JUU0JUJEJUJGJUUzJTgyJThGJUUzJTgyJThDJUUzJTgxJUE2JUUzJTgyJThCRlNUJUUzJTgyJTkyJUU1JUFFJTlGJUU4JUEzJTg1JUUzJTgxJTk3JUUzJTgxJUE2JUUzJTgxJUJGJUUzJTgxJTlGJUVGJUJDJTg4JUU2JUFEJUEzJUU4JUE2JThGJUU4JUExJUE4JUU3JThGJUJFJUUzJTgzJTlFJUUzJTgzJTgzJUUzJTgzJTgxJUVGJUJDJTlBVk0lRTMlODIlQTIlRTMlODMlOTclRTMlODMlQUQlRTMlODMlQkMlRTMlODMlODElRTMlODElQjglRTMlODElQUUlRTYlOEIlOUIlRTUlQkUlODUlRUYlQkMlODkmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTA3MjhkYWEzZjFiZWMwM2MxMGExMjE0NjRhMWE0MWM2%26mark-x%3D120%26mark-y%3D96%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBpa2F3YWhhJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1hY2I5NjI2ZDA3MWYyMmJhOWQ4NTc1ZWY1ZTg1NzA2Ng%26blend-x%3D120%26blend-y%3D500%26blend-mode%3Dnormal%26s%3Dd1736adf9bdc6355d56335beac2609fd)