问题标签 [control-flow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
12489 浏览

java - 从抽象语法树获取控制流图

我有一个从 ANTLR Parser Generator for Java 派生的 AST。我想做的是以某种方式构建源代码的控制流图,其中每个语句或表达式都是一个唯一的节点。我知道这个识别肯定有一些递归性,我想知道你会建议什么作为最佳选择,如果 ANTLR 有一个我可以用于这项工作的工具集。干杯,克里斯


编辑 - 我主要关心的是从 AST 获取控制流图(CFG)。这样我可以获得源的树表示。澄清一下,源代码和实现语言都是 Java。

0 投票
7 回答
1806 浏览

algorithm - 控制流的例外情况

这里有一篇关于跨应用程序控制流的有趣帖子。

好吧,最近,我遇到了一个有趣的问题。在潜在(实际上)无限递归序列中生成第 n 个值。这个特定的算法将在它成功的时候至少有 10-15 个堆栈引用深度。我的第一个想法是抛出一个看起来像这样(C#)的 SuccessException:

然后做这样的事情:

然后我的想法又回到了这里,我一遍又一遍地听到从不使用异常进行流量控制。有没有借口?如果你要实现它,你将如何构建这样的东西?

0 投票
33 回答
590172 浏览

python - 如何打破多个循环?

给定以下代码(不起作用):

有没有办法使这项工作?或者我是否需要进行一次检查以跳出输入循环,然后进行另一项更有限的检查,以在用户满意的情况下一起跳出外部循环?

0 投票
11 回答
4280 浏览

java - 如何避免使用异常进行流控制?

我被分配了一个项目来开发一组充当存储系统接口的类。要求是该类支持具有以下签名的 get 方法:

基本上,该方法应该返回CustomObjectkeyif 关联的且仅当对象在 之后被修改时ifModifiedSince。如果存储系统不包含,key则该方法应返回 null。

我的问题是这样的:

如何处理密钥存在但对象未修改的情况

这很重要,因为使用此类的一些应用程序将是 Web 服务和 Web 应用程序。这些应用程序需要知道是返回 404(未找到)、304(未修改)还是 200(好的,这是数据)。

我正在权衡的解决方案是:

  1. 当存储系统不包含 key
  2. 失败时抛出自定义异常 ifModifiedSince
  3. 将状态属性添加到 CustomObject。要求调用者检查属性。

我对这三个选项中的任何一个都不满意。我不喜欢选项 1 和 2,因为我不喜欢使用异常进行流控制。当我的意图是表明没有值时,我也不喜欢返回值

尽管如此,我倾向于选项3。

有没有我不考虑的选项?有没有人对这三个选项中的任何一个有强烈的感觉?


这个问题的答案,意译:

  1. 提供一个contains 方法并要求调用者在调用之前调用它get(key, ifModifiedSince),如果key不存在则抛出异常,如果object没有被修改则返回null。
  2. 将响应和数据(如果有)包装在复合对象中。
  3. 使用预定义的常量来表示某种状态 ( UNMODIFIED, KEY_DOES_NOT_EXIST)。
  4. 调用者实现了用作回调的接口。
  5. 设计很烂。

为什么我不能选择答案#1

我同意这是理想的解决方案,但我已经(不情愿地)驳回了它。这种方法的问题在于,在使用这些类的大多数情况下,后端存储系统将是第三方远程系统,如 Amazon S3。这意味着一种contains方法将需要到存储系统的往返行程,在大多数情况下,这之后会进行另一次往返行程。因为这会花费时间和金钱,所以这不是一种选择。

如果没有这种限制,这将是最好的方法。

(我意识到我没有在问题中提到这个重要元素,但我试图保持简短。显然它是相关的。)


结论:

在阅读了所有答案后,我得出结论,在这种情况下,包装器是最好的方法。本质上,我将模仿 HTTP,使用元数据(标头)包括响应代码和内容主体(消息)。

0 投票
10 回答
439 浏览

refactoring - 这种流结构控制是好的做法吗?

我想重写一个嵌套if语句太多的方法。

我想出了这种方法,并希望得到您的意见:

0 投票
9 回答
3085 浏览

c - 带有“goto”的流控制宏

是的,两个讨厌的构造结合在一起。它是否像听起来那么糟糕,或者它可以被视为控制 goto 使用并提供合理清理策略的好方法?

在工作中,我们讨论了是否在我们的编码标准中允许 goto。一般来说,没有人愿意允许免费使用 goto,但有些人对使用它进行清理跳转持积极态度。如这段代码:

这种使用的最大好处是您不必最终得到以下代码:

尤其是在具有许多分配的类似构造函数的函数中,这有时会变得非常糟糕,尤其是当有人必须在中间插入一些东西时。

因此,为了能够使用 goto,但仍然清楚地将其与自由使用隔离开来,创建了一组流控制宏来处理任务。看起来像这样(简化):

我们可以这样使用它:

它看起来不错,并且有很多好处,但是,在将其推广到开发中之前,我们应该考虑什么缺点吗?毕竟它是非常流量控制和 goto:ish。两人都气馁。在这种情况下阻止他们的论据是什么?

谢谢。

0 投票
7 回答
18254 浏览

dynamic - 如何在 GDB 中自动打印下 N 个执行的行?

一段时间以来,我一直在尝试寻找一种方法来自动化 GDB 中跟踪程序控制流的进度。

甚至只是自动化n命令的一种简单方法,因此您可以查看调用例程的顺序。

我意识到您可以n x在 x 是 GDB 执行的次数的地方提出问题,但问题在于它显示了命令而不是例程的地址!但是如果你n在 GDB 中手动按下(然后按下回车键发出上一个命令)它会显示地址。

我在 GDB 中尝试了以下方法:

GDB 说<breakpoint 1 at 0x123456>。我输入:

但它没有按预期循环,也没有显示地址位置:-(。

任何帮助,将不胜感激!当然,自动记录调用的命令例程一定很简单??

0 投票
3 回答
512 浏览

serial-port - XON 和 XOFF 可以相等吗?

应用程序可以在 XON 和 XOFF 中使用设置相同的字符吗?如果是,我的设备驱动程序应该如何处理这种情况

0 投票
1 回答
1290 浏览

loops - 需要帮助将结果从 ldap 解析为 csv

我正在尝试创建一个脚本来使用 Net::LDAP 使用一些 ldap 查询的结果生成一个 csv 文件,但是如果 @attributes 数组的一个元素为空白,我将无法跳过不完整的行。

因此,例如,如果用户没有列出邮件或没有列出电话号码,那么它应该跳过保留字段而不是返回:

我的循环现在看起来像这样:

我试过这样的代码:

和其他几个没有任何运气。我也尝试过简单的 if () { print "isempty"; 调试测试和它不工作。我不确定我该怎么做。

我很感激你能给我的任何帮助或指示我做错了什么。

非常感谢您的帮助。

更新:
每个混乱请求:

此程序的示例运行将返回:

所以我想做的是跳过所有缺少字段的行,无论是电子邮件还是分机号码。

0 投票
3 回答
20246 浏览

python - 停止执行使用 execfile 调用的脚本

是否可以在不使用 if/else 语句的情况下中断使用 execfile 函数调用的 Python 脚本的执行?我试过exit()了,但它不允许main.py完成。