ANTLR4 を使用して Verilog コードを解析しようとしています。ここにある Verilog 文法を使用しています https://github.com/antlr/grammars-v4/blob/master/verilog/Verilog2001.g4
サンプルコードは
module blinker(
input clk,
input rst,
output blink
);
reg [24:0] counter_d, counter_q;
assign blink = counter_q[24];
always @(*) begin
counter_d = counter_q + 1'b1;
end
always @(posedge clk) begin
if (rst) begin
counter_q <= 25'b0;
end else begin
counter_q <= counter_d;
end
end
endmodule
問題はライン
always @(*) begin
(*) はトークン '(*' と ')' に分割されています。
文法ファイルの 723 行目には、
event_control :
'@' event_identifier
| '@' '(' event_expression ')'
| '@' '*'
| '@' '(' '*' ')'
;
1329行目でなければ、@(*)行と一致するはずです
attribute_instance : '(*' attr_spec ( ',' attr_spec )* '*)' ;
私はこれらすべてに慣れていませんが、その行の '(*' トークンがコード内の (* と一致し、物事を台無しにしていると推測しています。
The Definitive ANTLR 4 Reference を少し読んだ後、最初に定義されたルールが優先されると思いました。しかし、欲張りな勝負をしていると思いますか?
文法を修正する方法についてのアイデアはありますか?