0

コメントをスキップする次のコードでは、どういう意味BEGIN(INITIAL)ですか?

    %x C_COMMENT

    "/ *" {BEGIN(C_COMMENT); }
    "* /" {BEGIN(INITIAL); }
    。{}

4

1 に答える 1

4

INITIALは、すべてのlexプログラムで暗黙的に宣言されている状態です。(C_COMMENTも状態ですが、lexに組み込まれていないため、明示的に宣言されます。)

BEGIN(statename)は、状態の状態名を入力することを意味します。したがって、このlexスニペットが行うことは次のとおりです。「/ *」が読み取られると、状態C_COMMENTになり、「* /」が表示されると、デフォルトの状態に戻ります。

これで、C_COMMENT状態のときにすべての入力(もちろん「* /」を除く)を無視するルールを追加し、そうでないとき(またはINITIAL状態のとき)に入力で他のことを行うことができます。

于 2012-06-18T19:46:15.120 に答える