GNU COBOL
Yah, mereka bilang itu tidak bisa dilakukan. Sebenarnya, akulah yang mengatakan itu tidak bisa dilakukan. Sekarang sudah selesai, dan fitur bahasa usang diimplementasikan kembali menggunakan metode yang diterapkan.
Pertanyaannya menyatakan:
Jika spasi atau pernyataan tambahan apa pun (yang tidak mengganggu aliran kode) ditambahkan ke kode sumber, itu harus tercermin pada run-time (setelah dikompilasi jika berlaku).
Setiap jumlah barang dapat dimasukkan sebelum tiga DISPLAY
s yang menyebabkan awal output, dan apa-apa setelah itu DISPLAY
s akan "mengganggu aliran kode", sehingga itu OK.
COBOL digunakan untuk memiliki TRACE
kata kerja (pernyataan) yang hanya mencantumkan nomor baris sumber saat dieksekusi (tidak ada akses ke nomor baris dalam program). Meskipun penggunaannya terbatas, saya sudah memasukkan implementasi TRACE.
ID Division.
Program-ID. HIWHERE.
ENVIRONMENT DIVISION.
configuration section.
source-computer. TinkerToy with debugging mode.
Procedure Division.
Declaratives.
Debug-Declaratives Section.
Use For Debugging on a b
.
Debug-Declaratives-Paragraph.
Display Debug-Line "!"
.
End Declaratives
.
Main-Program Section.
DISPLAY "Perform"
Display "Hello World, from line " no advancing Perform b
display "GO TO"
Display "Hello World, from line " no advancing GO TO a
.
a.
dISPLay "Fall through"
Display "Hello World, from line " no advancing. b.
The-Last-bit-OF-the-PROGRAM.
GOBACK
.
Outputnya adalah
Perform
Hello World, from line 18!
GO TO
Hello World, from line 20!
Fall through
Hello World, from line 23!
Sebagai pameran kekuatan dan fleksibilitas penulisan bahasa, contoh ini menggunakan huruf besar, huruf kecil, dan huruf besar semua, pada saat bersamaan. Tidak masalah, seperti saat diproses, semuanya "dilipat" ke UPPERCASE.
Satu-satunya cara COBOL standar untuk mendapatkan nomor baris sumber dalam program yang sedang berjalan, dari program yang sedang berjalan, adalah dengan a DEBUGGING
DECLARATIVE
. Dalam a SECTION
, secara ketat dalam paragraf dalam a SECTION
, dari deklaratif demikian Anda memiliki akses ke register khusus DEBUG-LINE
. Ini berisi nomor baris sumber dari kata kerja (pernyataan) yang menyebabkan transfer kontrol ke nama-prosedur tertentu (paragraf atau SECTION
).
Jadi, dengan PERFORM
, atau GO TO
, atau "melewati" paragraf di deklaratif debuggingSECTION
dieksekusi.
OKE, tapi DISPLAY
tidak menyebabkan transfer kontrol.
Tidak masalah. Letakkan di baris yang sama dengan transfer kontrol.
Masalah, karena jika "spasi atau pernyataan tambahan apa pun (yang tidak mengganggu aliran kode) ditambahkan ke kode sumber, itu harus tercermin pada run-time (setelah kompilasi jika berlaku)".
Jadi, letakkan di baris yang sama tetapi di depan transfer kontrol, bagi konten DISPLAY
menjadi dua bagian (ingat, "Dalam konteks ini, kami ingin nomor baris pertama dari pernyataan yang menampilkan string yang akan ditampilkan" ) dan output bagian pertama sebelum transfer kontrol, dan bagian kedua, dari DEBUG-LINE
, setelah di dalam prosedur debugging.
Bit rumit terakhir adalah untuk "fall through" ("prosedur" dapat PERFORM
diedit, dapat menjadi target GO TO
, atau dapat dimasukkan hanya dengan menjadi baris berikutnya). Dalam hal ini, letakkan DISPLAY
pada baris yang mendefinisikan prosedur, tetapi di depan definisi .
Nama-nama "prosedur" ( a
dan b
) telah sangat singkat untuk memungkinkan mereka untuk masuk pada baris sumber yang sama dengan DISPLAY
. Sebenarnya nama prosedur COBOL harus dimulai dari kolom delapan hingga kolom 11. Namun, sintaksisnya, belakangan ini, jauh lebih santai tentang hal itu. Sejauh saya bisa mendefinisikan nama prosedur pada baris yang sama dengan beberapa kode. Bahkan tertanam dalam kode. Kehati-hatian, dan sesekali berhenti, diperlukan.
Dalam PROCEDURE DIVISION
setiap titik yang ditunjukkan diperlukan, dan tidak ada lagi.
Untuk mengkompilasi:
cobc -x -g hiwhere.cbl
Untuk mengeksekusi (linux):
COB_SET_DEBUG=Y ./hiwhere
Akhirnya, kembalinya TRACE (tanpa SIAP / RESET).
ID Division.
Program-ID. tRacE.
ENVIRONMENT DIVISION.
configuration section.
source-computer. TinkerToy with debugging mode.
Procedure Division.
Declaratives.
Debug-Declaratives Section.
Use For Debugging on a
.
Debug-Declaratives-Paragraph.
Display Debug-Line
.
End Declaratives
.
Main-Program Section.
* Just append "perform a" to a single-line statement.
DISPLAY "1" . perform a
Display "2" . perform a
display "3" . perform a
* Or prepend "perform a." for a multi-line statement, or a
* statement which won't "come back".
perform a. GOBACK
.
a.
CONTINUE
.
Output adalah:
1
17
2
18
3
19
20
Di mana 1, 2 dan 3 adalah output dari tiga pernyataan DISPLAY, dan 17, 18, 19 dan 20 adalah nomor baris dari baris "executable" (non-debugging).