現在、レクサーとパーサーがどのように機能するかを学んでおり、ステート マシンについて次の質問があります。たとえば、次のルールに従ってテキストを色付けする必要があります。このルールでは、単純な状態遷移表は次のようになります。
current event next action
IDLE $ COLOR -
COLOR any - OnColor()
COLOR \n IDLE -
これにより、「$」と行末の間にあるすべての文字に対して OnColor() アクションが呼び出されるため、色付けできます。もちろん、正規表現から同じものを自動的に生成することもできますが、魔法を大量に使用する前に、それがどのように機能するかを知りたいです:)。次に問題が発生します:ルールがある場合:(ドルで終わるテキスト行に色を付けたい場合、状態遷移表はあまり明確ではありません:
current event next action
IDLE any - -
IDLE $ DOUND_DOLLAR -
FOUND_DOLLAR \n IDLE OnDollar()
FOUND_DOLLAR any IDLE -
行末に「$」記号が見つかった場合に OnDollar() を呼び出すようにステート マシンに教えることができますが、ドル記号が出現する前のテキストを色付けするにはどうすればよいでしょうか? そのような問題を解決するための一般的なパターンは何ですか? もちろん、正規表現で 1 行になりますが、そのようなパーサーがステート マシンを介してどのように実装できるか、またそれが可能であるかを知りたいと思っています。