2016-12-10 5 views
0

私はbison-flexプロジェクトをlinux ubuntu vmPlayerで動作させています。何らかの理由で私は立ち去ることができません。パーサ名がデフォルトに定義されています: "parse"警告後のバイソン%start

%{ 
    #include <stdio.h> 
    #include <stdlib.h> 
    #include <string> 
    #include <string.h> 
#include <iostream> 
    #include <map> 
    #include <math.h> 
    #include <algorithm> 
    int yylex(); 
    void yyerror(const char*)  
    char dollarOrWave=' '; 
%} 

%left OR 
%left AND 
%union { 
int  int_val; 
char* str_val; 
}       //THIS IS LINE 70 !! 

%token<int_val> T_INT    
%token<str_val> STREXP 
%type<int_val> expr 
%type<str_val> stringExp 
%start lines 

%% 
lines:    
    line   { }//checkDollars(); }//checkDollars(); } 
| lines line  { checkDollars(); numStringVarsFlag=0; } 
; 

警告:私のファイル、および私のプログラムの「行」で始まるん(extra.yがバイソンファイルです)

extra.y:70 parser name defined to default :"parse" 

検索私はそれを見てきました:Bison grammar warningsが、それはまだ提供します私はその警告.. ..ヘルプ?

+1

はどのようにあなたがバイソンを呼ぶのですか? 70行とは何ですか?あなたが提供したこの6行のバイソンファイルで同じ警告が表示されていますか?私は 'line'が定義されていないので、仮定しません。 MWEを提供できますか? – nickie

+0

aviad @ ubuntu:〜/ Desktop/bison $ rm -f * .h * .c * .o * .exe;フレックスextra.lex; bison -d -v extra.y --->これは私がバイソンと呼ぶところであり、警告が現れる場所です。私はそれを編集しました。ここにすべてのコードを入れることはできません。コード数が少なくてもプロジェクトを開始したときに警告が表示されてから関連性があります – mooly

+2

コードで警告を再現できません。 MWEを提供してください。 – nickie

答えて

-1

';'がありません。​​の後。

%union { 
}; 
+1

いいえ、これは問題ではありません(セミコロンを追加しても問題ありません)。 [documentation](https://www.gnu.org/software/bison/manual/html_node/Union-Decl.html)、特に最後の文を見てください。 – nickie

1

bisonを使用していません。 bison++を使用しています。それは違いがあるので、あなたの質問で明確にする必要があります。

表示される警告メッセージは、bison++では正常です。パーサークラス名を明示的に宣言することで回避できます。 man bison++から

(ドキュメントが正しくインストールされていると仮定します):

%name parser_name
は、このパーサの名前を宣言します。 C++クラス名のユーザーであり、多くの名前を一意に表示します。デフォルトは解析です。 %union%defineの前に指定する必要があります。

関連する問題