2011-12-05 4 views
1

「Dragon Book」で説明しているDFA直接変換アルゴリズムに正規表現に基づいて字句解析ジェネレータ(lexのクローン)を書くことを学びます。lexを実装するときに複数の正規表現をDFAに変換する

は、今私が正常にDFAに正規表現に変換することができますが、私は、たとえば、複数のルールがある場合に捕まってしまった:

abc { printf("abc"); } 
a* { printf("a*); } 

は、私は2つのDFAグラフにabca*を変換することができますが、どのようcombileしますこれらの2つのDFAグラフは1つに過ぎませんか?

答えて

2

私は実際に数年前にこの練習をしました - 私は本をガイドとして使ってC++で統合されたレクサーとLALRパーサを構築しました。この本は、正規表現をNFAsに直接変換する方法を教えてくれています。そして、NFAsをDFAsに変換するには、algoを使用して、私は現在の名前を覚えていません。複数のルールをサポートするには、それぞれに対してNFAを作成するだけです。次に、新しい開始状態を作成し、開始状態から各ルールに対して作成した各NFAsの開始状態をイプシロン遷移にします。少なくとも、私のコードを見直さずに覚えることができるものです。

関連する問題