জিএনইউ কোবল
ঠিক আছে, তারা বলেছে যে এটি করা যায় না। আসলে, আমিই বলেছিলাম যে এটি করা যায় না। এখন এটি সম্পন্ন হয়েছে এবং প্রয়োগ করা পদ্ধতিটি ব্যবহার করে একটি অপ্রচলিত ভাষা বৈশিষ্ট্য পুনরায় প্রয়োগ করা হয়েছে।
প্রশ্নটি বলে:
যদি কোনও অতিরিক্ত শ্বেতস্থান বা বিবৃতি (যা কোডের প্রবাহকে বাধাগ্রস্ত করে না) উত্স কোডে যুক্ত করা হয় তবে তা রান-টাইমে প্রতিফলিত হওয়া উচিত (প্রযোজ্য ক্ষেত্রে সংকলনের পরে)।
DISPLAY
আউটপুট শুরুর কারণ হিসাবে যে কোনও পরিমাণে স্টাফ .োকানো যেতে পারে এবং এস এর পরে যে কোনও কিছুই DISPLAY
"কোডের প্রবাহকে বাধা দেয়", তাই ঠিক OK
সিওবিএল একটি 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
.
আউটপুট হয়
Perform
Hello World, from line 18!
GO TO
Hello World, from line 20!
Fall through
Hello World, from line 23!
ভাষা লেখার ক্ষমতা এবং নমনীয়তার একটি প্রদর্শনী হিসাবে, এই উদাহরণটি একই সময়ে সমস্ত মিশ্র-কেস, সম্পূর্ণ ছোট হাতের অক্ষর এবং পুরোপুরি বড় হাতের অক্ষর ব্যবহার করে। এটি কার্যকর হয় না, যেমন প্রক্রিয়া করার সময়, সমস্ত কিছু UPPERCASE এ "ভাঁজ" করা হয়।
চলমান প্রোগ্রাম থেকে চলমান প্রোগ্রামে সোর্স লাইন নম্বরে পৌঁছানোর একমাত্র স্ট্যান্ডার্ড সিওবিএল উপায়টি একটি সাথে রয়েছে DEBUGGING
DECLARATIVE
। একটি মধ্যে SECTION
, কঠোরভাবে একটি মধ্যে একটি অনুচ্ছেদ মধ্যে SECTION
, একটি যেমন একটি এর ঘোষণামূলক আপনি বিশেষ-রেজিস্টার এক্সেস আছে DEBUG-LINE
। এতে ক্রিয়া (বিবৃতি) এর উত্স রেখা-সংখ্যা রয়েছে যা একটি নির্দিষ্ট পদ্ধতি-নাম (অনুচ্ছেদ বা SECTION
) এ নিয়ন্ত্রণ স্থানান্তর করে ।
সুতরাং, PERFORM
বা GO TO
, বা ডিবাগিং ঘোষণাপত্রে অনুচ্ছেদের সাথে "পড়ুন" SECTION
কার্যকর করা হয়।
ঠিক আছে, তবে DISPLAY
নিয়ন্ত্রণের স্থানান্তর ঘটায় না।
সমস্যা নেই. নিয়ন্ত্রণের স্থানান্তর হিসাবে একই লাইনে রাখুন ।
সমস্যা, যেহেতু "যদি কোনও অতিরিক্ত শ্বেতস্থান বা বিবৃতি (যা কোডের প্রবাহকে বাধাগ্রস্ত করে না) উত্স কোডে যুক্ত করা হয়, তবে এটি রান-টাইমে প্রতিবিম্বিত হওয়া উচিত (প্রযোজ্য ক্ষেত্রে সংকলনের পরে)"।
সুতরাং, এটি একই লাইনে রাখুন তবে নিয়ন্ত্রণের স্থানান্তরের সামনে,DISPLAY
দুটি অংশকে দুটি অংশে বিভক্ত করুন (মনে রাখবেন, "এই প্রসঙ্গে আমরা স্টেটমেন্টের আউটপুট দেয় এমন স্টেটমেন্টের প্রথম লাইন নম্বর চাই" ) এবং নিয়ন্ত্রণ স্থানান্তর করার আগে প্রথম অংশটি আউটপুট দেয় এবং দ্বিতীয় অংশটি DEBUG-LINE
একবার থেকে ডিবাগিং পদ্ধতির অভ্যন্তরে।
চূড়ান্ত জটিল বিটটি হ'ল "মধ্য দিয়ে পড়ুন" এর জন্য ("পদ্ধতিগুলি" PERFORM
এড করা যেতে পারে, এটির লক্ষ্য হতে পারে GO TO
, বা পরবর্তী লাইনটি পাশাপাশি প্রবেশ করা যেতে পারে)। এই উদাহরণস্বরূপ, DISPLAY
পদ্ধতিটি সংজ্ঞায়িত করে এমন লাইনে রাখুন, তবে সংজ্ঞাটির সামনে ।
"পদ্ধতি" ( a
এবং b
) এর নামগুলি একই হিসাবে উত্স-লাইনে ফিট করার জন্য কঠোরভাবে সংক্ষিপ্ত করা হয়েছে DISPLAY
। কঠোরভাবে একটি সিওবিওএল পদ্ধতি-নামটি কলাম আট থেকে কলাম ১১ পর্যন্ত কোথাও শুরু হওয়া উচিত However তবে, সিনট্যাক্সটি আজকাল, সে সম্পর্কে আরও স্বচ্ছন্দ। যে পরিমাণে আমি কোনও কোডের মতো একই লাইনে একটি পদ্ধতির নামটি সংজ্ঞায়িত করতে পারি। এমনকি কোড এম্বেড। যত্ন এবং একটি মাঝে মধ্যে পুরো স্টপ, প্রয়োজন।
ইন PROCEDURE DIVISION
প্রতিটি পূর্ণ স্টপ দেখানো প্রয়োজন বোধ করা হয়, এবং কোন আরো।
সংকলন করতে:
cobc -x -g hiwhere.cbl
কার্যকর করতে (লিনাক্স):
COB_SET_DEBUG=Y ./hiwhere
অবশেষে, ট্র্যাকের রিটার্ন (প্রস্তুত / রিসেট ছাড়াই)।
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
.
আউটপুট হল:
1
17
2
18
3
19
20
যেখানে 1, 2 এবং 3 তিনটি DISPLAY স্টেটমেন্ট থেকে আউটপুট পাওয়া যায় এবং 17, 18, 19 এবং 20 টি "এক্সিকিউটেবল" (ডিবাগিং না করা) লাইনগুলির লাইন নম্বর numbers