プログラミングユーティリティ

ユーザールーチン

ユーザーは、他のプログラミング言語でルーチンを使用する場合と同じようにして lex ルーチンを使用できます。複数の規則で使用されるアクションのコードは、1 度だけ作成して、必要なときに呼び出すことができます。定義の場合と同様に、このルーチンによってプログラムの記述が簡素化され、コードも読みやすくなります。

lexyacc の併用」で説明している put_in_tab1() 関数は、lex 仕様のユーザールーチンのセクションで使用するのに適した関数です。

このセクションにルーチンを配置するもう 1 つの理由は、コードを使用する規則が 1 つしかない場合であっても、重要なコードを強調したり規則セクションを簡素化するためです。例として、/**/ に挟まれた部分がコメントになっている C のような言語のコメントを無視する以下のルーチンについて説明します。

%{ 
static skipcmnts(); 
%} 
%% 
"/*"       skipcmnts(); 
 ...
 ...    /* 残りの規則 */
%% 
static 
skipcmnts() 
{ 
       for(;;) 
       { 
            while (input() != '*') 
                  ; 
         
            if (input() != '/') 
                unput(yytext[yyleng-1]) 
            else return; 
       } 
}

この例には、重要なポイントが 3 つあります。