错误:语法错误,意外的“标识符”,需要 EXTERNAL 或 GLOBAL

发布于 2025-01-09 15:52:20 字数 3349 浏览 4 评论 0原文

您好,我想知道你们是否可以帮我解决这个错误。我对 cobol 相当陌生,因为这是我专业中的第一门(也是唯一一门)cobol 课程。

我总是收到此错误 lab3a.cob:23: Error: 语法错误,意外的“标识符”,期望 EXTERNAL 或 GLOBAL

每当我尝试编译时, 。我似乎看不出我做错了什么。

我的代码

   IDENTIFICATION DIVISION.
   PROGRAM-ID. "LAB3A".
   Author.     Fielding Featherston
   * Takes inputs from file and seperates.

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT InFile
        ASSIGN to "lab3-in.dat" 
        ORGANIZATION is LINE SEQUENTIAL.
   
   DATA DIVISION.
   FILE SECTION.
   FD   InFile.
   01       InString.
        05              PIC X(13).
        05  Instrument  PIC X(12).
             88  Brass       value "Bugle" "Flugelhorn" 
                                   "Sousaphone" "Trombone"
                                   "Trumpet" "Tuba".
             
             88  Percussion  value "Bass Drum" "Bells" "Bongos"
                                   "Castanets" "Chimes" "Cymbals"
                                   "Snare Drum" "Xylophone".
             
             88  Strings     value "Banjo" "Bass" "Cello" "Guitar"
                                   "Harp" "Lyre" 
                                   "Mandolin" "Violin".
             
             88  Woodwind    value "Bagpipes" "Bassoon" "Clarinet"
                                   "Flute" "Oboe" 
                                   "Piccolo" "Saxophone".                                      
   WORKING-STORAGE SECTION.
   01   BrassCount      PIC 9(3).
   01   PerCount        PIC 9(3).
   01   StringCount     PIC 9(3).
   01   WoodCount       PIC 9(3).
   01   OtherCount      PIC 9(3).
   01   BrassStr        PIC ZZ9.
   01   PerStr          PIC ZZ9.
   01   StringStr       PIC ZZ9.
   01   WoodStr         PIC ZZ9.
   01   OtherStr        PIC ZZ9.
   01   InStringLength  PIC 99.
   01   EndFileStr      PIC X VALUE "n".                                      
        88  EndFile         VALUE "y"
                            When Set to False is "y".

   PROCEDURE DIVISION.
   000-Main.
       Open Input InFile
       Perform until EndFile
           Read InFile
               At end
                   Set EndFile to FALSE
               Not at End
                   PERFORM 100-SeperateStrings
                   PERFORM 200-ClassCount
           END-READ
       END-PERFORM
       CLOSE InFile
       Move BrassCount  to BrassStr
       Move PerCount    to PerStr
       Move StringCount to StringStr
       Move WoodCount   to WoodStr
       Move OtherCount  to OtherStr
       DISPLAY "Counts"
       DISPLAY "    Brass:       " FUNCTION TRIM(BrassStr)
       DISPLAY "    Percussion:  " FUNCTION TRIM(PerStr)
       DISPLAY "    String:      " FUNCTION TRIM(StringStr)
       DISPLAY "    Woodwind:    " FUNCTION TRIM(WoodStr)
       DISPLAY "    OTHER:       " FUNCTION TRIM(OtherStr)
       STOP RUN.

   100-SeperateStrings.
       MOVE FUNCTION Length(InString) to InStringLength
       UNSTRING InString (14:InStringLength)
           INTO Instrument
       END-UNSTRING.

   200-ClassCount.
       IF Brass
           Add 1 to BrassCount
       ELSE IF Percussion
           Add 1 to PerCount
       ELSE IF Strings
           Add 1 to StringCount
       ELSE IF Woodwind
           Add 1 to WoodCount
       ELSE
           Add 1 to OtherCount
       END-IF.              

Hi I was wondering if yall could help me figure this error out. Im rather new to cobol as it is my first (and only) cobol class in my major.

I keep getting this error lab3a.cob:23: Error: syntax error, unexpected "Identifier", expecting EXTERNAL or GLOBAL

whenever I try to compile. And I cant seem to see what I'm doing wrong.

My Code

   IDENTIFICATION DIVISION.
   PROGRAM-ID. "LAB3A".
   Author.     Fielding Featherston
   * Takes inputs from file and seperates.

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
       SELECT InFile
        ASSIGN to "lab3-in.dat" 
        ORGANIZATION is LINE SEQUENTIAL.
   
   DATA DIVISION.
   FILE SECTION.
   FD   InFile.
   01       InString.
        05              PIC X(13).
        05  Instrument  PIC X(12).
             88  Brass       value "Bugle" "Flugelhorn" 
                                   "Sousaphone" "Trombone"
                                   "Trumpet" "Tuba".
             
             88  Percussion  value "Bass Drum" "Bells" "Bongos"
                                   "Castanets" "Chimes" "Cymbals"
                                   "Snare Drum" "Xylophone".
             
             88  Strings     value "Banjo" "Bass" "Cello" "Guitar"
                                   "Harp" "Lyre" 
                                   "Mandolin" "Violin".
             
             88  Woodwind    value "Bagpipes" "Bassoon" "Clarinet"
                                   "Flute" "Oboe" 
                                   "Piccolo" "Saxophone".                                      
   WORKING-STORAGE SECTION.
   01   BrassCount      PIC 9(3).
   01   PerCount        PIC 9(3).
   01   StringCount     PIC 9(3).
   01   WoodCount       PIC 9(3).
   01   OtherCount      PIC 9(3).
   01   BrassStr        PIC ZZ9.
   01   PerStr          PIC ZZ9.
   01   StringStr       PIC ZZ9.
   01   WoodStr         PIC ZZ9.
   01   OtherStr        PIC ZZ9.
   01   InStringLength  PIC 99.
   01   EndFileStr      PIC X VALUE "n".                                      
        88  EndFile         VALUE "y"
                            When Set to False is "y".

   PROCEDURE DIVISION.
   000-Main.
       Open Input InFile
       Perform until EndFile
           Read InFile
               At end
                   Set EndFile to FALSE
               Not at End
                   PERFORM 100-SeperateStrings
                   PERFORM 200-ClassCount
           END-READ
       END-PERFORM
       CLOSE InFile
       Move BrassCount  to BrassStr
       Move PerCount    to PerStr
       Move StringCount to StringStr
       Move WoodCount   to WoodStr
       Move OtherCount  to OtherStr
       DISPLAY "Counts"
       DISPLAY "    Brass:       " FUNCTION TRIM(BrassStr)
       DISPLAY "    Percussion:  " FUNCTION TRIM(PerStr)
       DISPLAY "    String:      " FUNCTION TRIM(StringStr)
       DISPLAY "    Woodwind:    " FUNCTION TRIM(WoodStr)
       DISPLAY "    OTHER:       " FUNCTION TRIM(OtherStr)
       STOP RUN.

   100-SeperateStrings.
       MOVE FUNCTION Length(InString) to InStringLength
       UNSTRING InString (14:InStringLength)
           INTO Instrument
       END-UNSTRING.

   200-ClassCount.
       IF Brass
           Add 1 to BrassCount
       ELSE IF Percussion
           Add 1 to PerCount
       ELSE IF Strings
           Add 1 to StringCount
       ELSE IF Woodwind
           Add 1 to WoodCount
       ELSE
           Add 1 to OtherCount
       END-IF.              

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

软糯酥胸 2025-01-16 15:52:20

错误上下文中的 EXTERNALGLOBAL 子句可能仅出现在记录描述条目中;即以 101 开头的数据条目。鉴于错误发生在两个 88 级别项之间,编译器在扫描源代码时似乎对错误所在位置感到困惑

有一些不寻常的格式可能会导致编译器出现问题。特别是,第 22 行包含许多 TAB 字符,这些字符不应但可能会混淆编译器。此外,第 33 行和第 46 行在每个源代码行的末尾包含许多 TAB 字符,导致这些行超过 72 个字符。

另一个可能的问题是制表符的扩展,无论每个 TAB 字符是否被编译器替换为 4 个或 8 个空格。这同样会影响文本是否超过 72 个字符。如果没有 SOURCE FORMAT 指令,第 72 列之后的源文本将被忽略。

在您了解制表符对源代码的影响之前,我建议将所有制表符替换为空格。

An EXTERNAL or GLOBAL clause in the context of the error may only occur in a record description entry; that is, a data entry that begins with 1 or 01. Given that the error occurs between two 88 level items, it appears the compiler is confused about where it is while scanning the source code.

There is some unusual formatting that may be creating a problem with an the compiler. In particular, line 22 contains a number of TAB characters that should not, but may, confuse the compiler. Also, lines 33 and 46 contain a number of TAB characters at the end of each source line causing the lines to exceed 72 characters.

Another possible issue is expansion of tabs, whether each TAB character is replaced by 4 or 8 spaces by the compiler. Again this will affect whether the text exceeds 72 characters. In the absence of a SOURCE FORMAT directive, source text after column 72 is ignored.

Until you know the effect that tabs have on the source code, I suggest replacing all tabs with spaces.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文