0

yaccのコマンドライン引数から解析する方法は?

もちろん、私はlexとyaccの両方で入力を未定義にしてから、

int input(void)
{
printf("in input\n:");
char c;
if(target >  limit)
return 0;
if((c = target[0][offset++]) != '\0')
return (c);
target++;
offset =0;
return (' ');
}

ここで、targetにはコマンドライン引数が含まれています。しかし、標準入力だけが、disinput関数を実行させる方法を実行しています。

4

1 に答える 1

1

generate パーサーにコマンドライン引数を受け入れさせたいということでしたか? 次に、これらの引数をメイン関数に追加する必要があります。レクサー入力は と呼ばれ、レクサーでFILE* yyinに初期化さstdinれます。デフォルトの動作を変更するには、

#include <stdio.h>
extern FILE* yyin;
int main(int argv, char** argv)
{
     if(argc==2)
     {
         yyin = fopen(argv[1], "r");
         if(!yyin)
         {
             fprintf(stderr, "can't read file %s\n", argv[1]);
             return 1;
         }
     }
     yyparse();
}

flex が提供する関数の代わりに独自の関数を実行したい場合は、YY_INPUTマクロを定義する必要があります。

于 2010-05-10T08:12:44.753 に答える