有人可以帮我解决这个Lex-Yacc解析问题吗?

时间:2013-01-27 06:26:38

标签: yacc lex

看看我想要的是完全忽略我的解析器中的$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

哪个不行。所以我被困在这里。请帮忙。

1 个答案:

答案 0 :(得分:1)

因此,如果不知道你的.y和.lex,我会添加规则来吃饭

$display (...);

也许喜欢

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

然后在您的语法中适当地插入此display - 规则

这意味着,规则可选地包括尾随;当然,您可以引入歧义,从而减少冲突。或者你重构关于语句的规则,并且允许空语句(单个;)。但是用语法和词法分析器来回答真的很容易......