Bison/YACC と Flex/Lex を使い始めましたが、最も単純なパーサーをコンパイルできません。
ファイル: Ruby.y
%{
#include <stdio.h>
#include <stdlib.h>
%}
%start program
%token NUMBER
%%
program : NUMBER;
%%
main( int argc, char* argv[] ) {
yyparse();
}
yyerror(char *s){
printf("%s\n", s);
}
ファイル: Ruby.l
%{
#define "Ruby.tab.h"
%}
DIGIT [0-9]
%%
{DIGIT}+ { return(NUMBER); }
[ \t\n]+
. { return(yytext[0]); }
%%
「Bison -vd Ruby.y」、次に「Flex Ruby.l」を使用してRuby.yをコンパイルし、「GCC -c Ruby.tab.c」および「GCC -c lex. yy.c」ですが、後者では次のエラーが発生します。
Ruby.l:2:9: エラー: マクロ名は識別子でなければなりません Ruby.l: 関数 'yylex' 内: Ruby.l:6:10: エラー: 'NUMBER' が宣言されていません (この関数で最初に使用) Ruby.l: 6:10: 注: 宣言されていない各識別子は、それが現れる関数ごとに 1 回だけ報告されます
私は無知です、何か考えはありますか?
ありがとうございました。