Bison(yacc) 的 yylex 报错

C/C++/Rust129 字

最近一直再看 PHP 的底层源码,同时也对如何开发一门语言来了兴趣,看了《自制编程语言》这本书,在第一个计算机的例子上就栽了跟头。

按照书上的例子写完代码后报错:

y.tab.c:1049:16: error: implicit declaration of function 'yylex' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
      yychar = yylex ();
               ^
y.tab.c:1224:7: error: implicit declaration of function 'yyerror' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
      yyerror (YY_("syntax error"));
      ^
y.tab.c:1335:3: error: implicit declaration of function 'yyerror' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
  yyerror (YY_("memory exhausted"));
  ^

最终 google 了一番发现很多人卡在这里。

https://stackoverflow.com/questions/20106574/simple-yacc-grammars-give-an-error

最终找到了这个提问解决了这个问题,其实主要是找不到定义文件,我们在定义 yacc 文件的时候,需要在头部定义一下。

%{
#include <stdio.h>
#include <stdlib.h>
#define YYDEBUG 1
int yylex(void);
int yyerror(char const *str);
%}
maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见