C++(g ++ 5.4.0)には奇妙な制限があります。第二行が許可されていますが、4番目の行が許可されていません:antlr cpp targetのヘッダセクションは、デフォルトの引数を持つextern関数を許可しません。
はextern yy(int x);
extern yy(int x); // re-declaration of an extern function is allowed
extern xx(int x, int y=3);
extern xx(int x, int y=3); // but re-declaration of an an extern function with default args is not allowed
(このエラーは-fpermissive使用して警告に変換することができますが、それはまた、他のエラーをバイパスするので、使用することをお勧めではありませんこのフラグは使用しません)。
この問題は、ヘッダーセクションのantlrのcppターゲットコードに現れます。次のヘッダーコード:私はこのような再符号化することにより、今、このエラーをバイパスしています
// GParser.h:
extern xx(int x, int y=3);
...
// GParser.cpp:
extern xx(int x, int y=3);
#include "GParser.h"
...
:
// G.g4:
@parser::header {
#include "GHeader.h"
}
// GHeader.h:
#ifndef GHEADER
#define GHEADER
extern xx(int x, int y=3);
#endif //GHEADER
しかし、より良い方法はあり
// G.g4:
grammar G;
@parser::header {
extern xx(int x, int y=3);
}
は、以下のように生成されますantlr4自体でこれを行うには?
それは正確に私の質問だった、私はヘッダーセクションに自分のコードを入れて、正しいことをしているかどうか。ありがとう、私は他のセクションを確認し、使用するかを決定します。 – R71