1

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 回だけ報告されます

私は無知です、何か考えはありますか?

ありがとうございました。

4

1 に答える 1

0

Ruby.l ファイルでは、次のようになります。

%{
#define "Ruby.tab.h"
%}

次のようにする必要があります。

%{
#include "Ruby.tab.h"
%}
于 2012-06-01T01:52:49.500 に答える