0

UN EDIFACT コード リストを含む構造化テキスト ファイルを解析するパーサーを作成中です。これを行うために、パーサーの作成に使用する汎用ステート マシンを C# で作成しました。

私が抱えている問題の 1 つは、70 個のダッシュのシーケンスを正しく一致させるにはどうすればよいかということです。ダッシュが検出されるたびに何らかのカウンターをインクリメントしてから、必要なアクションを処理する必要がありますか? これを行う方法を説明している場所を見つけることができませんでした。

これは、解析しようとしているテキスト ファイルのスナップショットです。

PART 5    UNITED NATIONS DIRECTORIES FOR ELECTRONIC DATA INTERCHANGE
          FOR ADMINISTRATION, COMMERCE AND TRANSPORT

CHAPTER 6 Code list

1.   Code list UNCL

     Change indicators

     a plus sign (+)    for an addition
     an asterisk (*)    for an addition/subtraction/change to an entry
                        for a particular data element
     a hash sign (#)    for changes to names
     a vertical bar (|) for changes to text for descriptions,
                        notes and functions
     a letter X (X)     for marked for deletion

     Usage indicators

     [B] = used in batch messages only
     [I] = used in interactive messages only
     [C] = common usage in both batch and interactive messages

----------------------------------------------------------------------

*    1001  Document name code                                      [C]

     Desc: Code specifying the document name.

     Repr: an..3

     1     Certificate of analysis
              Certificate providing the values of an analysis.

     2     Certificate of conformity
              Certificate certifying the conformity to predefined
              definitions.
4

2 に答える 2

0

NFA はカウントできません。繰り返し文字を表すには、文字ごとに 1 つの状態を導入する必要があります。

╭───╮    -    ╭───╮    -    ╭───╮          ╭────╮
│ 0 │ ──────> │ 1 │ ──────> │ 2 │ ── ⋯ ──> │ 70 │
╰───╯         ╰───╯         ╰───╯          ╰────╯

…もちろん、代わりにある種のカウンタ変数によってエンジンを増強することもできます。しかし、それはもはや DFA (または NFA) の直接的な表現ではありません。

于 2012-11-18T17:50:14.920 に答える