コメントをスキップする次のコードでは、どういう意味BEGIN(INITIAL)
ですか?
%x C_COMMENT "/ *" {BEGIN(C_COMMENT); } "* /" {BEGIN(INITIAL); } 。{}
コメントをスキップする次のコードでは、どういう意味BEGIN(INITIAL)
ですか?
%x C_COMMENT "/ *" {BEGIN(C_COMMENT); } "* /" {BEGIN(INITIAL); } 。{}
INITIALは、すべてのlexプログラムで暗黙的に宣言されている状態です。(C_COMMENTも状態ですが、lexに組み込まれていないため、明示的に宣言されます。)
BEGIN(statename)は、状態の状態名を入力することを意味します。したがって、このlexスニペットが行うことは次のとおりです。「/ *」が読み取られると、状態C_COMMENTになり、「* /」が表示されると、デフォルトの状態に戻ります。
これで、C_COMMENT状態のときにすべての入力(もちろん「* /」を除く)を無視するルールを追加し、そうでないとき(またはINITIAL状態のとき)に入力で他のことを行うことができます。