2011-01-21 2 views
3

У меня нет абсолютно никакого фона в компиляторах и начал с «учить себя». Я учусь о Лекса с помощью this учебника и напечатал что-то вроде этого в файл под названием first.lЧто делать с выходом lex?

%% 
    /* match everything except newline */ 
. ECHO; 
    /* match newline */ 
\n ECHO; 

%% 

int yywrap(void) { 
    return 1; 
} 

int main(void) { 
    yylex(); 
    return 0; 
} 

Теперь я понимаю, что закон должен генерировать Tokenizer, что будет просто эхо все, что он получает с помощью выше first.l файла. Я пошел вперед и побежал

lex first.l

Он создал файл с именем lex.yy.c. Затем в учебнике дается еще несколько примеров и переходов на yacc. Может ли кто-нибудь сказать мне, что можно сделать с файлом lex.yy.c, который генерируется lex? Я думал, что теперь у меня есть токенизатор, но как мне теперь скомпилировать этот файл в двоичный файл? Использование gcc?

ответ

4

Да, используя GCC. Вы, вероятно, хотите сделать что-то вроде этого:

gcc -c file1.c 
gcc -c file2.c 
gcc -o result file1.o file2.o 

-c флага GCC рассказывает не связывать, но остановить после генерации объектного файла. После того как вы скомпилировали все файлы, вы можете связать их вместе, передав их всем gcc.

Так что в вашем случае, вы бы просто идти вперед и компиляции файла вывода, генерируемого lex, чтобы получить двоичный файл:

gcc -o output lex.yy.c 
+0

Спасибо. Я знаю, как скомпилировать gcc, но хотел знать, что делать с файлом, созданным lex. Оказывается, мне просто пришлось скомпилировать его с помощью gcc, и он работает так, как ожидалось. Спасибо за ваше время. Я отредактировал ваш ответ, чтобы добавить последний шаг. Надеюсь, ты не возражаешь. – Legend

Смежные вопросы