首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IF语句正文中的CICS语句

IF语句正文中的CICS语句
EN

Stack Overflow用户
提问于 2019-11-18 12:34:46
回答 3查看 228关注 0票数 3

下午好,我正在分析COBOL中的一些遗留代码,并发现这个案例是我无法理解的。

代码语言:javascript
复制
000610     IF EIBCALEN = 0                                              00061011
000700     EXEC CICS                                                    00070000
000800          SEND MAP('TCHM144')                                     00080007
001100     END-EXEC.                                                    00110000
001110     ELSE                                                         00111013
001111        IF EIBAID = DFHCLEAR OR DFHPF2 OR DFHPF3                  00111113
001112        EXEC CICS SEND FROM(WS-CHAR)                              00111213
001113                       LENGTH(LENGTH OF WS-CHAR)                  00111313
001114                       ERASE                                      00111413
001115                       END-EXEC.                                  00111513
001116        EXEC CICS RETURN END-EXEC.                                00111613
001120*         MAPONLY ERASE FREEKB                                    00112002
001200     EXEC CICS                                                    00120000
001300          RETURN TRANSID('TCE4')                                  00130000
001400     END-EXEC.                                                    00140000
001500     GOBACK.                                                      00150012

据我所记得,在IF语句正文中有一个句点,直到IF语句的最高级别,但在这种情况下,IF主体中包含的结束--EXEC后面是一个句号,按照上述逻辑,该句点将结束句子,而其他语句将不被引用。我是正确的,还是有一个具体的情况,这是可行的?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-11-18 15:51:40

结束分隔符期间的整个EXEC语句将被代码替换。这与COPY语句的情况类似。在下面的代码中,两个COPY语句都复制文本,其中包含一个简单的添加指令,没有分隔点。在预处理期间,将COPY语句替换为文本。同样的情况发生在EXEC语句中。只要EXEC语句没有引入任何分隔周期,关于COBOL结束sentence的规则就不适用。

正如@cschneid所建议的,请查看清单,看看源代码是如何处理的。

下面是COPY语句的一个示例。注意,分隔符周期对编译没有影响。

来源:

代码语言:javascript
复制
   data division.
   working-storage section.
   1 a pic 9 value 0.
   1 b pic 9 value 0.
   procedure division.
   begin.
       display 'A: ' a
       display 'B: ' b
       if a = b
           copy a.
       else
           copy b.
       end-if
       display 'A: ' a
       display 'B: ' b
       stop run
       .

列表:

代码语言:javascript
复制
     1 data division.
     2 working-storage section.
     3 1 a pic 9 value 0.
     4 1 b pic 9 value 0.
     5 procedure division.
     6 begin.
     7     display 'A: ' a
     8     display 'B: ' b
     9     if a = b
*   10         copy a.
    11         add 1 to a
    12     else
*   13         copy b.
    14         add 1 to b
    15     end-if
    16     display 'A: ' a
    17     display 'B: ' b
    18     stop run
    19     .

输出:

代码语言:javascript
复制
A: 0
B: 0
A: 1
B: 0
票数 4
EN

Stack Overflow用户

发布于 2019-11-18 15:09:41

查看编译清单,以确定在编译时对特定版本做了什么,并发布了编译器和CICS翻译器。

综合翻译的引入为一些有趣的边缘案例创造了条件。

票数 2
EN

Stack Overflow用户

发布于 2019-11-18 12:57:17

您是正确的,句点终止IF,并且编写的代码不能很好地编译,所以我怀疑编写的代码是否真的被使用了。=000033==> IGYPS2011 2011-E一个“其他”没有匹配的“如果”。“其他”被丢弃了。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58914680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档