16得票6回答
从抽象语法树获取控制流图

我有一个从ANTLR解析器生成器 for Java派生的抽象语法树(AST)。我的目标是以某种方式构建源代码的控制流图,其中每个语句或表达式都是唯一的节点。我理解这必须具有某种递归性质来实现该识别,我想知道您建议的最佳选项是什么,以及ANTLR是否具有可用于此任务的工具集。 谢谢, Chris...

15得票1回答
如何在Swift中使用AS和switch来获取类类型

我有一个SomeClass的数组,它是各种其他类的超类。 该数组中包含所有这些随机类。 是否有一种使用switch的方法(而不是else if let something = elm as? TheSubClassType)? 伪代码如下:for AObjectOfTypeSomeClass...

723得票39回答
如何跳出多个循环?

给定以下代码(无法正常工作): while True: # Snip: print out current state while True: ok = get_input("Is this ok? (y/n)") if ok.lower() ...

7得票1回答
控制流的单子——序列、选择和迭代

我可以看出在Haskell中使用Monad来进行IO操作 - 创建一个包含此操作计算的容器。使用Monads “组合计算”很有道理,就像您会为数据流操作组合函数。 我现在才刚开始理解的是,您可以使用Monads来进行控制流。现在我了解控制流是关于顺序、选择和迭代的。现在我对高阶函数像map、...

16得票3回答
为什么简单的for循环表达式只限于整数范围?

根据 F# 规范(参见 §6.5.7),简单的 for 循环由整数(即int,也称为int32或System.Int32)限制其上下限,例如:for i = start to stop do // do sth. 我想知道为什么这种类型的for循环迭代边界必须是int32,为什么不允许...

11得票5回答
IEnumerable foreach,对于最后一个元素要执行不同的操作

我有一个IEnumerable<T>。我想对集合中的每个项目执行一件事情,除了最后一个项目,我想要做另外一件事情。如何整洁地编写这段代码?伪代码如下:foreach (var item in collection) { if ( final ) { ...

276得票51回答
如何避免使用“if”语句链?

假设我有这个伪代码:bool conditionA = executeStepA(); if (conditionA){ bool conditionB = executeStepB(); if (conditionB){ bool conditionC = e...

47得票6回答
如何确定在进入finally块后是否已经引发了异常?

当你进入 finally 子句后,是否有可能判断是否发生了异常?类似于:try: funky code finally: if ???: print('the funky code raised') 我想让这个更DRY:try: funky code e...

8得票4回答
Scala的“if...else”可以实现为库函数吗?

我想知道是否可以通过特殊的编译器处理在Predef中实现if...else,类似于classOf[A]所做的方式:定义在Predef中,由编译器填充实现。 当然,很多人会感到放心,知道if始终是if,else始终是else,无论上下文如何。但是,将else定义为if结果类型的方法将其从关键字...

9得票1回答
我能否将抽象语法树翻译成静态单赋值形式,还是需要先将其转换成控制流图再转换成静态单赋值形式?

我能直接将抽象语法树转换成静态单赋值形式(SSA),还是需要创建控制流图(CFG),然后从该CFG创建静态单赋值形式? 在控制流图的上下文中:如何为类似于C的程序表示这个问题?我考虑存储每个函数中所有基本块的CFG图,但是当我调用函数时,这可能会使事情复杂化。另一种我能想到的方式是整个程序的...