1

与えられたMicrosyntaxを使用してトークンを見つけるためのFSMを描画しようとしています

microsyntax
// Uses .Net regular expression syntax.

Identifier <|[a-zA-Z][\w_.]*

IntegerValue <|\d+

// real values must include a decimal point.
RealValue <|\d*\.\d+

// Note that strings do not have any escape characters
// and will be prematurely terminated with a newline.
StringValue <|"[^"\n]*"

FSMの図は次のようになります。 ここに画像の説明を入力してください

私が作成した図が完全に正しいかどうかはわかりません。ダイアグラムを描く際の私の混乱は次のとおりです。1)識別子az、AZ、_のループ遷移。2)整数からrealValueへの遷移:状態3は0から9への遷移をループしますか?3)stringValueへの移行。

誰かが図が正しいかどうかを教えてくれたらとても助かります。正しくない場合、私の間違いは何ですか?

4

1 に答える 1

1

状態 3 が最終的なものではなく、ループしてはならないことを除けば問題ありません。(また、空白と演算子の規則はわかりませんが、図はもっともらしく見えます。)

状態 3 の問題は次のとおりです。

8.

\d+どちらにも一致しません\d*.\d+。前者は のためで.あり、後者は の後に少なくとも 1 つの数字を主張するため.です。したがって、 を読んだ後の状態 3 は8.最終的な状態ではありません。別の数字を取得すると、状態 4 (ループなし) に移行しますが、これは正しく最終的な状態です。

状態 1 を 2 つではなく 1 つのループで記述したでしょうが、違いはないと思います。また、状態 6 (最終ではない) の下のセマンティック ラベルは、状態 7 (最終) の下に移動する必要があります。(ああ、開始状態にラベルを付けても害はありませんが、最終的には明らかでした。)

HTH。

于 2012-12-10T00:52:42.887 に答える