1

flex や bison で C スキャナー コードを生成する方法は知っていますが、残念ながら && -write- configure ファイルを読み取るには C コードが必要ですが、flex や bison ではそのようなコードを生成できません。configure ファイルを使用できる可能性があります。読み取り/書き込みライブラリですが、構成ファイルの形式をカスタマイズしたい場合は柔軟ではないと思うので、ヒントはありますか?

4

1 に答える 1

1

それほど難しい仕事ではないという理由だけで、そのような専用ツールを私は知りません。

入力に対して字句解析と意味解析を行う理由は、複雑なもの(エラーの可能性がある自由形式のテキスト) を単純なもの (エラーのないメモリ内表現) に変換する必要があるためです。

他の方法は、メモリ内構造を単純にステップ実行して文字列表現を出力できるため、通常ははるかに簡単です。簡単な例として、設定ファイルに次の行があるとします。

define xyzzy integer size 5 is 1 3 5 7 9 ;

xyzzy5 つの要素で呼び出される配列を作成します。

入力時に、文字ストリームを次のようなものにトークン化 (字句解析) する必要があります。

keyword:define
name:xyzzy
keyword:integer
keyword:size
constant:5
keyword:is
constant:1
constant:3
constant:5
constant:7
constant:9
keyword:semicolon

次に、セマンティック分析を使用して、構造など、プログラム内で使用できる形式に変換します。

type = array
name = xyzzy
underlyingtype = integer
size = 5
element[1..5] = {1,3,5,7,9}

これを構成ファイルに戻すのは比較的簡単です。次のように、すべてのメモリ内構造をウォークスルーするだけです。

for each in-memory-thing imt:
    if imt.type is array:
        output "define ", imt.name, " ", imt.underlyingtype
        output " size ", imt.size, " is "
        for i = 1 to imt.size inclusive:
            output imt.element[i], " "
        output " ;" with newline
    fi
    // Handle other types of imt here
rof

したがって、構成ファイルに書き込む行為は、そこから書き直すよりもはるかに簡単であることがわかります。

于 2013-05-21T03:08:20.367 に答える