最近一直再看 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);
%}