Προς το περιεχόμενο

Πρόβλημα σε structure (Fortran)


insomniaK

Προτεινόμενες αναρτήσεις

Δημοσ.

Χαίρεται,

 

Μου έδωσαν ένα πρόγραμμα, γραμμένο το 1995 σε Fortran 77 κυρίως και με κάποια κομμάτια C. Μετά από 1 εβδομάδα κατάφερα να εξαφανίσω τα προβλήματα στο compiling, εκτός από 1 στην ακόλουθη structure:

 

> 	  STRUCTURE /RAWDATA/
C
C  List of parameters used during analysis.
C  A new parameter has to be added to the
C  main table for the rawdata (e.g.: "EKOFISK.HDR", or "CFG.HDR")
C  and to following SUBROUTINES as well:
C
C    READHDR
C    WRTHDR
C
  CHARACTER*70 VERSN
  CHARACTER*70 OWNER
  CHARACTER*70 USER
  CHARACTER*70 SHIP
  CHARACTER*70 TOWER
  CHARACTER*3  IDENT
  CHARACTER    YY*2
  CHARACTER    YYYY*4
  CHARACTER    MM*2
  CHARACTER    DD*2
  CHARACTER    HH*2
  CHARACTER    MI*2
  CHARACTER    LAT*10
  CHARACTER    LONG*10
  INTEGER      IXY
C (D3SHDR) INTEGER  NX	 wird aus Y-LEN in READHDR gebildet fuer IXY=1.
C (D3SHDR) INTEGER  NY	 wird aus X-LEN in READHDR gebildet fuer IXY=1.
  INTEGER      IXSTR
  INTEGER      IYSTR
  INTEGER      NT
  INTEGER      NMEAN
  REAL	       HEADG
  REAL	       SHIPR
  REAL	       SHIPS
  REAL	       HDG
C  ROTMA wird innerhalb FFT3DC besetzt !!!
  REAL	       ROTMA
  REAL	       RBOX
  REAL	       PBOX
  REAL	       WINDR
  REAL	       WINDS
  REAL	       DEPTH
  REAL	       RPT
  REAL	       PRF
  REAL	       SDT
  REAL	       SFREQ
  
  END STRUCTURE

 

Για την οποία ο compiler της Compaq Fortran μου πετάει το ακόλουθο λάθος:

 

RAWDATA.FOR(47) : Error: Syntax error, found END-OF-FILE when expecting one of: <LABEL> <END-OF-STATEMENT> ; BLOCK BLOCKDATA PROGRAM TYPE COMPLEX BYTE CHARACTER ...

END STRUCTURE

 

Αν και διαβάζω το λάθος που μου βγάζει δεν καταλαβαίνω που είναι το πρόβλημα. Θα μπορούσε κάποιος να βοηθήσει, πριν τρελαθώ;

Δημοσ.

Δεν εχω εγκατεστημένο FORTRAN compiler να το δοκιμάσω (κι ελπίζω να μη χρειαστεί να εγκαταστήσω ποτέ ξανά :P), αλλά, αν αυτή την κενή γραμμή 47 την κάνεις σχόλιο ή την διαγράψεις τελείως, κάνει το ίδιο;

Δημοσ.

Ευχαριστώ για την απάντηση.

 

Η σύνταξη της structure είναι

 

>STRUCTURE [/structure-name/] [field-namelist] 
    field-declaration 
    [field-declaration] 
    . . . 
    [field-declaration] 
END STRUCTURE

 

Και αυτό που μου βγάζει ως error είναι το END STRUCTURE και όχι την κενή γραμμή.

 

Αν τώρα διαγράψω την END, βγάζει όλο το πρόγραμμα λάθος, διότι όλες οι μεταβλητές δεν αντιστοιχίζονται στον Header των δεδομένων για την εισαγωγή τους...

 

Όλες οι ιδέες ευπρόσδεκτες!

Δημοσ.

Αν καταλαβαίνω σωστά την απάντησή σου, εννοείς ότι αυτή η κενή γραμμή, που φαίνεται στον κώδικα που παρέθεσες,

>          REAL	       SFREQ
  
  END STRUCTURE

στην πραγματικότητα, δεν υπάρχει. Ρίχνοντας ακριβώς αυτό το κείμενο σ' έναν DOS-editor, είδα ότι ο κώδικας δεν ακολουθεί φυσικό, αλλά tabbed spacing και είναι πολύ πιθανό αυτός ο ειδικός χαρακτηρας μεταξύ SFREQ και END, εδώ μεν να μεταφράζεται σαν κενή γραμμή, αλλα η FORTRAN να τον βλέπει σαν αυτό, που κάποτε "τρυπούσαμε" 6-7-8-9 για να ορίσουμε το EOF.

 

Πάλι αν κατανοώ σωστά το μήνυμα λάθους (αν και στην F., πολλές φορές, τα μηνύματα χτυπάνε πολύ μακριά από την καρδιά του προβλήματος) αυτό που λέει είναι

>[b]found [/b]END-OF-FILE

[color="blue"][b]when expecting [/b]one of: μπλα-μπλα-μπλα [b]
ή 
END STRUCTURE[/b][/color] 

Το πρώτο που θα δοκίμαζα, είναι να περάσω το κείμενο από έναν προχωρημένο editor και να κάνω expand tabs to spaces. Στη συνέχεια, θα κολλούσα την END STRUCTURE με την από πάνω γραμμή ώστε να βεβαιωθώ ότι δεν "ξέμεινε" κάποιος special char ανάμεσα και θα την ξανακατέβαζα στη θέση της.

 

Πολύ απλοϊκό και (πολύ καλό για νάναι αληθινό) αλλά ίσως πιάσει.

 

Αν όχι, το πιθανότερο είναι ότι κάποια δομή xxx...END xxx (από IF... END IF μέχρι DO nn, οπου το nn λείπει) έχει τρελλάνει τον stack pointer.

 

Hope it helps.

Δημοσ.

gerontas, έτσι ακριβώς όπως το περιγράφεις είναι το πρόβλημα.

 

Από το πρωί δοκιμάζω διάφορα και αυτό που προτείνεις παραπάνω (τα μεγάλα πνεύματα :) συναντιόνται), αλλά το πρόβλημα παραμένει.

 

Το έβαλα στον UltraEdit και αντικατέστησα (και αυτόματα και χειροκίνητα) τα πάντα και πάλι το ίδιο πρόβλημα.

 

Μέσα στις δοκιμές, χρησιμοποίησα και ένα δεύτερο προγράμμα που χρειάζεται την ίδια Structure και εκεί κολλάει ακριβώς με το ίδιο πρόβλημα.

 

Επομένως, απέκλεισα και οτίδήποτε ξεχασμένο.

 

Δεν ξέρω τι άλλο να ελένξω.

 

Το μόνο που υποπτεύομαι πια, είναι ότι το αρχικό πρόγραμμα είναι σε Watcom 77 και τώρα χρησιμοποιώ Compaq 95 και ίσως υπάρχει κάποια μπούρδα από την αρχική έκδοση, που δεν μπορώ να βρω.

 

Ευχαριστώ πάντως και αν σου έρθει κάτι, let me know it.´

 

EDIT: Βασικά και μόνο την Structure να κανεις compile, πάλι βγάζει το ίδιο λάθος...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...