问题标签 [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.
java - 从抽象语法树获取控制流图
我有一个从 ANTLR Parser Generator for Java 派生的 AST。我想做的是以某种方式构建源代码的控制流图,其中每个语句或表达式都是一个唯一的节点。我知道这个识别肯定有一些递归性,我想知道你会建议什么作为最佳选择,如果 ANTLR 有一个我可以用于这项工作的工具集。干杯,克里斯
编辑 - 我主要关心的是从 AST 获取控制流图(CFG)。这样我可以获得源的树表示。澄清一下,源代码和实现语言都是 Java。
algorithm - 控制流的例外情况
这里有一篇关于跨应用程序控制流的有趣帖子。
好吧,最近,我遇到了一个有趣的问题。在潜在(实际上)无限递归序列中生成第 n 个值。这个特定的算法将在它成功的时候至少有 10-15 个堆栈引用深度。我的第一个想法是抛出一个看起来像这样(C#)的 SuccessException:
然后做这样的事情:
然后我的想法又回到了这里,我一遍又一遍地听到从不使用异常进行流量控制。有没有借口?如果你要实现它,你将如何构建这样的东西?
python - 如何打破多个循环?
给定以下代码(不起作用):
有没有办法使这项工作?或者我是否需要进行一次检查以跳出输入循环,然后进行另一项更有限的检查,以在用户满意的情况下一起跳出外部循环?
java - 如何避免使用异常进行流控制?
我被分配了一个项目来开发一组充当存储系统接口的类。要求是该类支持具有以下签名的 get 方法:
基本上,该方法应该返回CustomObject
与key
if 关联的且仅当对象在 之后被修改时ifModifiedSince
。如果存储系统不包含,key
则该方法应返回 null。
我的问题是这样的:
如何处理密钥存在但对象未修改的情况?
这很重要,因为使用此类的一些应用程序将是 Web 服务和 Web 应用程序。这些应用程序需要知道是返回 404(未找到)、304(未修改)还是 200(好的,这是数据)。
我正在权衡的解决方案是:
- 当存储系统不包含
key
- 失败时抛出自定义异常
ifModifiedSince
。 - 将状态属性添加到 CustomObject。要求调用者检查属性。
我对这三个选项中的任何一个都不满意。我不喜欢选项 1 和 2,因为我不喜欢使用异常进行流控制。当我的意图是表明没有值时,我也不喜欢返回值。
尽管如此,我倾向于选项3。
有没有我不考虑的选项?有没有人对这三个选项中的任何一个有强烈的感觉?
这个问题的答案,意译:
- 提供一个
contains
方法并要求调用者在调用之前调用它get(key, ifModifiedSince)
,如果key不存在则抛出异常,如果object没有被修改则返回null。 - 将响应和数据(如果有)包装在复合对象中。
- 使用预定义的常量来表示某种状态 (
UNMODIFIED, KEY_DOES_NOT_EXIST
)。 - 调用者实现了用作回调的接口。
- 设计很烂。
为什么我不能选择答案#1
我同意这是理想的解决方案,但我已经(不情愿地)驳回了它。这种方法的问题在于,在使用这些类的大多数情况下,后端存储系统将是第三方远程系统,如 Amazon S3。这意味着一种contains
方法将需要到存储系统的往返行程,在大多数情况下,这之后会进行另一次往返行程。因为这会花费时间和金钱,所以这不是一种选择。
如果没有这种限制,这将是最好的方法。
(我意识到我没有在问题中提到这个重要元素,但我试图保持简短。显然它是相关的。)
结论:
在阅读了所有答案后,我得出结论,在这种情况下,包装器是最好的方法。本质上,我将模仿 HTTP,使用元数据(标头)包括响应代码和内容主体(消息)。
refactoring - 这种流结构控制是好的做法吗?
我想重写一个嵌套if
语句太多的方法。
我想出了这种方法,并希望得到您的意见:
c - 带有“goto”的流控制宏
是的,两个讨厌的构造结合在一起。它是否像听起来那么糟糕,或者它可以被视为控制 goto 使用并提供合理清理策略的好方法?
在工作中,我们讨论了是否在我们的编码标准中允许 goto。一般来说,没有人愿意允许免费使用 goto,但有些人对使用它进行清理跳转持积极态度。如这段代码:
这种使用的最大好处是您不必最终得到以下代码:
尤其是在具有许多分配的类似构造函数的函数中,这有时会变得非常糟糕,尤其是当有人必须在中间插入一些东西时。
因此,为了能够使用 goto,但仍然清楚地将其与自由使用隔离开来,创建了一组流控制宏来处理任务。看起来像这样(简化):
我们可以这样使用它:
它看起来不错,并且有很多好处,但是,在将其推广到开发中之前,我们应该考虑什么缺点吗?毕竟它是非常流量控制和 goto:ish。两人都气馁。在这种情况下阻止他们的论据是什么?
谢谢。
dynamic - 如何在 GDB 中自动打印下 N 个执行的行?
一段时间以来,我一直在尝试寻找一种方法来自动化 GDB 中跟踪程序控制流的进度。
甚至只是自动化n
命令的一种简单方法,因此您可以查看调用例程的顺序。
我意识到您可以n x
在 x 是 GDB 执行的次数的地方提出问题,但问题在于它显示了命令而不是例程的地址!但是如果你n
在 GDB 中手动按下(然后按下回车键发出上一个命令)它会显示地址。
我在 GDB 中尝试了以下方法:
GDB 说<breakpoint 1 at 0x123456>
。我输入:
但它没有按预期循环,也没有显示地址位置:-(。
任何帮助,将不胜感激!当然,自动记录调用的命令例程一定很简单??
serial-port - XON 和 XOFF 可以相等吗?
应用程序可以在 XON 和 XOFF 中使用设置相同的字符吗?如果是,我的设备驱动程序应该如何处理这种情况
loops - 需要帮助将结果从 ldap 解析为 csv
我正在尝试创建一个脚本来使用 Net::LDAP 使用一些 ldap 查询的结果生成一个 csv 文件,但是如果 @attributes 数组的一个元素为空白,我将无法跳过不完整的行。
因此,例如,如果用户没有列出邮件或没有列出电话号码,那么它应该跳过保留字段而不是返回:
我的循环现在看起来像这样:
我试过这样的代码:
和其他几个没有任何运气。我也尝试过简单的 if () { print "isempty"; 调试测试和它不工作。我不确定我该怎么做。
我很感激你能给我的任何帮助或指示我做错了什么。
非常感谢您的帮助。
更新:
每个混乱请求:
此程序的示例运行将返回:
所以我想做的是跳过所有缺少字段的行,无论是电子邮件还是分机号码。
python - 停止执行使用 execfile 调用的脚本
是否可以在不使用 if/else 语句的情况下中断使用 execfile 函数调用的 Python 脚本的执行?我试过exit()
了,但它不允许main.py
完成。