我正在尝试生成一个编译器,以便以后可以将.c文件传递给他。

我已经从http://www.quut.com/c/ANSI-C-grammar-y.html下载了YACC和LEX语法,并将它们命名为clexyacc.l和clexyacc.y。

在终端上生成它时,我做了:

yacc -d clexyacc.y
lex clexyacc.l

一切都很好。
当我转到最后一部分时,我会遇到一些错误。

最后一部分是:cc lex.yy.c y.tab.c -oclexyacc.exe

但是我得到这些错误:

最佳答案

您使用的yacc版本正在生成C代码,该代码对于C99无效。

它产生的代码在调用之前不包含函数yylex或yyerror的声明。这将产生警告。在yyerror的情况下,还会导致隐式声明,该声明与以后的实际定义不匹配。

您可以通过在.y文件顶部包含以下内容来解决此问题:

%{
int yylex();
void yyerror(const char *s);
%}

或者,您可以切换到更现代的yacc编译器。

另请参见:Simple yacc grammars give an error

关于c - 从lex和yacc语法生成编译器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23717039/

10-10 21:10