この質問で述べたように、DFA を使用してすべてのコメント、文字列などを追跡しています。この DFA は 11 の状態で終了しました。
今、Java でキーワードを認識する DFA を作成しようとしています。
考え:
最初は pos=0 です。pos は遷移ごとに 1 ずつインクリメントされます。
iskeyword() は私自身の関数です。
isalnum() は、将来の要件に応じて、任意のユーザー定義関数に置き換えることができます。
(実際の DFA には存在しますが、関連のない多くのトランジションとセルフ ループは提供されません)。
(q0) -- !isalnum(pos)-------> (q1) ---iskeyword(pos,pos+len)---> (pos+=len)(q2)----- ! isalnum(pos)-------->(q3[読み取ったキーワードをBOLDにする])---iskeyword(pos,pos+len)-->(q2).
少なくとも 4 つの州が必要です。上記の方法は、通常の DFA の実装とはかなり異なります。
私の質問は....
- 上記の方法でよろしいでしょうか?それに従うのは正しいですか?(それが機能する場合)
- 上記の方法でこれを実装する必要がある場合、どうすればそれを行うことができますか? 読みやすさを向上させるために別の DFA を構築しますか? または、このDFAをコメント、文字列を認識するDFAと組み合わせることができますか(状態の数を減らすため)