Lex - Как запустить / скомпилировать программу lex в командной строке

Я очень плохо знаком с Lex и Yacc. У меня есть программа Лекс. Пример: wordcount.l

Я использую окна и замазку.

Я просто пытаюсь запустить этот файл..

  1. Файл wordcount.l находится на диске C?

  2. Я скомпилирую программу Lex, и она сгенерирует программу .c, а потом что мне запустить?

Я попробовал в командной строке: Lex wordcount.l

но я просто получаю, что файл не найден...

количество слов.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);
}

В замазке, как мне скомпилировать и запустить эту программу?


c lex
person Community    schedule 14.01.2012    source источник
comment
Лекс или флекс? Поведение разное.   -  person Jonathan Leffler    schedule 14.01.2012


Ответы (2)


Сначала вам нужно перейти в каталог, в котором находится файл wordcount.l, используя cd. Затем использование lex wordcount.l сделает файл lex.yy.c. Чтобы запустить программу, вам нужно скомпилировать ее с помощью компилятора C, такого как gcc. С gcc вы можете скомпилировать его, используя gcc -lfl lex.yy.c. Это создаст a.out, который можно запустить с помощью ./a.out

person Bilal Syed Hussain    schedule 14.01.2012
comment
Я попробовал cd c:\, затем нажал Enter, затем набрал lex wordcount.l, и все равно получаю сообщение об ошибке: нет такого файла или каталога. - person ; 14.01.2012
comment
@icelated Используете ли вы шпатлевку для подключения к удаленному хосту (серверу)? Если это так, вам нужно сначала скопировать файл на этот хост. - person Bilal Syed Hussain; 14.01.2012
comment
Я использую шпаклевку. Что значит скопировать файл на хост? ты имеешь в виду скопировать файл на сервер в школе? Могу ли я использовать SSH вместо этого? - person ; 14.01.2012
comment
Я считаю, что чистый Lex использует -ll, а Flex использует -lfl. Кроме того, для надежности вы должны указать библиотеку после объекта или исходных файлов, поэтому: gcc lex.yy.c -ll должно быть правильным. Конечно, подсказка Windows вызывает вопрос «Какая версия Lex используется?», поскольку исходный Lex не был туда перенесен. В конце концов, это может быть Flex, или, может быть, MKS Lex (& Yacc), или ... что-то еще. - person Jonathan Leffler; 14.01.2012
comment
У меня такая же проблема, когда я пишу lex wordcount.l, я получаю 'lex' не распознается как внутренняя или внешняя команда. Нужно ли мне сначала что-то установить, и если я сделаю, что это? - person Aya Abdelsalam; 12.04.2013

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

Эти тоже работают. Я использую это в Ubuntu 14.04.

person alhelal    schedule 21.01.2018