Search code examples
fortranintel-fortran

Intel Compiler returns "Found Format_element when Expected end of statement"


As shown in the following code that I use to practice fixed-form Fortran (because the code I am trying to learn is fixed form Fortran), the 4th format statement and the reading from file 1 are newly added. The code worked as expected prior to adding these statements, but now the intel ifort compiler with no additional flags will not compile the 4th format statement and returns the following error:

fortPractice.for(18): error #5082: Syntax error, found FORMAT_ELEMENT 'format' when expecting one of: <END-OF-STATEMENT> ;

        4     format(i6,2x)
--------------^

fortPractice.for(26): error #6052: This label has not been defined as a FORMAT label. 
                          write(2,3)
----------------------------------^

The code is:

c     This is a script for practicing Fortran codes
      program fortPractice
          implicit none

          integer :: x(0:5),y(2:7)
          integer :: nph(1:6)
          real :: z(4:9)
          integer :: i

          OPEN(unit=1,file='test.txt',status='old')
          read(1,*) nph
          close(unit=1)

          open(unit = 2, file = 'output.txt')

    2     format(i3,2x,i3,2x,2e11.2)
    3     format(1x,78('*'))
    4     format(i6,2x)

          do i = 0,5
              x(i) = i;
              y(i+2) = i+2;
              z(i+4) = x(i)**2 + y(i+2)**2
              z(i+4) = sqrt(z(i+4)) + 10000
              write(2,2) x(i),y(i+2),z(i+4)
              write(2,3)
          enddo
          write(2,*) nph

          close(unit = 2)

      endprogram fortPractice

Output is a file created by the program. test.txt contains just a row of numbers: 1 2 3 4 5 6

When I comment or remove the 4th format statement then the code compiles and runs as expected. As I am just learning how fixed form Fortran works, I am just interested in why the 4th format statement won't compile.

Edit: I have replaced all the tabs with spaces, and the program with some more modification shown below can now compile, but the program does not produce the output file, likely encountered some run-time error:

Edit 2: Nevermind, I forgot to change the file identifiers.

Thanks everyone!


Solution

  • Now we have enough information to solve the problem. In the troublesome source line, the label 4 is preceded by a tab. Tabs in Fortran source are not standard, but Intel Fortran (and many other compilers) support something called "tab source form". The way it works in ifort is as follows:

    • If the line starts with a tab and then a nonzero digit, the digit is treated as if it were in column 6
    • If the line starts with a tab and then some other character, then the character is treated as if it were in column 7
    • If the line starts with a numeric statement label and then a tab, the next character is treated as if it were in column 7
    • Otherwise, a tab is treated as a blank (this last varies among compilers)

    In your case, a tab preceded the 4 so it was taken to be a continuation of the previous line, resulting in an error. Either don't use tabs, or understand how the compiler treats them. Editors that automatically insert tabs will just give you trouble.