যখন লুপের বডিটি এড়িয়ে যায় তখন বেসিক কীভাবে একটি অর্ডার অফ নেক্সট স্টেটমেন্টটি সনাক্ত করে locate


9

ডাব্লুএএবিএসি মেশিন সেট করুন , শেরম্যান। এই প্রশ্নটি সাধারণভাবে বেসিক এবং বিশেষত মাইক্রোসফ্টের বেসিক -৮০ সম্পর্কে । পুরাতন স্কুল বেসিক। লাইন নম্বর সহ।

লুপ বডি কার্যকর করা হয়নি, এবং নেক্সট স্টেটমেন্টটি অর্ডার ছাড়াই কীভাবে পুরাতন-বেসিক বেসিক ইন্টারপ্রিটাররা ফর হ্যান্ডেল করবে ... নেক্সট লুপগুলি?

পূর্বের সময়ের একটি আদেশ-বহিরাগত নেক্সট বিবৃতি:

ডেভিড এইচ। আহলের "101 বেসিক কম্পিউটার গেমস" এর বাইরে আওয়ারি গেমের একটি সাবরুটাইন এখানে রয়েছে :

200 K=M:GOSUB 600
205 E=0:IF K>6 THEN K=K-7
210 C=C+1:IF C<9 THEN F(N)=F(N)*6+K
215 FOR I=0 TO 5:IF B(I)<>0 THEN 230
220 NEXT I
225 RETURN
230 FOR I=7 TO 12:IF B(I)<>0 THEN E=1:RETURN
235 GOTO 220

এবং এখানে এটি প্রবাহ নিয়ন্ত্রণ redacted ব্যতীত সমস্ত কিছুর সাথে রয়েছে:

200 GOSUB 600
215 FOR I=0 TO 5:IF ... THEN 230
220 NEXT I
225 RETURN
230 FOR I=7 TO 12:IF ... THEN RETURN
235 GOTO 220

এটি কি অত-প্রিয়-স্মৃতিকে স্মরণ করে না? আপনি কি শুনতে পাচ্ছেন ডিজকસ્ત્રা তাঁর কবরে ঘুরছে?

এই খণ্ডটিতে কী ঘটছে তার আকর্ষণীয় অংশটি এখানে:

  • লুপের জন্য দ্বিতীয়টি, যেহেতু এটি একই লুপ ভেরিয়েবল ব্যবহার করে, প্রথম ফর লুপটির পরিবর্তে
  • দুটি লুপ একই নেক্সট স্টেটমেন্ট শেয়ার করে
  • দ্বিতীয় ফর লুপের নেক্সট স্টেটমেন্টটি এর আগে উত্স ক্রমে, তবে এর পরে, কার্যকর করার ক্রমে আসে

আপনি ধরে নিতে পারেন, তাহলে, অনুবাদক, একটি ফর লুপ শুরু করে, কেবলমাত্র নেক্সট লুপ জুড়ে না হওয়া পর্যন্ত বিবৃতি চালায়। উত্সে বিবৃতিটির আদেশ এই ক্ষেত্রে কোনও বিষয় নয়। তবে আসুন দেখা যাক বেসিক 80 ম্যানুয়ালটির জন্য লুপগুলি সম্পর্কে কী বলা আছে:

বেসিক -80 ম্যানুয়ালটি "মু ..." বলেছে

লুপের প্রাথমিক মানটি যদি ধাপের চিহ্নটির চূড়ান্ত মানটি ধাপের চিহ্নের চূড়ান্ত মান বারের চেয়ে বেশি হয় তবে এড়ানো যায়।

সুতরাং, লুপ বডি পুরোপুরি এড়ানো যায়।

আমাদের কাছে প্রকাশিত প্রোগ্রামগুলির আকারে প্রমাণ রয়েছে যে, বেসিকের কমপক্ষে কয়েকটি সংস্করণ তাদের নেক্সট স্টেটমেন্টগুলিকে গতিশীলভাবে চিহ্নিত করেছিল। লুপ বডি কার্যকর করার সময় এটি করা যথেষ্ট সহজ। তবে, বেসিক -৮০ অনুমতি অনুসারে, যেখানে ফর স্টেটমেন্টের বডিটি ছেড়ে দেওয়া উচিত, সেখানে বেসিক বিবৃতি কীভাবে নেক্সট স্টেটমেন্টটি সনাক্ত করেছিল, উত্স ক্রমে ফর স্টেটমেন্টের আগে থাকতে পারে ?

  • "101 বেসিক কম্পিউটার গেমস" এ ব্যবহৃত বেসিকের সংস্করণটি কি সর্বদা লুপ বডিটি অন্তত একবার চালিত করে?
  • বেসিক -৮০ এর উত্স ক্রমে ফর স্টেটমেন্টের পরে লুপের নেক্সট স্টেটমেন্টের দরকার ছিল কি?

পিএস: হ্যাঁ, আমি পুরানো স্কুল বেসিকের জন্য একটি বেসিক দোভাষী লিখছি। এটি একটি অসুস্থতা।


আহল বইটি মূলত ১৯EC৩ সালে ডিসি দ্বারা প্রকাশিত হয়েছিল, মাইক্রোসফ্ট বেসিকের দু'বছরের আগে ভবিষ্যদ্বাণী করেছিল। প্রোগ্রামগুলি সম্ভবত আরটি -11 বেসিক বা বেসিক-প্লাসে করা হত। সিস্টেম-নির্দিষ্ট এক্সটেনশনগুলি ব্যতীত, বেশিরভাগ উপভাষাগুলি সামঞ্জস্যপূর্ণ ছিল এবং আমি খুব কম বা কোনও অসুবিধা সহ বেশ কয়েকটি সিস্টেমে বইয়ের ডিসি সংস্করণ থেকে প্রোগ্রামগুলি ছড়িয়েছিলাম। আপনি অ্যাপ্লসফট বেসিক রম আলোকিতকরণের বিশৃঙ্খলাবদ্ধ , নথিভুক্ত উত্সগুলি পেতে পারেন । NEXTবিবৃতিটি কার্যকর করে এমন কোডটি $ DCF9 থেকে শুরু হয়।
blrfl

বেসিক -৮০ সম্পর্কে জানেন না, তবে আমি 100% নিশ্চিত যে কমোডোর বেসিক (যা মাইক্রোসফ্ট বেসিক ভি 2 ছিল) সর্বদা একবার লুপটি কার্যকর করে, এবং উত্সের বিবৃতিগুলির আদেশের কোনও গুরুত্ব আসে না - ঠিক যেমন আপনি সন্দেহ করেন।
ডক ব্রাউন

উত্তর:


7

এটি পুরানো সময় ফিরিয়ে আনে ...

আমার কাছে তৃতীয় প্রিন্টিং, 1975 বইয়ের একটি অনুলিপি রয়েছে I আমি আপনার তালিকাটি যাচাই করেছি এবং এটি অ-আসল। মূল উত্স কোডে বিবৃতিগুলির কোনও ফাঁকা স্থান নেই এবং অ্যাসাইনমেন্টের এলইটি কীওয়ার্ড রয়েছে। উদাহরণ স্বরূপ

200 LETK=M:GOSUB600

উপভাষাটি হ'ল ডিজিটাল পিডিপি -11 বেসিক (বেসিক-প্লাস বা বেসিক -80 নয়)। অভিজ্ঞতা থেকে, এই সমস্ত গেম বেসিকের সমস্ত উপভাষায় কাজ করে না। এগুলিকে অন্যান্য উপভাষায় কাজ করার জন্য এই গেমগুলির বেশ কয়েকটি পুনরুদ্ধার করার আমার একটি অস্পষ্ট স্মৃতি রয়েছে। এই জাতীয় ভয়ঙ্কর লুপ কাঠামো অবশ্যই সমস্যা ছিল।

বেসিকের 20 টিরও বেশি বিভিন্ন উপভাষার সাথে আমার অভিজ্ঞতা ছিল এবং আমি আপনাকে বলতে পারি যে এটি তখন একটি উদ্বেগজনক প্রশ্ন ছিল। এখানে দুটি প্রধান শিবির ছিল।

একটি শিবিরে পূর্ণ দোভাষী ছিল, যা প্রতিটি বার নতুন করে দেখেছিলে তা নতুন করে বিশ্লেষণ করেছিল। তারা এটিকে একটি স্ট্যাকের উপর চাপ দিয়ে, এর ভেরিয়েবল দ্বারা চিহ্নিত করে এবং তারপরে প্রতিটি নেক্সট এর সাথে ম্যাচের জন্য স্ট্যাকটি স্ক্যান করে একটি ফর লুপ পরিচালনা করে। যদি তারা কোনও লুপ এড়িয়ে যায়, তবে তাদের পরবর্তী অংশের জন্য উত্সটি স্ক্যান করতে হবে। কেউ কেউ করেছেন, কেউ করেননি।

অন্য শিবিরটি ছিল টোকেনাইজার বা অর্ধ-সংকলক। মৃত্যুদন্ড কার্যকর করার আগে তারা সমস্ত লাইন স্ক্যান করে কোনও একক অভ্যন্তরীণ ফর্ম্যাটে রূপান্তরিত করে। তারা ফর / নেক্সট লুপগুলিও মিলেছে এবং গোটো এবং গোসুব লক্ষ্যগুলি নিখোঁজ করার জন্য চেক করেছে। ডিসি এবং বেসিক -৮০ এই ক্যাম্পটিতে ছিল, যেমনটি আমি স্মরণ করি, তবে এটি অনেক দিন আগের।

আপনার প্রশ্নের উত্তরে,

  1. হ্যাঁ, বেসিকের উপভাষা প্রাথমিকভাবে সন্তুষ্ট হলে কোনও লুপ এড়িয়ে যায়
  2. না, ফর নেক্সট সিকোয়েন্সিং একটি ডকুমেন্টেড প্রয়োজনীয়তা ছিল না, তবে আচরণটি অপরিবর্তিত ছিল। পেশাদার হিসাবে, স্পষ্টতই আমি এটি কখনও করি নি। :)

আশাকরি এটা সাহায্য করবে. এগুলি ভয়াবহ ভাষা, তবে আপনি যদি তা করতে চান ...


এটি খুব সহায়ক, আপনাকে ধন্যবাদ। বইটিতে একটি ডিসি সংস্করণ, একটি টিআরএস -80 সংস্করণ এবং একটি মাইক্রো কম্পিউটার কম্পিউটার রয়েছে। মাইক্রো কম্পিউটার কম্পিউটারে প্রোগ্রামগুলি মাইক্রোসফ্ট 8080 বেসিক (এমআইটিএস আল্টায়ার বেসিক রেভ 4.0); এটাই আমার দোভাষীর লক্ষ্য।
ওয়েন কনরাড

আমি ১৯৮০ সালের দিকে সিপি / এম তে এমবিএএসআইসি ব্যবহার করেছি, তবে পূর্ববর্তী শখের মেশিনগুলির কোনওটিই নয়। আপনার একটি ফাইল সিস্টেম দরকার! অনেক উপায়ে আমি একজন ডিসি / ডিজি / এইচপি / সিএআই / প্রাইম / ইন্টারডাটা / টেকট্রনিক্স বেসিকটির পুনর্জন্ম আরও আকর্ষণীয় খুঁজে পাব, তবে কেন আপনি তা না করতে পারেন তা আমি বুঝতে পারি। শুভকামনা করছি! আমি সাহায্য করতে পারেন যদি আমার সাথে যোগাযোগ করুন।
david.pfx

2

আমার সামনে এই প্রাচীন বেসিক দোভাষীগুলির একটির কাছে স্পেসিফিকেশনটির অনুলিপি নেই (এটি উপস্থিতও নাও হতে পারে), তবে আমি একটি অঙ্গ নিয়ে গিয়ে বলতে চাই যে বেসিক ইন্টারপ্রেটার একটি কার্যকর করে না লুপের চলকের একই নাম থাকলেও ফর লুপের জন্য এটি পরবর্তী নয় that

সুতরাং, অন্য কথায়, আপনার উদাহরণে

200 K=M:GOSUB 600
205 E=0:IF K>6 THEN K=K-7
210 C=C+1:IF C<9 THEN F(N)=F(N)*6+K
215 FOR I=0 TO 5:IF B(I)<>0 THEN 230
220 NEXT I
225 RETURN
230 FOR I=7 TO 12:IF B(I)<>0 THEN E=1:RETURN
235 GOTO 220

যখন লাইন 235 সম্পাদন করে এবং লাইন 220 এ যায়, লাইন 220 নীচের অংশে নয়, লুপের জন্য শীর্ষস্থানীয় করবে।

এটি "নেক্সট ফর ফর ফর" ত্রুটি বার্তায় স্পষ্ট হয়; বেসিক ইন্টারপ্রেটার এমন কোনও নেক্সটকে প্রত্যাখ্যান করে যার জন্য এটি সম্পর্কিত কোনও সন্ধান পায় না। সাধারণত আপনি যখন আপনার নেক্সট এর অর্ডার অফ হয়ে যান তখন এটি ঘটে

100 FOR I = 1 to 10
110 FOR J = 1 to 10
120 ...
130 NEXT I
140 NEXT J

সুতরাং আপনার বুলেটযুক্ত প্রশ্নের উত্তর দিতে:

  • হ্যাঁ, লুপ ভেরিয়েবল যদি ফর এর সীমার মধ্যে থাকে।
  • হ্যাঁ, আমার জানা মতে, এটাই ঘটনা।

2
"বেসিক ইন্টারপ্রেটার একটি ফর লুপের উপর একটি নেক্সট চালায় না যা এটির সাথে সম্পর্কিত নয়" - আমি পুরানো বেসিক দোভাষীদের কমপক্ষে একটি পরিবারকে জানি যেখানে এই বিবৃতিটি ভুল, আপনি এটি "সমস্ত প্রাচীন বেসিক দোভাষী" হিসাবে সাধারণীকরণ করতে পারবেন না।
ডক ব্রাউন

অনুমান বিদ্যমান। PDP-11 বেসিকের জন্য অনুসন্ধান করুন।
ডেভিড.পিএফএক্স

1
এই বিজোড় প্রশ্নে ছুরিকাঘাতের জন্য আপনাকে ধন্যবাদ। আমি এখন নিশ্চিত করেছি যে বইটিতে বেসিকটি ব্যবহৃত হয়েছিল, একই রকম কাউন্টার ভেরিয়েবলের সাথে দ্বিতীয় ফর স্টেটমেন্টের মুখোমুখি হওয়ার সময়, প্রথম ফর স্টেটমেন্টটি ভুলে যায় এবং দ্বিতীয়টি থেকে লুপটি পুনরায় আরম্ভ করে। এটি অন্ধকারে আপনার ছুরিকাঘাতের বিরোধিতা করে। লুপগুলি লেখার এটি একটি দুরূহ উপায়, তবে বেসিক যাইহোক দুর্গন্ধযুক্ত স্টাফ।
ওয়েইন কনরাড

2

"101 কম্পিউটার গেমস" বেসিক কী করে

"101 কম্পিউটার গেমস" এর মাইক্রোকম্পিউটার সংস্করণে ব্যবহৃত বেসিকের উপভাষাটি একটি ফোর্স ... নেক্সট লুপ কমপক্ষে একবার লুফে দেবে। এটি বেসিক -৮০ বনাম ৫ এর চেয়ে পৃথক

থেকে পি। i12 , "সাধারণ" বেসিকের ব্যতিক্রমগুলি তালিকাভুক্ত করছে:

জন্য ... না ... পদক্ষেপ

স্ট্যান্ডার্ড বেসিকের মতো, লুপ শেষ করার জন্য পরীক্ষাটি কার্যকর করার পরে এটি তৈরি করা হয়। অর্থাৎ, যখন এই প্রোগ্রামটি চালিত হয়:

10 FOR X=2 TO 1
20 PRINT "HI"
30 NEXT X
40 END

"এইচআই" মুদ্রিত হবে ...

সে কারণে, বেসিকের এই উপভাষাটি নেক্সট স্টেটমেন্টটি সনাক্ত করতে, বা একাধিক ফর স্টেটমেন্টের সাথে একই পরবর্তী বিবৃতিটি ভাগ করতে কোনও অসুবিধা নেই। কোনও স্থির বিশ্লেষণের প্রয়োজন নেই। প্রতিটি বিবৃতি যেমন ঘটেছিল কেবল কেবল তা সম্পাদন করুন এবং শেষ পর্যন্ত আপনি যেখানেই থাকুন না কেন পরবর্তী বিবৃতিতে পৌঁছে যাবেন।

বেসিক -৮০ এর পক্ষে কী অর্ডার অফ নেক্সট হ্যান্ডেল করা সম্ভব?

ফোর স্টেটমেন্টটির পক্ষে লুপ বডিটি এড়িয়ে যাওয়া সম্ভব হয়, যেমন বেসিক -৮০ ভি allows অনুমোদন দেয় এবং এখনও বেশিরভাগ ক্ষেত্রেই আউট-অফ-অর্ডার নেক্সট স্টেটমেন্টের অনুমতি দেয়। এখানে কীভাবে:

  • দোভাষী দু'টি রাষ্ট্র পান, "চলমান" এবং "পিছনে পিছনে"
  • "চলমান" অবস্থায় থাকাকালীন দোভাষা প্রতিটি বিবৃতি সাধারনত কার্যকর করেন।
  • ফর স্টেটমেন্টের মূল্যায়ন করার সময়, লুপের বডিটি যদি এড়িয়ে যেতে হয়, রাষ্ট্রটি "স্কিপিং-এ নেক্সট" এ পরিবর্তিত হবে
  • "পরের দিকে স্কিপিং" অবস্থায় থাকাকালীন, দোভাষী অনর্থক এবং শর্তহীন GOTO ব্যতীত প্রতিটি বিবৃতি এড়িয়ে যান ।
    • একটি নিঃশর্ত GOTO বিবৃতি অনুসরণ করা হয়
    • একটি নেক্সট স্টেটমেন্ট, যদি এর ভেরিয়েবলটি ফর স্টেটমেন্টের সাথে মেলে (বা ভেরিয়েবলটি নির্দিষ্ট না করা থাকে), "চলমান" অবস্থায় ফিরে যায় it যদি ভেরিয়েবলটি মেলে না, দোভাষী তারপরে "স্কিপিং টু নেক্সট" অবস্থায় থাকবে।

এটি প্রশ্নের মধ্যে যেমন সাধারণ প্যাথলজিকাল ক্রমগুলি পরিচালনা করবে। এটি যদি আইএফ ... গোটো বিবৃতি, বা গুসউব দ্বারা পৌঁছেছে এমন ক্ষেত্রে এটি পরিচালনা করবে না। কোডটি এটি করে যে প্রশ্নটিতে ইতিমধ্যে খারাপ কোডের চেয়ে অনেক খারাপ যে সরলভাবে ঘোষণা করা অযৌক্তিক নয় যে দোভাষী এই ধরনের ক্ষেত্রে সমর্থন করবেন না। এমনকি দোভাষীর পক্ষে এ জাতীয় কোডটি আগুন জ্বালানো জায়েয হতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.