看看我想要的是完全忽略我的解析器中的$display
种语法。所以我问了this question,以便我可以像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");
视为;
,则上述代码将被解析为:
always @(*)
begin
if(1) ;
end
解析器没问题,但是如果有这样的代码:
always @(*)
begin
$display("Hello");
end
它将被解析为:
always @(*)
begin
;
end
哪个不行。所以我被困在这里。请帮忙。
答案 0 :(得分:1)
因此,如果不知道你的.y和.lex,我会添加规则来吃饭
$display (...);
也许喜欢
display0 = Dollardisplay Leftbracket parameterlist Rightbracket {/* ignore it */}
display : display0 | display0 Semi
然后在您的语法中适当地插入此display
- 规则
这意味着,规则可选地包括尾随;
当然,您可以引入歧义,从而减少冲突。或者你重构关于语句的规则,并且允许空语句(单个;
)。但是用语法和词法分析器来回答真的很容易......