web-dev-qa-db-ja.com

Lex-コマンドラインでLexプログラムを実行/コンパイルする方法

LexとYaccは初めてです。 Lexプログラムを持っています。例:wordcount.l

WindowsとPuTTYを使用しています。

このファイルを実行しようとしています。

  1. wordcount.lファイルはCドライブに移動しますか?

  2. Lexプログラムをコンパイルすると、.cプログラムを実行してから、何を実行しますか?

コマンドラインで試してみました:Lex wordcount.l

しかし、ファイルが見つからないだけです...

wordcount.l

%{  
#include <stdlib.h>
#include <stdio.h>

int charCount=0;
int wordCount=0;
int lineCount=0;
%}
%%
\n      {charCount++; lineCount++;}   
[^ \t\n]+   {wordCount++; charCount+=yyleng;}
.       {charCount++;}

%%
main(argc, argv)
int argc;
char** argv;
{           
if (argc > 1)
{
    FILE *file;
    file = fopen(argv[1], "r");
    if (!file)
    {
        fprintf(stderr, "Could not open %s\n", argv[1]);
        exit(1);
    }
    yyin = file;
}

yylex();
printf("%d   %d   %d\n", charCount, wordCount, lineCount);
}

PuTTYでこのプログラムをコンパイルして実行するにはどうすればよいですか?

6
user249375

まず、cdを使用して、ファイルwordcount.lが存在するディレクトリに移動する必要があります。次に、Lex wordcount.lを使用すると、ファイルがLex.yy.cになります。プログラムを実行するには、gccなどのcコンパイラでコンパイルする必要があります。 gccでは、gcc -lfl Lex.yy.cを使用してコンパイルできます。これによりa.outが作成され、./a.outを使用して実行できます

16
Lex file.l
gcc Lex.yy.c -ly -ll
./a.out

これらも機能します。私はこれをUbuntu 14.04で使用しています。

3
alhelal