返回介绍

12.16.6 中止生成式 — break和return

发布于 2020-09-09 22:55:51 字数 1025 浏览 941 评论 0 收藏 0

两个过程化语句可以用来提前中止一个生成式:break和return。这两个语句可以出现在任意代码块中;它们的不同之处在于它们退出的范围不同。

break语句中止序列的产生。当在一个生成式代码块中执行break语句的时候,它会强制跳出randsequence块。例如:

randsequence()
    WRITE : SETUP DATA;
    SETUP : {if(fifo_length >= max_length) break;} COMMAND;
    DATA  : ...
endsequence

next_statement : ...

当上面的例子在SETUP生成式中执行break语句的时候,不会产生COMMAND生成式,并会继续执行标记为next_statement的行。在一个循环语句中break语句的使用与8.6节中描述的方式相同。因此,break语句中止最小包围的循环语句,否则是randsequence块。

return语句中止生成当前的生成式。当在一个生成式代码块中执行一个return语句的时候,会中止当前的生成式。序列产生会继续紧跟在被中止的生成式之后的下一个生成式。例如:

randsequence()
    TOP : P1 P2;
    P1  : A B C;
    P2  : A {if(flag == 1) return;} B C;
    A   : {$display("A");};
    B   : {if(flag == 2) return; $display("B");};
    C   : {$display("C");};
endsequence

根据flag变量值的不同,上面的例子具有下列的结果:

flag == 0 ==> A B C A B C
flag == 1 ==> A B C A
flag == 2 ==> A C A C

当flag == 1的时候,生成式P2会在产生A之后中止。当flag == 2的时候,生成式B会中止两次(一次在P1中,另外一次在P2中),但每一次都会继续产生下一个生成式C。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文