C 如何处理lex的输出?
我完全没有编译器方面的背景,开始了一段“自学”的旅程。我正在使用教程学习lex,并在名为C 如何处理lex的输出?,c,compiler-construction,compilation,lex,C,Compiler Construction,Compilation,Lex,我完全没有编译器方面的背景,开始了一段“自学”的旅程。我正在使用教程学习lex,并在名为first.l的文件中键入类似的内容 %% /* match everything except newline */ . ECHO; /* match newline */ \n ECHO; %% int yywrap(void) { return 1; } int main(void) { yylex(); return 0; } 现在我明白了lex应该
first.l的文件中键入类似的内容
%%
/* match everything except newline */
. ECHO;
/* match newline */
\n ECHO;
%%
int yywrap(void) {
return 1;
}
int main(void) {
yylex();
return 0;
}
现在我明白了lex应该生成一个标记器,它只会使用上面的first.l
文件回显它得到的所有内容。我向前跑去
lex first.l
%%
/* match everything except newline */
. ECHO;
/* match newline */
\n ECHO;
%%
int yywrap(void) {
return 1;
}
int main(void) {
yylex();
return 0;
}
它创建了一个名为lex.yy.c
的文件。然后,本教程将给出更多示例,并跳到yacc
。有人能告诉我如何处理lex生成的lex.yy.c
文件吗?我的想法是我现在有了一个标记器,但是我现在如何将这个文件编译成二进制文件呢?使用gcc?是的,使用gcc。您可能希望执行以下操作:
gcc -c file1.c
gcc -c file2.c
gcc -o result file1.o file2.o
GCC的-c
标志告诉它不要链接,而是在生成对象文件后停止。编译完所有文件后,可以通过将它们全部传递到gcc
将其链接在一起
因此,在您的情况下,您只需继续编译由lex
生成的输出文件即可获得二进制文件:
gcc -o output lex.yy.c
谢谢我知道如何使用gcc进行编译,但想知道如何处理lex生成的文件。事实证明,我只需要用gcc编译它,它就可以正常工作了。谢谢你抽出时间。我已编辑了您的答案以添加最后一步。希望你不介意。