-1

看到我想要的是完全忽略$display解析器中的某种语法。所以我问了这个问题,以便我可以解析if(1) $display("Hello");哪个if(1) ;没有问题。但是当只有$display("Hello");没有时if(1),我的解析器会生成一个;,这会导致syntax error. 谁能帮我这个。将不胜感激。


我正在修改的解析器不解析$display,它显示syntax error。而且我的目的很简单:使用最简单的方法忽略$display("Hello");其他语法而不影响其他语法。情况是这样的:

always @(*)
begin
if(1) $display("Hello");
end

如果我将$display("Hello");as 视为;,上述代码将被解析为:

always @(*)
begin
if(1) ;
end

解析器没问题,但是如果有这样的代码:

always @(*)
begin
$display("Hello");
end

它将被解析为:

always @(*)
begin
;
end

这是不行的。所以我被困在这里。请帮忙。

4

1 回答 1

1

所以在不知道你的 .y 和 .lex 的情况下,我只会添加规则来吃掉

$display (...);

也许喜欢

display0 = Dollardisplay Leftbracket parameterlist Rightbracket {/* ignore it */}
display : display0 | display0 Semi 

然后display在你的语法中适当的地方插入这个规则

这意味着,该规则可以选择包含尾随;当然,您可以引入歧义,从而减少冲突。或者您重构有关语句的规则并允许使用空的规则(单个;)。但是使用语法和词法分析器会更容易回答......

于 2013-02-01T20:56:13.390 回答