lex、yaccファイルのコンパイラができません。このような警告がでます。足りないライブラリはなんでしょうか。
lexとyaccを復習しているのですがこのサイトhttp://cis.k.hosei.ac.jp/~nakata/lectureCompiler/YaccLex/6.2.htmlの説明にあるサンプルを実行しようとしているのですがうまくいきません。
以下の作業で何が問題だと考えられるでしょうか。
sample.y sample.l のふたつのファイルを
http://cis.k.hosei.ac.jp/~nakata/lectureCompiler/YaccLex/6.htmlのような手順でコンパイルしようとした結果
こうなってしまいます。
----------------------実行結果--------------------------
ken@ubuntu-vm:~/ken/1$ yacc -d sample.y
ken@ubuntu-vm:~/ken/1$ lex sample.l
ken@ubuntu-vm:~/ken/1$ cc y.tab.c -ly -ll -o executablesample.y: In function ‘yyparse’:
sample.y:8: 警告: incompatible implicit declaration of built-in function ‘printf’
ken@ubuntu-vm:~/ken/1$
--------------------------------------------------------
------------------sample.yの内容----------------------
%token NL
%token NUMBER
%left ADDOP
%%
list: /* Empty */
| list expression NL {printf("%d\n",$2);}
;
expression: expression ADDOP expression {$$=$1+$3;}
| NUMBER {$$=$1;}
;
%%
#include "lex.yy.c"
#include <stdio.h> /*追加してみましたが変わりませんでした。"stdio.h"にしてもダメでした*/
-----------------------------------------------------
-------------------sample.lの内容----------------------
%{
#include "y.tab.h"
#include <stdio.h> /*追加してみましたが変わりませんでした"stdio.h"にしてもダメでした */
%}
%%
"+" return(ADDOP);
[0-9]+ {sscanf(yytext,"%d",&yylval); return(NUMBER);}
[ \t] ;
\n|\r|\r\n return(NL);
. return(yytext[0]);
%%
--------------------------------------------------------
#include が入ってないせいだと思い、上記のように追加してみたのですが見当違いなことをしているように思えます。ちなみにCでprintfを使うと普通にコンパイルできます。
必要なライブラリが入ってないのだとしたら何かわからず困っています。
最近VMwareでUbuntuは始めたばかりです。
パッケージは
build-essentials
yum
liby-dev
bison
などをインストールしました。
何が足りないでしょうか。。すいません、お願いします。
お礼
ありがとうございます。 色々参考にさせてもらいたいと思います。 また、何か質問するかもしれないので そのときは宜しくお願いします!