私が書いた VHDL 文法で ANTLR の問題に直面しています。VHDL には真の複数行コメントがなく、プラグマもないため、ツール ベンダーはコードの特定の部分を除外するコメント ベースのメカニズムを発明しました。
-- pragma translate_off
code to disregard
-- pragma translate_on
('--' は VHDL のコメントを導入します) プラグマの実際のコードは異なります。"synopsys translate off" と "rtl translate_off" は既知のバリアントです。
ANTLR 文法処理のコメントの部分は現在
@lexer::members {
private static final Pattern translateOnPattern = Pattern.compile("\\s*--\\s*(rtl_synthesis\\s+on|(pragma|synthesis|synopsys)\\s+translate(\\s|_)on)\\s*");
private static final Pattern translateOffPattern = Pattern.compile("\\s*-- \\s*(rtl_synthesis\\s+off|(pragma|synthesis|synopsys)\\s+translate(\\s|_)off)\\s*");
private boolean translateOn = true;
}
[...]
COMMENT
: '--' ( ~( '\n' | '\r' ) )*
{
$channel = CHANNEL_COMMENT;
String content = getText();
Matcher mOn = translateOnPattern.matcher(content);
if(mOn.matches()) {
translateOn = true;
}
Matcher mOff = translateOffPattern.matcher(content);
if(mOff.matches()) {
translateOn = false;
}
}
;
問題は、コメントが非表示のチャネルに送信されることです。正規表現を使用してレクサー アクションでコメントを処理することでこれらのプラグマを認識できますが、「-- pragma translate_on "。それは可能ですか、それとも通常は別のアプローチを使用しますか?