gpt4 book ai didi

c++ - 将 for 语句从 BASIC 编译为 C++

转载 作者:行者123 更新时间:2023-11-28 06:51:10 25 4
gpt4 key购买 nike

我正在编写一个编译器来将一些遗留的 VB6 程序迁移到 C++。我需要将 VB6 语言中的 for 语句翻译成 C++ for 语句:

For var = start To end Step S
...
Next var

由于 S 可能是负数,因此天真的翻译将不起作用:

for (var = start; var <= end; var += S) 

我想出了这个翻译,但是条件中的三元 if 很难看:

for (var = start; (S > 0) ? (var <= end) : (var >= end); var += S)

最佳答案

这是一个生成的代码。您只会在调试代码生成器时查看它。因此,它是否丑陋是完全无关紧要的。只有正确才重要,而且生成越简单越好。


更新:但是,如果是迁移,尝试使代码可读性可能确实有意义。然后我要么:

  1. 如果可能,解析要在翻译器中使用的运算符,因为步骤几乎总是不变的。
  2. 隐藏辅助定义中的逻辑并使用基于范围的 for:

    for(auto var : basic_range(start, end, S))

    不幸的是boost::irange没有进入 C++11,并且它像 C++ 一样使用半开范围定义,即 end 在您想要包含它时未包含在内。所以你必须自己定义范围。基本上你只需在其中隐藏方向逻辑,这样它就不会混淆代码。看boost::irange寻找灵感。

无论如何,最大的问题是对象生命周期。 VB6(与早期的 BASIC 不同)是受管理的。因此,您可能最终会为大多数事情使用智能指针,而这并不是最有效的做法。

关于c++ - 将 for 语句从 BASIC 编译为 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23942085/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com