2017-05-10 4 views
0

私は現在、言語の英語の記述を取り、その記述を使用してそれらの仕様のDFAを作成するプログラムに取り組んでいます。私は特定の操作を許可します、例{w | wは最初にサブストリング01を有する}および偶数奇数サブストリング、kサブストリングよりも正確またはより正確に等の他のオプションを有する。ユーザーはアルファベットも選択する。実行時にDFAを作成する。いくつの州?

私の質問は、どのくらいの状態が必要なのか、どのように分かっていますか?ユーザーがアルファベットとルールを私に与えるので、実行時まで何も知らない。以前はDFA /遷移テーブルを作成していましたが、その場合はDFAの内容を知っていて、クラス内で宣言したり静的にすることができました。私は5つの瞳孔(Q、Σ、δ、q0、F)を使うべきですか?または別のアプローチを取っていますか?問題の周りに私の頭を包んで助けていただければ幸いです。

答えて

0

私の質問は、どのくらいの状態が必要なのでしょうか。

あなたはしません。

1は上記DFAで受理状態である場合は、BTW

using state = int; 
using symbol = char; 
using tranFn = std::unordered_map<std::pair<state, symbol>, state>; 

// sets up transition function, the values can be read at runtime 
tranFn fn; 
fn[{0, 'a'}] = 1; 
fn[{0, 'b'}] = 2; 
fn[{1, 'a'}] = 1; 
fn[{1, 'b'}] = 0; 
fn[{2, 'a'}] = 2; 
fn[{2, 'b'}] = 2; 

// run the dfa 
state s = 0; 
symbol sym; 
while(std::cin >> sym) 
    s = fn[{s, sym}]; 
std::cout << s; 

をQに(Q、σ)∈(Q、Σ)のペアのstd::unordered_mapとして遷移関数を表す∈Q

でき正確にa(a + ba)を受け入れる*

関連する問題