ইংরেজিফরাসিস্প্যানিশ

Ad


অনওয়ার্কস ফেভিকন

yaccposix - ক্লাউডে অনলাইন

উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটরের মাধ্যমে OnWorks ফ্রি হোস্টিং প্রদানকারীতে yaccposix চালান

এটি yaccposix কমান্ড যা আমাদের একাধিক বিনামূল্যের অনলাইন ওয়ার্কস্টেশন যেমন উবুন্টু অনলাইন, ফেডোরা অনলাইন, উইন্ডোজ অনলাইন এমুলেটর বা MAC OS অনলাইন এমুলেটর ব্যবহার করে OnWorks ফ্রি হোস্টিং প্রদানকারীতে চালানো যেতে পারে।

কার্যক্রম:

NAME এর


yacc - আরেকটি কম্পাইলার কম্পাইলার (ডেভেলপমেন্ট)

সাইনোপিসিস


yacc [-dltv] [−খ ফাইল_প্রিফিক্স] [−p sym_prefix] ব্যাকরণ

বর্ণনাঃ


সার্জারির yacc ইউটিলিটি একটি প্রসঙ্গ-মুক্ত ব্যাকরণের বিবরণ পড়তে হবে ব্যাকরণ এবং সি লিখুন
সোর্স কোড, আইএসও সি স্ট্যান্ডার্ডের সাথে সঙ্গতিপূর্ণ, একটি কোড ফাইলে এবং ঐচ্ছিকভাবে হেডার
বর্তমান ডিরেক্টরিতে একটি হেডার ফাইলে তথ্য। উৎপন্ন সোর্স কোড হবে
কোন অনির্দিষ্ট, অনির্দিষ্ট, বা বাস্তবায়ন-সংজ্ঞায়িত আচরণের উপর নির্ভর করে না, ব্যতীত
যে ক্ষেত্রে এটি সরাসরি সরবরাহকৃত ব্যাকরণ থেকে অনুলিপি করা হয়, বা এমন ক্ষেত্রে
বাস্তবায়ন দ্বারা নথিভুক্ত. সি কোড একটি ফাংশন এবং সম্পর্কিত রুটিন সংজ্ঞায়িত করবে
এবং একটি অটোমেটনের জন্য ম্যাক্রো যা প্রয়োজনীয়তা পূরণ করে একটি পার্সিং অ্যালগরিদম চালায়
আলগোরিদিম.

ব্যাকরণের ফর্ম এবং অর্থ বর্ধিত বিবরণ বিভাগে বর্ণিত হয়েছে।

সি সোর্স কোড এবং হেডার ফাইলটি সি-এর জন্য ইনপুট হিসাবে উপযুক্ত একটি ফর্মে তৈরি করা হবে
কম্পাইলার (দেখুন c99).

বিকল্প


সার্জারির yacc ইউটিলিটি POSIX.1-2008-এর বেস ডেফিনিশন ভলিউমের সাথে সঙ্গতিপূর্ণ হবে, অধ্যায়
12.2, উপযোগ বাক্য গঠন নির্দেশিকানির্দেশিকা 9 ব্যতীত।

নিম্নলিখিত বিকল্পগুলি সমর্থিত হবে:

−খ ফাইল_প্রিফিক্স
ব্যবহার ফাইল_প্রিফিক্স পরিবর্তে y সমস্ত আউটপুট ফাইলের নামের উপসর্গ হিসাবে। কোড
ফাইল y.tab.c, হেডার ফাইল y.tab.h (যখন তৈরি হয় −d নির্দিষ্ট করা হয়েছে), এবং
বর্ণনা ফাইল y.আউটপুট (যখন তৈরি হয় −v নির্দিষ্ট করা হয়েছে), এ পরিবর্তন করা হবে
ফাইল_প্রিফিক্স.tab.c, ফাইল_প্রিফিক্স.tab.h, এবং ফাইল_প্রিফিক্সআউটপুট, যথাক্রমে।

−d হেডার ফাইল লিখুন; ডিফল্টরূপে শুধুমাত্র কোড ফাইল লেখা হয়। দ্য # define
বিবৃতিগুলি দ্বারা নির্ধারিত টোকেন কোডগুলিকে সংযুক্ত করে৷ yacc ব্যবহারকারী-ঘোষিত সঙ্গে
টোকেন নাম। এটি ছাড়া অন্য সোর্স ফাইলের অনুমতি দেয় y.tab.c টোকেন অ্যাক্সেস করতে
কোড রয়েছে।

ইল একটি কোড ফাইল তৈরি করুন যাতে কোনটি নেই # লাইন গঠন করে যদি এই বিকল্প
উপস্থিত নেই, কোড ফাইল বা হেডার ফাইল রয়েছে কিনা তা অনির্দিষ্ট
# লাইন নির্দেশাবলী এটি শুধুমাত্র ব্যাকরণ এবং সংশ্লিষ্ট পরে ব্যবহার করা উচিত
কর্ম সম্পূর্ণরূপে ডিবাগ করা হয়.

−p sym_prefix
ব্যবহার sym_prefix পরিবর্তে yy দ্বারা উত্পাদিত সমস্ত বহিরাগত নামের জন্য উপসর্গ হিসাবে
yacc. প্রভাবিত নাম ফাংশন অন্তর্ভুক্ত করা হবে yyparse, yylex(), এবং
yy ত্রুটি(), এবং ভেরিয়েবল yylval, yychar, এবং yydebug. (এর বাকি অংশে
এই বিভাগে, উদ্ধৃত ছয়টি প্রতীক তাদের ডিফল্ট নাম ব্যবহার করে উল্লেখ করা হয়েছে
শুধুমাত্র একটি নোটেশনাল সুবিধা হিসাবে।) স্থানীয় নামগুলিও দ্বারা প্রভাবিত হতে পারে −p
বিকল্প; তবে −p বিকল্প প্রভাবিত করবে না # define দ্বারা উত্পন্ন প্রতীক
yacc.

−t ডিবাগিং সংকলনের অনুমতি দিতে শর্তসাপেক্ষ সংকলন নির্দেশাবলী পরিবর্তন করুন
কোড ফাইলে কোড। রানটাইম ডিবাগিং বিবৃতি সবসময় অন্তর্ভুক্ত করা উচিত
কোড ফাইল, কিন্তু ডিফল্টরূপে শর্তসাপেক্ষ সংকলন নির্দেশাবলী তাদের প্রতিরোধ করে
সংকলন

−v পার্সারের বিবরণ এবং দ্বন্দ্বের একটি প্রতিবেদন সহ একটি ফাইল লিখুন
ব্যাকরণে অস্পষ্টতা দ্বারা উত্পন্ন।

অপারেন্ডস


নিম্নলিখিত অপারেন্ড প্রয়োজন:

ব্যাকরণ নির্দেশাবলী সমন্বিত একটি ফাইলের একটি পাথনাম, এর পরে বলা হয় ব্যাকরণজন্য
যা একটি পার্সার তৈরি করা হবে। ব্যাকরণের বিন্যাসে বর্ণনা করা হয়েছে
বর্ধিত বিবরণ বিভাগ.

STDIN


ব্যবহার করা হয় না.

ইনপুট নথি পত্র


ফাইল ব্যাকরণ বর্ধিত বিবরণে উল্লিখিত একটি টেক্সট ফাইল ফরম্যাট হবে
অধ্যায়.

পরিবেশ বৈচিত্র্য


নিম্নলিখিত পরিবেশের ভেরিয়েবলগুলি কার্যকর করার উপর প্রভাব ফেলবে yacc:

ল্যাং আনসেট বা আন্তর্জাতিকীকরণ ভেরিয়েবলের জন্য একটি ডিফল্ট মান প্রদান করুন
খালি. (POSIX.1-2008-এর বেস ডেফিনিশন ভলিউম দেখুন, অধ্যায় 8.2,
আন্তর্জাতিকীকরণ ভেরিয়েবল আন্তর্জাতিকীকরণের অগ্রাধিকারের জন্য
লোকেল বিভাগের মান নির্ধারণ করতে ব্যবহৃত ভেরিয়েবল।)

Lc_all একটি অ-খালি স্ট্রিং মান সেট করা হলে, অন্য সব মান ওভাররাইড করুন
আন্তর্জাতিকীকরণ ভেরিয়েবল।

Lc_ctype পাঠ্য ডেটার বাইটের অনুক্রমের ব্যাখ্যার জন্য লোকেল নির্ধারণ করুন
অক্ষর হিসাবে (উদাহরণস্বরূপ, একক-বাইট, মাল্টি-বাইট অক্ষরের বিপরীতে
আর্গুমেন্ট এবং ইনপুট ফাইল)।

Lc_messages
বিন্যাস এবং বিষয়বস্তু প্রভাবিত করতে ব্যবহার করা উচিত যে লোকেল নির্ধারণ করুন
ডায়াগনস্টিক বার্তাগুলি স্ট্যান্ডার্ড ত্রুটিতে লেখা।

NLSPATH এর প্রক্রিয়াকরণের জন্য বার্তা ক্যাটালগের অবস্থান নির্ধারণ করুন Lc_messages.

সার্জারির ল্যাং এবং এলসি_* ভেরিয়েবল এর সঞ্চালন প্রভাবিত yacc ইউটিলিটি যেমন বলা হয়েছে। দ্য প্রধান()
ফাংশন সংজ্ঞায়িত ইয়াক লাইব্রেরি কল করবে:

সেটলোকেল(LC_ALL, "")

এবং এইভাবে প্রোগ্রাম দ্বারা উত্পন্ন yacc এছাড়াও এই বিষয়বস্তু দ্বারা প্রভাবিত হবে
রানটাইমে ভেরিয়েবল।

অ্যাসিঙ্ক্রোনাস ঘটনাগুলি দেখুন


ডিফল্ট.

বন্ধ


ব্যবহার করা হয় না.

STDERR


যদি স্থানান্তর/হ্রাস বা হ্রাস/কমানোর মধ্যে দ্বন্দ্ব সনাক্ত করা হয় ব্যাকরণ, yacc একটি লিখতে হবে
একটি অনির্দিষ্ট বিন্যাসে স্ট্যান্ডার্ড ত্রুটির জন্য সেই দ্বন্দ্বগুলির প্রতিবেদন।

স্ট্যান্ডার্ড ত্রুটি ডায়াগনস্টিক বার্তাগুলির জন্যও ব্যবহার করা হবে৷

আউটপুট নথি পত্র


কোড ফাইল, হেডার ফাইল এবং বর্ণনা ফাইল টেক্সট ফাইল হতে হবে। সবাই
নিম্নলিখিত বিভাগে বর্ণিত।

কোড ফাইল
এই ফাইলটিতে সি সোর্স কোড থাকবে yyparse() ফাংশন। এটা ধারণ করা হবে
ম্যাক্রো প্রতিস্থাপন সহ বিভিন্ন শব্দার্থিক ক্রিয়াগুলির জন্য কোড হিসাবে তাদের উপর সঞ্চালিত হয়
বর্ধিত বিবরণ বিভাগে বর্ণিত। এটি একটি অনুলিপি থাকবে # define
হেডার ফাইলে বিবৃতি। যদি একটি %মিলন ঘোষণা ব্যবহৃত হয়, জন্য ঘোষণা
YYSTYPE এছাড়াও এই ফাইলে অন্তর্ভুক্ত করা হবে.

শিরোলেখ ফাইল
হেডার ফাইলে থাকতে হবে # define বিবৃতি যা টোকেন নম্বরের সাথে যুক্ত করে
টোকেন নাম। এটি কোড ফাইল ব্যতীত সোর্স ফাইলগুলিকে টোকেন কোডগুলি অ্যাক্সেস করার অনুমতি দেয়।
যদি একটি %মিলন ঘোষণা ব্যবহার করা হয়, YYSTYPE এর জন্য ঘোষণা এবং একটি extern YYSTYPE yylval
ঘোষণা এই ফাইলে অন্তর্ভুক্ত করা হবে.

বিবরণ ফাইল
বর্ণনা ফাইলটি একটি টেক্সট ফাইল হবে যাতে রাষ্ট্রীয় মেশিনের বিবরণ থাকে
একটি অনির্দিষ্ট বিন্যাস ব্যবহার করে পার্সারের সাথে সম্পর্কিত। অভ্যন্তরীণ টেবিলের জন্য সীমা (দেখুন
সীমা)ও রিপোর্ট করা হবে, একটি বাস্তবায়ন-সংজ্ঞায়িত পদ্ধতিতে। (কিছু বাস্তবায়ন
গতিশীল বরাদ্দ কৌশল ব্যবহার করতে পারে এবং রিপোর্ট করার জন্য কোন নির্দিষ্ট সীমা মান নেই।)

সম্প্রসারিত বর্ণনাঃ


সার্জারির yacc কমান্ড এমন একটি ভাষা গ্রহণ করে যা একটি লক্ষ্য ভাষার জন্য একটি ব্যাকরণ সংজ্ঞায়িত করতে ব্যবহৃত হয়
দ্বারা উত্পন্ন টেবিল এবং কোড দ্বারা পার্স করা হবে yacc. ভাষা দ্বারা গৃহীত yacc হিসেবে
লক্ষ্য ভাষার জন্য ব্যাকরণ ব্যবহার করে নীচে বর্ণনা করা হয়েছে yacc ইনপুট ভাষা নিজেই।

ইনপুট ব্যাকরণ টার্গেট ভাষার ইনপুট গঠন বর্ণনা করার নিয়ম অন্তর্ভুক্ত করে এবং
যখন এই নিয়মগুলি সংশ্লিষ্ট শব্দার্থ প্রদানের জন্য স্বীকৃত হয় তখন কোডটি ব্যবহার করতে হবে
কর্ম. কার্যকর করা কোডটি পাঠ্যের অংশ হিসাবে প্রদর্শিত হবে যা C- হওয়ার উদ্দেশ্যে করা হয়েছে।
ভাষার কোড। পাঠ্যের এই অংশগুলিতে সি-ভাষা ট্রিগ্রাফ থাকবে না। সি-ভাষা
দ্বারা প্রক্রিয়া করা হলে অন্তর্ভুক্তিগুলি একটি সঠিক ফাংশন গঠন করে বলে মনে করা হয় yacc তার আউটপুট মধ্যে
নথি পত্র. এইভাবে অন্তর্ভুক্ত কোডটি স্বীকৃতির সময় কার্যকর করা হবে
সুনির্দিষ্ট ভাষা.

একটি ব্যাকরণ দেওয়া, yacc ইউটিলিটি আউটপুট ফাইলগুলিতে বর্ণিত ফাইলগুলি তৈরি করে
অধ্যায়. কোড ফাইলটি ব্যবহার করে কম্পাইল এবং লিঙ্ক করা যেতে পারে c99. যদি ঘোষণা ও
ব্যাকরণ ফাইলের প্রোগ্রাম সেকশনে এর সংজ্ঞা অন্তর্ভুক্ত করা হয়নি প্রধান, yylex(), এবং
yy ত্রুটি(), সংকলিত আউটপুট এর বাহ্যিকভাবে সরবরাহকৃত সংস্করণগুলির সাথে লিঙ্ক করা প্রয়োজন
ফাংশন এর ডিফল্ট সংস্করণ প্রধান() এবং yy ত্রুটি() মধ্যে সরবরাহ করা হয় yacc লাইব্রেরি এবং
ব্যবহার করে লিঙ্ক করা যেতে পারে ইল y অপারেন্ড থেকে c99. দ্য yacc লাইব্রেরি ইন্টারফেসের প্রয়োজন নেই
ডিফল্ট ব্যতীত অন্যের সাথে সাপোর্ট ইন্টারফেস yy প্রতীক উপসর্গ। অ্যাপ্লিকেশন প্রদান করে
আভিধানিক বিশ্লেষক ফাংশন, yylex(); দ্য আইন ইউটিলিটি বিশেষভাবে ডিজাইন করা হয়েছে
এমন একটি রুটিন তৈরি করুন।

ইনপুট ভাষা
অ্যাপ্লিকেশনটি নিশ্চিত করবে যে প্রতিটি স্পেসিফিকেশন ফাইলের মধ্যে তিনটি বিভাগ রয়েছে
অর্ডার: ঘোষণা, ব্যাকরণ নিয়ম, এবং প্রোগ্রাম, দ্বিগুণ দ্বারা বিভক্ত
চরিত্র ("%%") ঘোষণা এবং প্রোগ্রাম বিভাগ খালি হতে পারে. যদি পরেরটি হয়
খালি, পূর্ববর্তী "%%" বিধি বিভাগ থেকে আলাদা করে চিহ্ন বাদ দেওয়া যেতে পারে।

নীচে সংজ্ঞায়িত ব্যাকরণের কাঠামো অনুসরণ করে ইনপুটটি বিনামূল্যের ফর্মের পাঠ্য।

লেক্সিকাল গঠন of দ্য ব্যাকরণ
দ্য , , এবং চরিত্র উপেক্ষা করা হবে, যে ছাড়া
আবেদন নিশ্চিত করবে যে তারা নাম বা বহু-অক্ষর সংরক্ষিত প্রদর্শিত হবে না
প্রতীক মন্তব্য সংযুক্ত করা হবে "/* ... */", এবং একটি নাম যেখানেই প্রদর্শিত হতে পারে৷
বৈধ।

নামগুলি নির্বিচারে দৈর্ঘ্যের, অক্ষর, পিরিয়ড দিয়ে গঠিত ('।'), আন্ডারস্কোর ('_'), এবং
অ-প্রাথমিক সংখ্যা। বড় হাতের অক্ষর এবং ছোট হাতের অক্ষর আলাদা। সঙ্গতিপূর্ণ অ্যাপ্লিকেশন
শুরুতে নাম ব্যবহার করবেন না yy or YY যেহেতু yacc পার্সার এই ধরনের নাম ব্যবহার করে। অনেক
নামগুলি চূড়ান্ত আউটপুটে উপস্থিত হয় yacc, এবং এইভাবে তাদের মেনে চলার জন্য বেছে নেওয়া উচিত
C কম্পাইলার দ্বারা তৈরি যেকোন অতিরিক্ত নিয়ম ব্যবহার করতে হবে। বিশেষ করে তারা উপস্থিত হয়
in # define বিবৃতি।

একটি আক্ষরিক একক-উদ্ধৃতি অক্ষরে আবদ্ধ একটি একক অক্ষর নিয়ে গঠিত হবে। সব
আইএসও সি স্ট্যান্ডার্ড দ্বারা অক্ষর ধ্রুবকের জন্য সমর্থিত এস্কেপ সিকোয়েন্স হবে
দ্বারা সমর্থিত yacc.

আভিধানিক বিশ্লেষকের সাথে সম্পর্ক নীচে বিশদভাবে আলোচনা করা হয়েছে।

অ্যাপ্লিকেশানটি নিশ্চিত করবে যে NUL অক্ষরটি ব্যাকরণের নিয়মে বা ব্যবহার করা হচ্ছে না
আক্ষরিক

ঘোষণা অধ্যায়
ঘোষণা বিভাগটি লক্ষ্য ভাষা সংজ্ঞায়িত করতে ব্যবহৃত চিহ্নগুলিকে সংজ্ঞায়িত করতে ব্যবহৃত হয়
এবং একে অপরের সাথে তাদের সম্পর্ক। বিশেষ করে, অতিরিক্ত তথ্য অনেক
টার্গেট ভাষার জন্য প্রসঙ্গ-মুক্ত ব্যাকরণে অস্পষ্টতার সমাধান করা প্রয়োজন
এখানে প্রদান করা হয়েছে।

সাধারণত yacc এটি উৎপন্ন প্রতীকী নাম এবং তাদের মধ্যে সম্পর্ক নির্ধারণ করে
অন্তর্নিহিত সাংখ্যিক মান। ঘোষণা বিভাগ নিয়ন্ত্রণ করা সম্ভব করে তোলে
এই মান নির্ধারণ.

বর্তমানে চালু থাকা টোকেনগুলির সাথে যুক্ত শব্দার্থিক তথ্য রাখাও সম্ভব
একটি ব্যবহারকারী-সংজ্ঞায়িত সি-ভাষায় পার্স স্ট্যাক মিলন, যদি ইউনিয়নের সদস্য হয়
ব্যাকরণের বিভিন্ন নামের সাথে যুক্ত। ঘোষণা বিভাগ জন্য প্রদান করে
এই হিসাবে ভাল.

নীচের ঘোষণাকারীদের প্রথম দলটি আর্গুমেন্ট হিসাবে নামের একটি তালিকা নেয়। যে তালিকা করতে পারেন
ঐচ্ছিকভাবে একটি C ইউনিয়ন সদস্যের নামের আগে থাকবে (যাকে বলা হয় a ট্যাগ নীচে) প্রদর্শিত হচ্ছে
মধ্যে '<' এবং '>'. (এটির বাকি অংশের টাইপোগ্রাফিক্যাল কনভেনশনের ব্যতিক্রম হিসেবে
POSIX.1-2008 এর ভলিউম, এই ক্ষেত্রেট্যাগ> একটি metavariable প্রতিনিধিত্ব করে না, কিন্তু
একটি প্রতীককে ঘিরে আক্ষরিক কোণ বন্ধনী অক্ষর।) এর ব্যবহার ট্যাগ নির্দিষ্ট করে যে
এই লাইনে নাম দেওয়া টোকেনগুলি একই C টাইপের হতে হবে যেটি ইউনিয়ন সদস্য দ্বারা উল্লেখ করা হয়েছে
ট্যাগ. এই নীচে আরো বিস্তারিত আলোচনা করা হয়.

টোকেন সংজ্ঞায়িত করার জন্য ব্যবহৃত তালিকার জন্য, একটি প্রদত্ত টোকেনের প্রথম উপস্থিতি অনুসরণ করা যেতে পারে
একটি ধনাত্মক পূর্ণসংখ্যা (দশমিক সংখ্যার একটি স্ট্রিং হিসাবে)। যদি এটি করা হয়, অন্তর্নিহিত মান
আভিধানিক উদ্দেশ্যে এটিকে নির্ধারিত সংখ্যা হিসাবে নেওয়া হবে।

নিম্নলিখিত ঘোষণা নাম একটি টোকেন হতে:

%টোকেন [<ট্যাগ>] নাম [সংখ্যা] [নাম [সংখ্যা]]...

If ট্যাগ বর্তমান, এই লাইনের সমস্ত টোকেনের জন্য C টাইপটিকে টাইপ হিসাবে ঘোষণা করা হবে
দ্বারা উল্লেখ করা হয়েছে ট্যাগ. যদি একটি ধনাত্মক পূর্ণসংখ্যা, সংখ্যা, অনুসরণ করে একটি নাম, যে মান হবে
টোকেন বরাদ্দ করা হয়েছে।

নিম্নলিখিত ঘোষণা নাম একটি টোকেন হতে, এবং এটিকে অগ্রাধিকার প্রদান করে:

% বাকি [<ট্যাগ>] নাম [সংখ্যা] [নাম [সংখ্যা]]...
%ঠিক [<ট্যাগ>] নাম [সংখ্যা] [নাম [সংখ্যা]]...

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

নিম্নলিখিত ঘোষণা নাম একটি টোকেন হতে, এবং নির্দেশ করে যে এটি ব্যবহার করা যাবে না
সহযোগীভাবে:

% nonassoc [<ট্যাগ>] নাম [সংখ্যা] [নাম [সংখ্যা]]...

যদি পার্সার এই টোকেনের সহযোগী ব্যবহারের সম্মুখীন হয় তবে এটি একটি ত্রুটি রিপোর্ট করে। যদি ট্যাগ is
বর্তমান, এটি একটি সি টাইপ ঘোষণা করবে নামs জন্য বর্ণনা করা হয়েছে %টোকেন.

নিম্নলিখিত যে ইউনিয়ন সদস্য ঘোষণা নামs অ-টার্মিনাল, এবং এইভাবে এটি প্রয়োজনীয়
একটি আছে ট্যাগ এর শুরুতে ক্ষেত্র:

% প্রকার <ট্যাগ> নাম...

কারণ এটি শুধুমাত্র অ-টার্মিনালগুলির সাথে ডিল করে, একটি টোকেন নম্বর বরাদ্দ করা বা একটি আক্ষরিক ব্যবহার করে
এছাড়াও নিষিদ্ধ। যদি এই গঠন উপস্থিত থাকে, yacc টাইপ চেকিং করতে হবে; এই যদি
construct উপস্থিত নেই, পার্স স্ট্যাক শুধুমাত্র ধারণ করবে কোন int টাইপ করুন।

ব্যবহৃত প্রতিটি নাম ব্যাকরণ a দ্বারা সংজ্ঞায়িত নয় %টোকেন, % বাকি, %ঠিক, বা % nonassoc
ঘোষণা একটি অ-টার্মিনাল প্রতীক প্রতিনিধিত্ব করে ধরে নেওয়া হয়। দ্য yacc ইউটিলিটি রিপোর্ট করতে হবে
যেকোনো অ-টার্মিনাল চিহ্নের জন্য একটি ত্রুটি যা কমপক্ষে একটির বাম দিকে প্রদর্শিত হয় না
ব্যাকরণের নিয়ম।

একবার একটি নামের প্রকার, অগ্রাধিকার, বা টোকেন নম্বর নির্দিষ্ট করা হলে, এটি হবে না
পরিবর্তিত যদি একটি টোকেনের প্রথম ঘোষণা একটি টোকেন নম্বর বরাদ্দ না করে, yacc হইবে
একটি টোকেন নম্বর বরাদ্দ করুন। একবার এই অ্যাসাইনমেন্ট করা হয়ে গেলে, টোকেন নম্বর পরিবর্তন করা হবে না
সুস্পষ্ট নিয়োগ দ্বারা।

নিম্নলিখিত ঘোষণাকারীরা পূর্ববর্তী প্যাটার্ন অনুসরণ করেন না।

নিম্নলিখিতটি অ-টার্মিনাল ঘোষণা করে নাম হতে হবে শুরু প্রতীক, যা প্রতিনিধিত্ব করে
ব্যাকরণের নিয়ম দ্বারা বর্ণিত বৃহত্তম, সবচেয়ে সাধারণ কাঠামো:

%শুরু নাম

ডিফল্টরূপে, এটি প্রথম ব্যাকরণের নিয়মের বাম দিকে; এই ডিফল্ট হতে পারে
এই ঘোষণা দিয়ে ওভাররাইড করা হয়েছে।

নিম্নলিখিত ঘোষণা yacc মান স্ট্যাক বিভিন্ন ধরনের মান একটি ইউনিয়ন হতে হবে
আকাঙ্ক্ষিত.

%মিলন { শরীর of মিলন (in C)}

ইউনিয়নের শরীরে ভারসাম্যহীন কোঁকড়া বন্ধনী প্রিপ্রসেসিং টোকেন থাকবে না।

ডিফল্টরূপে, ক্রিয়া দ্বারা প্রত্যাবর্তিত মান (নীচে দেখুন) এবং আভিধানিক বিশ্লেষক হবে
প্রকারের কোন int. দ্য yacc ইউটিলিটি ধরনের ট্র্যাক রাখে, এবং এটি সংশ্লিষ্ট সন্নিবেশ করা হবে
ফলে পার্সারের কঠোর প্রকার পরীক্ষা করার জন্য ইউনিয়ন সদস্যদের নাম।

বিকল্পভাবে, যে অন্তত একটি দেওয়াট্যাগ> নির্মাণ ব্যবহার করা হয়, ইউনিয়ন ঘোষণা করা যেতে পারে
একটি হেডার ফাইলে (যা একটি ব্যবহার করে ঘোষণা বিভাগে অন্তর্ভুক্ত করা হবে # অন্তর্ভুক্ত
মধ্যে নির্মাণ %{ এবং %}), এবং ক টাইপডেফ প্রতিনিধিত্ব করার জন্য YYSTYPE প্রতীক সংজ্ঞায়িত করতে ব্যবহৃত হয়
এই ইউনিয়ন। প্রভাবে %মিলন থেকে সরাসরি YYSTYPE এর ঘোষণা প্রদান করতে হয়
দ্য yacc ইনপুট.

সি-ভাষা ঘোষণা এবং সংজ্ঞাগুলি ঘেরা ঘোষণা বিভাগে উপস্থিত হতে পারে
নিম্নলিখিত চিহ্ন দ্বারা:

%{ ... %}

এই বিবৃতিগুলি কোড ফাইলে অনুলিপি করা হবে এবং এর মধ্যে বিশ্বব্যাপী সুযোগ থাকবে
যে তারা নিয়ম এবং প্রোগ্রাম বিভাগে ব্যবহার করা যেতে পারে. বিবৃতি ধারণ করা উচিত নয়
"%}" একটি মন্তব্যের বাইরে, স্ট্রিং আক্ষরিক, বা বহু-অক্ষর ধ্রুবক।

আবেদনটি নিশ্চিত করবে যে ঘোষণা বিভাগটি টোকেন দ্বারা সমাপ্ত হয়েছে %%.

ব্যাকরণ বিধি in yacc
নিয়ম বিভাগটি ফাংশন দ্বারা গ্রহণযোগ্য প্রসঙ্গ-মুক্ত ব্যাকরণকে সংজ্ঞায়িত করে yacc
সি-ভাষা ক্রিয়া এবং অতিরিক্ত অগ্রাধিকার তৈরি করে এবং সেই নিয়মগুলির সাথে যুক্ত করে
তথ্য ব্যাকরণ নীচে বর্ণিত হয়েছে, এবং একটি আনুষ্ঠানিক সংজ্ঞা অনুসরণ করে।

নিয়ম বিভাগটি এক বা একাধিক ব্যাকরণের নিয়ম নিয়ে গঠিত। একটি ব্যাকরণ নিয়মের ফর্ম আছে:

A : শরীর ;

প্রতীক A একটি অ-টার্মিনাল নাম প্রতিনিধিত্ব করে, এবং শরীর শূন্য বা এর একটি ক্রম উপস্থাপন করে
অধিক নামs, আক্ষরিকগুলি, এবং শব্দার্থিক কর্মs তারপর ঐচ্ছিক দ্বারা অনুসরণ করা যেতে পারে
প্রাধান্য নিয়মs শুধুমাত্র নাম এবং আক্ষরিক গঠনে অংশগ্রহণ করে
ব্যাকরণ; শব্দার্থিক ক্রিয়া এবং অগ্রাধিকার নিয়মগুলি অন্যান্য উপায়ে ব্যবহৃত হয়। দ্য এবং
দ্য হয় yacc বিরাম চিহ্ন সাথে সাথে ব্যাকরণের একাধিক নিয়ম থাকলে
একই বাম দিকে, ('|') পুনরায় লেখা এড়াতে ব্যবহার করা যেতে পারে
বাম দিকে; এই ক্ষেত্রে শেষ নিয়মের পরেই প্রদর্শিত হবে। শরীর
অ-টার্মিনাল নির্দেশ করতে অংশ খালি (বা নাম এবং আক্ষরিক খালি) হতে পারে
প্রতীক খালি স্ট্রিং মেলে.

সার্জারির yacc ইউটিলিটি প্রতিটি নিয়মে একটি অনন্য সংখ্যা নির্ধারণ করে। উল্লম্ব বার ব্যবহার করে নিয়ম
স্বরলিপি হল স্বতন্ত্র নিয়ম। নিয়মে বরাদ্দ করা নম্বরটি বিবরণে উপস্থিত হয়
ফাইল.

একটি শরীর গঠিত উপাদান হল:

নাম, আক্ষরিক
এগুলি ব্যাকরণের নিয়মগুলি গঠন করে: নাম হয় একটি টোকেন বা একটি অ-টার্মিনাল;
আক্ষরিক নিজের জন্য দাঁড়ায় (লেক্সিক্যালি প্রয়োজনীয় উদ্ধৃতি চিহ্ন কম)।

শব্দার্থিক কর্ম
প্রতিটি ব্যাকরণের নিয়মের সাথে, ব্যবহারকারী প্রতিবার সম্পাদিত ক্রিয়াগুলিকে সংযুক্ত করতে পারে
নিয়মটি ইনপুট প্রক্রিয়ায় স্বীকৃত। (উল্লেখ্য যে ``ক্রিয়া'' শব্দটি পারে
পার্সারের ক্রিয়াগুলিকেও উল্লেখ করুন—শিফ্ট, কমানো, ইত্যাদি।)

এই ক্রিয়াগুলি মানগুলি ফেরত দিতে পারে এবং পূর্বের দ্বারা প্রত্যাবর্তিত মানগুলি পেতে পারে৷
কর্ম এই মানগুলি YYSTYPE টাইপের বস্তুগুলিতে রাখা হয় (দেখুন %মিলন)। দ্য
কর্মের ফলাফলের মান বাম হাত দিয়ে পার্স স্ট্যাকের উপর রাখা হবে
নিয়মের দিক, তাদের ডান হাতের অংশ হিসাবে অন্যান্য হ্রাস দ্বারা অ্যাক্সেস করা
পাশ ব্যবহার করেট্যাগ> ঘোষণা বিভাগে দেওয়া তথ্য,
কোড দ্বারা উত্পন্ন yacc কঠোরভাবে টাইপ চেক করা যেতে পারে এবং নির্বিচারে ধারণ করতে পারে
তথ্য উপরন্তু, আভিধানিক বিশ্লেষক একই ধরনের প্রদান করতে পারে
টোকেনের জন্য মান, যদি ইচ্ছা হয়।

একটি ক্রিয়া একটি নির্বিচারে C বিবৃতি এবং যেমন ইনপুট বা আউটপুট, কল করতে পারে
সাবপ্রোগ্রাম, এবং বাহ্যিক ভেরিয়েবল পরিবর্তন করে। একটি কর্ম হল এক বা একাধিক C বিবৃতি
কোঁকড়া ধনুর্বন্ধনীতে আবদ্ধ '{' এবং '}'. বিবৃতি ধারণ করা উচিত নয়
ভারসাম্যহীন কোঁকড়া বন্ধনী প্রিপ্রসেসিং টোকেন।

কিছু ছদ্ম-ভেরিয়েবল অ্যাকশনে ব্যবহার করা যেতে পারে। এগুলি অ্যাক্সেসের জন্য ম্যাক্রো
অভ্যন্তরীণভাবে পরিচিত ডেটা স্ট্রাকচারে yacc.

$$ ক্রিয়াটির মান $$ এ বরাদ্দ করে সেট করা যেতে পারে। যদি টাইপ করুন
চেকিং সক্ষম করা হয়েছে এবং নির্ধারিত মানটির ধরন হতে পারে না
নির্ধারিত, একটি ডায়গনিস্টিক বার্তা তৈরি হতে পারে।

$সংখ্যা এটি দ্বারা নির্দিষ্ট করা উপাদান দ্বারা প্রত্যাবর্তিত মান বোঝায়
টোকেন সংখ্যা একটি নিয়মের ডানদিকে, বাম থেকে ডানে পড়া;
সংখ্যা শূন্য বা ঋণাত্মক হতে পারে। যদি সংখ্যা শূন্য বা ঋণাত্মক, এটা
পার্সারের স্ট্যাকের নামের সাথে যুক্ত ডেটা বোঝায়
বর্তমান নিয়মের বামতম প্রতীকের পূর্ববর্তী। (এটাই, "$0"
এর মধ্যে বামদিকের নামের ঠিক আগে থাকা নামটিকে বোঝায়
বর্তমান নিয়ম পার্সার এর স্ট্যাকে পাওয়া যাবে এবং "$-1" কোনো কিছু নির্দেশ করে
প্রতীক এর বাকি।) যদি সংখ্যা বর্তমান অতীতের একটি উপাদান বোঝায়
নিয়মে পয়েন্ট, বা স্ট্যাকের নীচের বাইরে, ফলাফল হয়
অনির্ধারিত যদি টাইপ চেকিং সক্ষম করা থাকে এবং মানটির ধরনটি হতে হবে
নির্ধারিত নির্ধারণ করা যাবে না, একটি ডায়াগনস্টিক বার্তা তৈরি হতে পারে।

$<ট্যাগ>সংখ্যা
এইগুলি ব্যতীত সংশ্লিষ্ট চিহ্নগুলির সাথে হুবহু মিলে যায় ট্যাগ
অন্তর্ভুক্তি, কিন্তু কঠোর ধরনের পরীক্ষা করার অনুমতি দিন (এবং অবাঞ্ছিত বাদ দিন
টাইপ রূপান্তর)। প্রভাব হল যে ম্যাক্রো ব্যবহার করার জন্য প্রসারিত হয় ট্যাগ
YYSTYPE ইউনিয়ন থেকে একটি উপাদান নির্বাচন করতে (ব্যবহার করে dataname.tag).
এটি বিশেষভাবে দরকারী যদি সংখ্যা ইতিবাচক নয়।

$<ট্যাগ>$ এটি রেফারেন্সের উপর চাপিয়ে দেয় যে ইউনিয়ন সদস্যের উল্লেখ করা হয়েছে
by ট্যাগ. এই নির্মাণ প্রযোজ্য যখন একটি বাম একটি রেফারেন্স
প্রসঙ্গ মান ব্যাকরণে ঘটে, এবং প্রদান করে yacc একটি উপায় সঙ্গে
একটি প্রকার নির্বাচন করার জন্য।

ক্রিয়াকলাপ একটি নিয়মের যে কোনও জায়গায় ঘটতে পারে (শুধুমাত্র শেষে নয়); একটি কর্ম অ্যাক্সেস করতে পারেন
এর বাম দিকে ক্রিয়া দ্বারা প্রত্যাবর্তিত মান, এবং পরিবর্তে এটি যে মান প্রদান করে তা হতে পারে
তার ডানদিকে ক্রিয়া দ্বারা অ্যাক্সেস করা হয়েছে। একটি নিয়ম মাঝখানে প্রদর্শিত একটি কর্ম
একটি নতুন অ-টার্মিনাল চিহ্ন দিয়ে ক্রিয়া প্রতিস্থাপনের সমতুল্য হবে এবং
বাম দিকের অ-টার্মিনাল চিহ্নের সাথে একটি খালি নিয়ম যোগ করা হচ্ছে। দ্য
নতুন নিয়মের সাথে যুক্ত শব্দার্থিক ক্রিয়া মূলের সমতুল্য হবে
কর্ম. নিয়মের মধ্যে কর্মের ব্যবহার দ্বন্দ্বের পরিচয় দিতে পারে যা হবে না
অন্যথায় বিদ্যমান।

ডিফল্টরূপে, একটি নিয়মের মান এটিতে থাকা প্রথম উপাদানটির মান হবে।
যদি প্রথম উপাদানটির একটি প্রকার না থাকে (বিশেষ করে ক
আক্ষরিক) এবং টাইপ চেকিং চালু হয় % প্রকার, একটি ত্রুটি বার্তা ফলাফল হবে.

প্রাধান্য
মূলশব্দ % prec a এর সাথে যুক্ত অগ্রাধিকার স্তর পরিবর্তন করতে ব্যবহার করা যেতে পারে
বিশেষ ব্যাকরণের নিয়ম। এই ক্ষেত্রে উদাহরণ যেখানে একটি unary এবং binary
অপারেটর একই প্রতীকী উপস্থাপনা আছে, কিন্তু ভিন্ন দেওয়া প্রয়োজন
অগ্রাধিকার, বা যেখানে একটি অস্পষ্ট যদি-অন্যথায় নির্মাণ পরিচালনা করা হয়
প্রয়োজনীয় সংরক্ষিত প্রতীক % prec শরীরের পরে অবিলম্বে প্রদর্শিত হতে পারে
ব্যাকরণের নিয়ম এবং একটি টোকেন নাম বা একটি আক্ষরিক দ্বারা অনুসরণ করা যেতে পারে। এটা হবে
ব্যাকরণের নিয়মের প্রাধান্যকে নিম্নলিখিত টোকেনের মতো করে তোলে
নাম বা আক্ষরিক। সামগ্রিকভাবে নিয়মের জন্য ক্রিয়াকলাপ অনুসরণ করা যেতে পারে % prec.

যদি একটি প্রোগ্রাম বিভাগ অনুসরণ করে, তাহলে আবেদনটি নিশ্চিত করবে যে ব্যাকরণের নিয়ম রয়েছে
দ্বারা সমাপ্ত %%.

প্রোগ্রাম অধ্যায়
সার্জারির প্রোগ্রাম বিভাগে আভিধানিক বিশ্লেষকের সংজ্ঞা অন্তর্ভুক্ত করতে পারে yylex(), এবং যেকোনো
অন্যান্য ফাংশন; উদাহরণ স্বরূপ, ব্যাকরণের নিয়মে উল্লিখিত ক্রিয়াগুলিতে ব্যবহৃত হয়। এটা
প্রোগ্রাম বিভাগটি শব্দার্থিক ক্রিয়াগুলির আগে বা অনুসরণ করে কিনা তা অনির্দিষ্ট
আউটপুট ফাইল; অতএব, যদি অ্যাপ্লিকেশনটিতে কোনো ম্যাক্রো সংজ্ঞা থাকে এবং
শব্দার্থিক ক্রিয়াকলাপে কোডে প্রয়োগ করার উদ্দেশ্যে ঘোষণা, এটি তাদের স্থাপন করবে
মধ্যে "%{ ... %}" ঘোষণা বিভাগে।

ইনপুট ব্যাকরণ
নিম্নলিখিত ইনপুট yacc ইনপুট করার জন্য একটি পার্সার প্রদান করে yacc. এই আনুষ্ঠানিক বাক্য গঠন
পূর্ববর্তী পাঠ্য সিনট্যাক্স বর্ণনার উপর অগ্রাধিকার নেয়।

আভিধানিক গঠন কম সুনির্দিষ্টভাবে সংজ্ঞায়িত করা হয়; লেক্সিকাল গঠন of দ্য ব্যাকরণ সংজ্ঞায়িত
অধিকাংশ পদ পূর্ববর্তী শর্তাবলী এবং নীচের টোকেনগুলির মধ্যে চিঠিপত্রটি হল
অনুসরণ

শনাক্তকারী এই ধারণার সাথে মিলে যায় নাম, আগে দেওয়া. এটাও অন্তর্ভুক্ত
আক্ষরিক যেমন পূর্বে সংজ্ঞায়িত করা হয়েছে।

C_IDENTIFIER
এটি একটি নাম, এবং অতিরিক্তভাবে এটি একটি দ্বারা অনুসরণ করা হয় বলে জানা যায় . ক
আক্ষরিক এই টোকেন প্রদান করতে পারে না.

NUMBER টি অঙ্কের একটি স্ট্রিং (একটি নন-নেতিবাচক দশমিক পূর্ণসংখ্যা)।

প্রকার, বাম, মার্ক, LCURL, RCURL
এই সরাসরি সঙ্গতিপূর্ণ % প্রকার, % বাকি, %%, %{, এবং %}.

{ ... } এটি সি-ভাষা সোর্স কোড নির্দেশ করে, এর সম্ভাব্য অন্তর্ভুক্তি সহ '$'
ম্যাক্রো যেমন পূর্বে আলোচনা করা হয়েছে।

/* ব্যাকরণ উন্নত দ্য ইনপুট থেকে yacc */
/* মৌলিক এন্ট্রি। */
/* সার্জারির অনুসরণ হয় স্বীকৃত by দ্য আভিধানিক বিশ্লেষক। */

%টোকেন আইডেন্টিফায়ার /* শনাক্তকারী এবং আক্ষরিক অন্তর্ভুক্ত */
%টোকেন C_IDENTIFIER /* শনাক্তকারী (কিন্তু আক্ষরিক নয়)
একটি দ্বারা অনুসরণ করা:. */
%টোকেন NUMBER /* [0-9][0-9]* */

/* সংরক্ষিত শব্দ : %type=>TYPE %left=>LEFT, ইত্যাদি */

%টোকেন বাম ডানে NONASSOC টোকেন পূর্বের টাইপ স্টার্ট ইউনিয়ন

%টোকেন মার্ক /* %% মার্ক। */
%token LCURL /* %{ চিহ্ন। */
%টোকেন RCURL /* %} চিহ্ন। */

/* 8-বিট অক্ষর আক্ষরিক নিজেদের জন্য দাঁড়ায়; */
/* টোকেনকে মাল্টি-বাইট অক্ষরের জন্য সংজ্ঞায়িত করতে হবে। */

%স্টার্ট স্পেক

%%

spec: defs MARK রুল লেজ
;
লেজ: মার্ক
{
/* এই অ্যাকশনে, বাকি ফাইল সেট আপ করুন। */
}
| /* খালি; দ্বিতীয় মার্ক ঐচ্ছিক। */
;
defs : /* খালি। */
| defs def
;
def: শনাক্তকারী শুরু করুন
| মিলন
{
/* আউটপুটে ইউনিয়ন সংজ্ঞা অনুলিপি করুন। */
}
| LCURL
{
/* আউটপুট ফাইলে সি কোড কপি করুন। */
}
RCURL
| rword ট্যাগ nlist
;
rword: টোকেন
| বাম
| ডান
| NONASSOC
| টাইপ
;
ট্যাগ : /* খালি: ইউনিয়ন ট্যাগ আইডি ঐচ্ছিক। */
| '<' শনাক্তকারী '>'
;
nlist: nmno
| nlist nmno
;
nmno : আইডেন্টিফায়ার /* দ্রষ্টব্য: % টাইপের সাথে আক্ষরিক অবৈধ। */
| শনাক্তকারী নম্বর /* দ্রষ্টব্য: % প্রকারের সাথে অবৈধ৷ */
;

/* বিধি বিভাগ */

নিয়ম: C_IDENTIFIER rbody prec
| নিয়ম নিয়ম
;
নিয়ম: C_IDENTIFIER rbody prec
| '|' rbody prec
;
rbody : /* খালি */
| rbody আইডেন্টিফায়ার
| rbody আইন
;
আইন : '{'
{
/* কপি অ্যাকশন, অনুবাদ $$, ইত্যাদি। */
}
'}'
;
prec : /* খালি */
| পূর্ব শনাক্তকারী
| পূর্ব শনাক্তকারী আইন
| prec ';'
;

দ্বন্দ্ব
একটি ইনপুট ব্যাকরণের জন্য উত্পাদিত পার্সারে এমন অবস্থা থাকতে পারে যেখানে দ্বন্দ্ব ঘটে। দ্য
ব্যাকরণ না থাকার কারণে দ্বন্দ্ব দেখা দেয় LALR(1)। একটি অস্পষ্ট ব্যাকরণ সবসময় ধারণ করে
অন্তত একটা LALR(1) সংঘর্ষ। দ্য yacc ইউটিলিটি সমস্ত দ্বন্দ্বের সমাধান করবে, যে কোনও একটি ব্যবহার করে
ডিফল্ট নিয়ম বা ব্যবহারকারী-নির্দিষ্ট অগ্রাধিকার নিয়ম।

দ্বন্দ্বগুলি হয় দ্বন্দ্ব পরিবর্তন/হ্রাস বা দ্বন্দ্ব হ্রাস/হ্রাস। একটি স্থানান্তর / হ্রাস
বিরোধ হল যেখানে, একটি প্রদত্ত রাষ্ট্র এবং চেহারার প্রতীকের জন্য, একটি শিফট অ্যাকশন এবং a উভয়ই
কর্ম হ্রাস করা সম্ভব। একটি প্রদত্ত রাষ্ট্রের জন্য এবং দ্বন্দ্ব হ্রাস করা হল যেখানে
lookahead প্রতীক, দুটি ভিন্ন নিয়ম দ্বারা হ্রাস করা সম্ভব।

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

ঘোষিত অগ্রাধিকার এবং সহযোগীতা (দেখুন ঘোষণা অধ্যায়) অভ্যস্ত
নিম্নরূপ পার্সিং দ্বন্দ্ব সমাধান করুন:

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

2. যদি একটি পরিবর্তন/কমানোর দ্বন্দ্ব থাকে, এবং ব্যাকরণের নিয়ম এবং ইনপুট প্রতীক উভয়ই
তাদের সাথে যুক্ত অগ্রাধিকার এবং সহযোগীতা আছে, তারপর দ্বন্দ্ব সমাধান করা হয়
উচ্চতর অগ্রাধিকারের সাথে যুক্ত কর্মের পক্ষে (স্থানান্তর বা হ্রাস)। যদি
অগ্রাধিকার একই, তারপর সহযোগীতা ব্যবহার করা হয়; বাম সহযোগীতা বোঝায়
হ্রাস, রাইট অ্যাসোসিয়েটিভ বোঝায় স্থানান্তর, এবং নন-অ্যাসোসিয়েটিভ এর মধ্যে একটি ত্রুটি বোঝায়
স্ট্রিং পার্স করা হচ্ছে।

3. যখন একটি স্থানান্তর/কমানোর দ্বন্দ্ব থাকে যা নিয়ম 2 দ্বারা সমাধান করা যায় না, তখন শিফট হল
সম্পন্ন. এইভাবে মীমাংসা করা দ্বন্দ্বগুলিকে বর্ণিত ডায়গনিস্টিক আউটপুটে গণনা করা হয়
ভুল হ্যান্ডলিং.

4. যখন একটি হ্রাস/কমানোর দ্বন্দ্ব থাকে, তখন ব্যাকরণের নিয়ম দ্বারা একটি হ্রাস করা হয়
ইনপুট অনুক্রমের আগে ঘটে। এইভাবে মীমাংসা করা দ্বন্দ্বগুলিকে গণনা করা হয়৷
ডায়গনিস্টিক আউটপুট বর্ণিত ভুল হ্যান্ডলিং.

অগ্রাধিকার বা সহযোগীতা দ্বারা সমাধান করা বিরোধগুলি স্থানান্তর/হ্রাবে গণনা করা হবে না
এবং দ্বারা রিপোর্ট করা দ্বন্দ্ব হ্রাস/কমানো yacc হয় স্ট্যান্ডার্ড ত্রুটি বা মধ্যে
বর্ণনা ফাইল।

ভুল হ্যান্ডলিং
টোকেন ভুল ত্রুটি পরিচালনার জন্য সংরক্ষিত হবে. নাম ভুল ব্যবহার করা যেতে পারে
ব্যাকরণ নিয়ম. এটি এমন স্থানগুলি নির্দেশ করে যেখানে পার্সার একটি সিনট্যাক্স ত্রুটি থেকে পুনরুদ্ধার করতে পারে। দ্য
এর ডিফল্ট মান ভুল 256 হবে। এর মান a ব্যবহার করে পরিবর্তন করা যেতে পারে %টোকেন ঘোষণা
আভিধানিক বিশ্লেষক এর মান ফেরত দেবে না ভুল.

পার্সার একটি সিনট্যাক্স ত্রুটি সনাক্ত করবে যখন এটি এমন অবস্থায় থাকে যেখানে কর্মটি যুক্ত থাকে
সঙ্গে lookahead প্রতীক হয় ভুল. একটি শব্দার্থিক ক্রিয়া পার্সারকে শুরু করতে পারে
ম্যাক্রো YYERROR কার্যকর করার মাধ্যমে ত্রুটি পরিচালনা। YYERROR চালানো হলে, শব্দার্থিক
অ্যাকশন পার্সারে নিয়ন্ত্রণ ফিরিয়ে দেয়। YYERROR শব্দার্থের বাইরে ব্যবহার করা যাবে না
ক্রিয়া

যখন পার্সার একটি সিনট্যাক্স ত্রুটি সনাক্ত করে, এটি সাধারণত কল করে yy ত্রুটি() চরিত্রের সাথে
স্ট্রিং "বাক্য গঠন ত্রুটি" তার যুক্তি হিসাবে। পার্সার স্থির থাকলে কল করা হবে না
ত্রুটি সনাক্ত করা হলে পূর্ববর্তী ত্রুটি থেকে পুনরুদ্ধার করা। পার্সার হিসেবে বিবেচিত হয়
পূর্ববর্তী ত্রুটি থেকে পুনরুদ্ধার করা যতক্ষণ না পার্সার কমপক্ষে তিনটির উপরে স্থানান্তরিত হয়
সাধারণ ইনপুট চিহ্ন যেহেতু শেষ ত্রুটি সনাক্ত করা হয়েছে বা একটি শব্দার্থিক ক্রিয়া কার্যকর হয়েছে
ম্যাক্রো yyerrok. পার্সার কল করবে না yy ত্রুটি() যখন YYERROR কার্যকর করা হয়।

ম্যাক্রো ফাংশন YYRECOVERING 1 প্রদান করবে যদি একটি সিনট্যাক্স ত্রুটি সনাক্ত করা হয় এবং
পার্সার এখনও এটি থেকে পুরোপুরি পুনরুদ্ধার করেনি। অন্যথায়, শূন্য ফেরত দেওয়া হবে।

যখন পার্সার দ্বারা একটি সিনট্যাক্স ত্রুটি সনাক্ত করা হয়, তখন পার্সার পূর্ববর্তী সিনট্যাক্স কিনা তা পরীক্ষা করবে
ত্রুটি সনাক্ত করা হয়েছে। যদি পূর্ববর্তী ত্রুটি সনাক্ত করা হয়, এবং যদি কোন সাধারণ ইনপুট চিহ্ন না থাকে
পূর্ববর্তী ত্রুটি শনাক্ত হওয়ার পর থেকে স্থানান্তরিত হয়েছে, পার্সার চেক করে কিনা
lookahead চিহ্ন হল একটি এন্ডমার্কার (দেখুন ইন্টারফেস থেকে দ্য লেক্সিকাল বিশ্লেষক) যদি এটি হয়,
পার্সার একটি অ-শূন্য মান সহ ফিরে আসবে। অন্যথায়, lookahead প্রতীক হবে
বাতিল এবং স্বাভাবিক পার্সিং পুনরায় শুরু হবে.

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

ম্যাক্রো yyerrok একটি শব্দার্থিক ক্রিয়াতে পার্সারকে এমনভাবে কাজ করতে বাধ্য করবে যেন এটি সম্পূর্ণরূপে আছে৷
পূর্ববর্তী কোনো ত্রুটি থেকে পুনরুদ্ধার করা হয়েছে। ম্যাক্রো yyclearin পার্সারকে বাতিল করতে হবে
বর্তমান চেহারার টোকেন। যদি বর্তমান লুকআহেড টোকেনটি এখনও পড়া না হয়,
yyclearin কোন প্রভাব থাকবে না।

ম্যাক্রো YYACCEPT পার্সারকে শূন্যের মান দিয়ে ফিরে আসতে বাধ্য করবে। ম্যাক্রো YYABORT
পার্সারকে একটি অ-শূন্য মান সহ ফেরত দিতে হবে।

ইন্টারফেস থেকে দ্য লেক্সিকাল বিশ্লেষক
সার্জারির yylex() ফাংশন হল একটি পূর্ণসংখ্যা-মূল্যবান ফাংশন যা a প্রদান করে টোকেন সংখ্যা
টোকেন পড়ার ধরনের প্রতিনিধিত্ব করে। যদি টোকেনের সাথে যুক্ত একটি মান থাকে
দ্বারা ফিরে yylex() (এর আলোচনা দেখুন ট্যাগ উপরে), এটা বরাদ্দ করা হবে
বাহ্যিক পরিবর্তনশীল yylval.

যদি পার্সার এবং yylex() এই টোকেন নম্বরগুলিতে একমত নন, নির্ভরযোগ্য যোগাযোগ
তাদের মধ্যে ঘটতে পারে না। (একক-বাইট অক্ষর) আক্ষরিক জন্য, টোকেন হল সহজভাবে
বর্তমান অক্ষর সেটে অক্ষরের সংখ্যাসূচক মান। অন্যান্য টোকেনের সংখ্যা
হয় দ্বারা নির্বাচিত করা যেতে পারে yacc, অথবা ব্যবহারকারী দ্বারা নির্বাচিত। উভয় ক্ষেত্রে, # define গঠন করা
C এর অনুমতি দিতে ব্যবহৃত হয় yylex() প্রতীকীভাবে এই সংখ্যা ফেরত দিতে. দ্য # define বিবৃতি
কোড ফাইলে রাখা হয়, এবং হেডার ফাইল যদি সেই ফাইলটি অনুরোধ করা হয়। সংকলন
দ্বারা অনুমোদিত অক্ষর yacc একটি শনাক্তকারীতে সি. টোকেন দ্বারা অনুমোদিত এর চেয়ে বড়
এই ধরনের অক্ষর ধারণ করা নাম অন্তর্ভুক্ত করা হবে না # define ঘোষণা

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

ইনপুটের শেষ একটি বিশেষ টোকেন দ্বারা চিহ্নিত করা হয় যাকে বলা হয় এন্ডমার্কার, যার একটি টোকেন আছে
সংখ্যা যা শূন্য বা ঋণাত্মক। (এই মান অন্য কোনো টোকেনের জন্য অবৈধ।) সব
আভিধানিক বিশ্লেষক টোকেন নম্বর হিসাবে শূন্য বা ঋণাত্মক প্রদান করবে এর শেষে পৌঁছে
তাদের ইনপুট। যদি টোকেন পর্যন্ত, কিন্তু বাদ দিয়ে, এন্ডমার্কার একটি কাঠামো গঠন করে
স্টার্ট চিহ্নের সাথে মেলে, পার্সার ইনপুট গ্রহণ করবে। যদি এন্ডমার্কার দেখা যায়
অন্য কোন প্রসঙ্গে, এটি একটি ত্রুটি হিসাবে বিবেচিত হবে।

সম্পূর্ণ হচ্ছে দ্য কার্যক্রম
এ ছাড়াও yyparse() এবং yylex(), ফাংশন yy ত্রুটি() এবং প্রধান() করতে হবে
একটি সম্পূর্ণ প্রোগ্রাম তৈরি করুন। অ্যাপ্লিকেশন সরবরাহ করতে পারেন প্রধান() এবং yy ত্রুটি(), বা যারা
থেকে রুটিন পাওয়া যাবে yacc গ্রন্থাগার।

ইয়াক লাইব্রেরি
নিম্নলিখিত ফাংশন শুধুমাত্র প্রদর্শিত হবে yacc এর মাধ্যমে লাইব্রেরি অ্যাক্সেসযোগ্য ইল y
অপারেন্ড থেকে c99; সেগুলিকে একটি সঙ্গতিপূর্ণ অ্যাপ্লিকেশন দ্বারা পুনরায় সংজ্ঞায়িত করা যেতে পারে:

কোন int প্রধান(অকার্যকর)
এই ফাংশন কল করা হবে yyparse() এবং একটি অনির্দিষ্ট মান দিয়ে প্রস্থান করুন। অন্যান্য কজ
এই ফাংশনের মধ্যে অনির্দিষ্ট।

কোন int yy ত্রুটি(const গৃহস্থালির কাজ *s)
এই ফাংশনটি NUL-টার্মিনেটেড আর্গুমেন্টকে স্ট্যান্ডার্ড ত্রুটিতে লিখবে, তারপরে
ক .

আদেশ ইল y এবং ইল l দেওয়া অপারেন্ড c99 তাৎপর্যপূর্ণ; আবেদন করা হবে
হয় তার নিজস্ব প্রদান প্রধান() ফাংশন বা নিশ্চিত করুন ইল y তার আগে বসেছে ইল l.

ডিবাগ করা দ্য পার্সার
পার্সার দ্বারা উত্পন্ন yacc এটিতে ডায়াগনস্টিক সুবিধা থাকবে যা ঐচ্ছিকভাবে হতে পারে
হয় কম্পাইল টাইমে বা রানটাইমে সক্ষম (যদি কম্পাইলের সময় সক্রিয় করা হয়)। দ্য
রানটাইম ডিবাগিং কোডের সংকলন YYDEBUG-এর নিয়ন্ত্রণে, একটি প্রিপ্রসেসর
প্রতীক যদি YYDEBUG-এর একটি অ-শূন্য মান থাকে, তাহলে ডিবাগিং কোড অন্তর্ভুক্ত করা হবে। যদি এটি
মান শূন্য, কোড অন্তর্ভুক্ত করা হবে না।

পার্সারে যেখানে ডিবাগিং কোড অন্তর্ভুক্ত করা হয়েছে, বহিরাগত কোন int yydebug হতে পারে
রানটাইমে ডিবাগিং চালু (শূন্য মান সহ) এবং বন্ধ (শূন্য মান) করতে ব্যবহৃত হয়। দ্য
এর প্রাথমিক মান yydebug শূন্য হবে।

কখন −t নির্দিষ্ট করা আছে, কোড ফাইলটি এমনভাবে তৈরি করা হবে, যদি YYDEBUG ইতিমধ্যেই না থাকে
সংকলন সময়ে সংজ্ঞায়িত (ব্যবহার করে c99 -ডি YYDEBUG বিকল্প, উদাহরণস্বরূপ), YYDEBUG করবে
স্পষ্টভাবে সেট করা 1. কখন −t নির্দিষ্ট করা নেই, কোড ফাইলটি এমনভাবে তৈরি করা হবে যে,
যদি YYDEBUG ইতিমধ্যেই সংজ্ঞায়িত করা না থাকে, তাহলে এটি স্পষ্টভাবে শূন্যে সেট করা হবে।

ডিবাগিং আউটপুট বিন্যাস অনির্দিষ্ট কিন্তু অন্তত যথেষ্ট তথ্য অন্তর্ভুক্ত
স্থানান্তর নির্ধারণ করতে এবং ক্রিয়াগুলি হ্রাস করতে এবং ইনপুট চিহ্নগুলি। এটি প্রদান করে
ত্রুটি পুনরুদ্ধার সম্পর্কে তথ্য।

আলগোরিদিম
পার্সার দ্বারা নির্মিত yacc একটি বাস্তবায়ন করে LALR(1) নথিভুক্ত হিসাবে অ্যালগরিদম পার্সিং
সাহিত্য. পার্সারটি টেবিল-চালিত বা সরাসরি-কোডেড কিনা তা অনির্দিষ্ট।

দ্বারা উত্পন্ন একটি পার্সার yacc থেকে কখনই ইনপুট চিহ্নের অনুরোধ করবে না yylex() যখন a
রাজ্য যেখানে ত্রুটি ক্রিয়া ছাড়া অন্য কাজগুলি হল একটি একক নিয়ম দ্বারা হ্রাস৷

পার্সিং তত্ত্বের সাহিত্য এই ধারণাগুলিকে সংজ্ঞায়িত করে।

সীমা
সার্জারির yacc ইউটিলিটির বেশ কয়েকটি অভ্যন্তরীণ টেবিল থাকতে পারে। এই টেবিলের জন্য সর্বনিম্ন সর্বোচ্চ
নিম্নলিখিত টেবিলে দেখানো হয়. এই মানগুলির সঠিক অর্থ হল বাস্তবায়ন-
সংজ্ঞায়িত বাস্তবায়ন এই মান এবং মধ্যে সম্পর্ক সংজ্ঞায়িত করবে
সেগুলি এবং যেকোন ত্রুটির বার্তা যা বাস্তবায়নের ফলে উত্পন্ন হতে পারে যদি এটি ফুরিয়ে যায়
কোনো অভ্যন্তরীণ কাঠামোর জন্য স্থান। একটি বাস্তবায়ন এই সম্পদের গ্রুপ একত্রিত করতে পারে
যতক্ষণ না ব্যবহারকারীর জন্য উপলব্ধ মোট যোগফলের নিচে না পড়ে ততক্ষণ পর্যন্ত একটি একক পুলে
এই বিভাগ দ্বারা নির্দিষ্ট মাপ.

টেবিল: অভ্যন্তরীণ সীমা in yacc

┌───────────┬─────────┬─────────────────────────── ─────┐
│ │ নূন্যতম │ │
সীমাসর্বাধিকবিবরণ
├───────────┼─────────┼─────────────────────────── ─────┤
│{NTERMS} │ 126 │ টোকেনের সংখ্যা। │
│{NNONTERM} │ 200 │ অ-টার্মিনালের সংখ্যা। │
│{NPROD} │ 300 │ নিয়মের সংখ্যা। │
│{NSTATES} │ 600 │ রাজ্যের সংখ্যা। │
│{MEMSIZE} │ 5200 │ নিয়মের দৈর্ঘ্য। মোট │
│ │ │ দৈর্ঘ্য, নামে (টোকেন এবং │
│ │ │ অ-টার্মিনাল), সমস্ত │
│ │ │ ব্যাকরণের নিয়ম। │
│ │ │ বাম-পাশ │ এর জন্য গণনা করা হয়
│ │ │ প্রতিটি নিয়ম, │ না হলেও
│ │ │ স্পষ্টভাবে পুনরাবৃত্তি, │ হিসাবে
│ │ │ উল্লেখ করা হয়েছে ব্যাকরণ বিধি in
│ │ │ yacc. │
│{ACTSIZE} │ 4000 │ কর্মের সংখ্যা। ``ক্রিয়া'' │
│ │ │ এখানে (এবং বর্ণনায় │
│ │ │ ফাইল) পার্সার অ্যাকশন │ উল্লেখ করুন
│ │ │ (স্থানান্তর, হ্রাস, ইত্যাদি) নয় │
│ │ │ থেকে │ এ সংজ্ঞায়িত শব্দার্থিক ক্রিয়া
│ │ │ ব্যাকরণ বিধি in yacc. │
└───────────┴─────────┴─────────────────────────── ─────┘

প্রস্থান করুন স্থিতি


নিম্নলিখিত প্রস্থান মান ফেরত দেওয়া হবে:

0 সফল সমাপ্তি।

>0 একটি ত্রুটি ঘটেছে৷

পরিণতি OF ত্রুটি


কোনো ত্রুটির সম্মুখীন হলে, রান বাতিল করা হয় এবং yacc একটি নন-জিরো স্ট্যাটাস দিয়ে প্রস্থান করে।
আংশিক কোড ফাইল এবং হেডার ফাইল উত্পাদিত হতে পারে. সারসংক্ষেপ তথ্য
বর্ণনা ফাইল সবসময় উত্পাদিত হবে যদি −v পতাকা উপস্থিত।

সার্জারির অনুসরণ বিভাগে হয় তথ্যপূর্ণ.

আবেদন , USAGE


ঐতিহাসিক বাস্তবায়নে নাম নিয়ে দ্বন্দ্ব দেখা দেয় yacc.tmp, yacc.acts,
yacc.debug, y.tab.c, y.tab.h, এবং y.আউটপুট যদি একাধিক অনুলিপি yacc এ চলছে
এক সময়ে একক ডিরেক্টরি। দ্য −খ এই সমস্যাটি কাটিয়ে ওঠার জন্য বিকল্প যোগ করা হয়েছে। দ্য
একাধিক অনুমতি সম্পর্কিত সমস্যা yacc একই ফাইলে পার্সার স্থাপন করা হতো
a যোগ করে সম্বোধন করা হয়েছে −p আগের হার্ড কোডেড ওভাররাইড করার বিকল্প yy পরিবর্তনশীল উপসর্গ।

বর্ণনা −p বিকল্প ফাংশন এবং পরিবর্তনশীল নামের ন্যূনতম সেট নির্দিষ্ট করে
একাধিক পার্সারকে একত্রে সংযুক্ত করা হলে এটি দ্বন্দ্ব সৃষ্টি করে। YYSTYPE এর দরকার নেই
পরিবর্তিত পরিবর্তে, প্রোগ্রামার ব্যবহার করতে পারেন −খ বিভিন্ন পার্সারের জন্য হেডার ফাইল দিতে
বিভিন্ন নাম, এবং তারপর ফাইল সঙ্গে yylex() একটি প্রদত্ত পার্সার জন্য অন্তর্ভুক্ত করতে পারেন
যে পার্সার জন্য হেডার. নাম যেমন yyclearerr পরিবর্তন করতে হবে না কারণ তারা
শুধুমাত্র কর্মে ব্যবহৃত হয়; তাদের যোগসূত্র নেই। এটা সম্ভব যে একটি
বাস্তবায়নের অন্যান্য নাম রয়েছে, হয় অভ্যন্তরীণ বিষয়গুলি যেমন বাস্তবায়নের জন্য
yyclearerr, অথবা অ-মানক বৈশিষ্ট্য প্রদান করে যা এটি পরিবর্তন করতে চায়৷ −p.

সাধারণভাবে একটি বাইনারি অপারেটর হিসাবে একই টোকেন যে Unary অপারেটর তাদের প্রয়োজন
অগ্রাধিকার সমন্বয় করা হয়েছে। এই দ্বারা পরিচালিত হয় % prec এর সাথে যুক্ত উপদেষ্টা প্রতীক
বিশেষ ব্যাকরণ নিয়ম যে unary অপারেটর সংজ্ঞায়িত. (দেখা ব্যাকরণ বিধি in yacc.)
ইউনারি অপারেটরদের জন্য এই অপারেটর ব্যবহার করার জন্য অ্যাপ্লিকেশনের প্রয়োজন নেই, কিন্তু ব্যাকরণের জন্য
যে এটির প্রয়োজন নেই বিরল।

উদাহরণ


অ্যাক্সেস yacc লাইব্রেরি লাইব্রেরি অনুসন্ধান অপারেন্ডের সাথে প্রাপ্ত করা হয় c99। ব্যবহার করতে
yacc লাইব্রেরি প্রধান():

c99 y.tab.c ইল y

উভয় আইন লাইব্রেরি এবং yacc লাইব্রেরি ধারণ করে প্রধান()। অ্যাক্সেস করতে yacc প্রধান():

c99 y.tab.c lex.yy.c ইল y ইল l

এটি নিশ্চিত করে যে yacc লাইব্রেরি প্রথমে অনুসন্ধান করা হয়, যাতে এটি প্রধান() ব্যবহৃত হয়.

.তিহাসিক yacc লাইব্রেরিতে দুটি সাধারণ ফাংশন রয়েছে যা সাধারণত কোড করা হয়
অ্যাপ্লিকেশন প্রোগ্রামার দ্বারা। এই ফাংশন নিম্নলিখিত কোড অনুরূপ:

# অন্তর্ভুক্ত
কোন int প্রধান (অকার্যকর)
{
extern কোন int yyparse();

সেটলোকেল(LC_ALL, "");

/* যদি নিম্নলিখিত পার্সারটি লেক্স দ্বারা তৈরি করা হয়,
LC_CTYPE নিশ্চিত করতে আবেদন অবশ্যই সতর্কতা অবলম্বন করবে
এবং LC_COLLATE POSIX লোকেলে সেট করা আছে। */
(অকার্যকর) yyparse();
রিটার্ন (0);
}

#অন্তর্ভুক্ত

int yyerror(const char *msg)
{
(অকার্যকর) fprintf(stderr, "%s\n", msg);
রিটার্ন (0);
}

যুক্তিসহ ব্যাখ্যা


এর রেফারেন্স রেফারেন্সড কাগজপত্র পার্সার নির্মাণে সহায়ক হতে পারে
জেনারেটর উল্লেখিত DeRemer এবং Pennello নিবন্ধ (সহ এটি কাজ করে
রেফারেন্স) এই ভলিউমের সাথে সামঞ্জস্যপূর্ণ পার্সার তৈরি করার একটি কৌশল বর্ণনা করে
POSIX.1-2008। এই এলাকায় কাজ চলতে থাকে, তাই বাস্তবায়নকারীদের পরামর্শ করা উচিত
কোনো নতুন বাস্তবায়ন করার আগে বর্তমান সাহিত্য। মূল Knuth নিবন্ধ হল
এই ধরণের পার্সারের জন্য তাত্ত্বিক ভিত্তি, তবে এটি যে টেবিলগুলি তৈরি করে তা অবাস্তব
যুক্তিসঙ্গত ব্যাকরণের জন্য বড় এবং ব্যবহার করা উচিত নয়। ``সমতুল্য' শব্দচয়ন
ইচ্ছাকৃতভাবে নিশ্চিত করা যে সেরা টেবিল যে LALR(1) তৈরি করা যেতে পারে।

ব্যাকরণের শ্রেণী, উৎপন্ন করার জন্য প্রয়োজনীয় অ্যালগরিদমগুলির মধ্যে বিভ্রান্তি রয়েছে
পার্সার্স, এবং ভাষা পার্স করার জন্য প্রয়োজনীয় অ্যালগরিদম। তারা সব যুক্তিসঙ্গত
অর্থোগোনাল বিশেষ করে, একটি পার্সার জেনারেটর যা সম্পূর্ণ পরিসীমা গ্রহণ করে LR(২০১০)
ব্যাকরণগুলিকে গ্রহণ করে এমন একটির চেয়ে জটিল টেবিল তৈরি করতে হবে না এসএলআর(1) (ক
LR ব্যাকরণের অপেক্ষাকৃত দুর্বল শ্রেণী) এমন একটি ব্যাকরণের জন্য যা হতে পারে এসএলআর(1)। যেমন একটি
বাস্তবায়নের ক্ষেত্রেও চিনতে হবে না; টেবিল কম্প্রেশন ফলন করতে পারেন এসএলআর(২০১০)
সারণী (অথবা তার চেয়েও ছোট) যে ব্যাকরণটি তা স্বীকৃতি না দিয়ে এসএলআর(1)। দ্য
একটি গতি LR(1) যে কোনো শ্রেণীর জন্য পার্সার টেবিলের উপস্থাপনার উপর বেশি নির্ভরশীল
ক্লাসের চেয়ে কমপ্রেশন (বা কোড জেনারেশন যদি সরাসরি পার্সার তৈরি হয়)
ব্যাকরণের যা টেবিল জেনারেটর পরিচালনা করে।

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

সম্ভাব্য লেখকদের সতর্ক করা হয় যে রেফার করা DeRemer এবং Pennello নিবন্ধ
পূর্বে উদ্ধৃত একটি বাগ সনাক্ত করে (এর গণনার একটি অতি-সরলীকরণ LALR(২০১০)
কিছুতে) lookahead সেট LALR(1) অ্যালগরিদম বিবৃতি যা এটির আগে
প্রকাশনা তাদের সেই কাগজের পাশাপাশি বর্তমান প্রাসঙ্গিক খোঁজার জন্য সময় নেওয়া উচিত
কাজ, বিশেষ করে আহো এর।

সার্জারির −খ অনুমতি দেওয়ার জন্য একটি পোর্টেবল পদ্ধতি প্রদান করার জন্য বিকল্প যোগ করা হয়েছে yacc কাজ করার
একই ডিরেক্টরিতে একাধিক পৃথক পার্সার। যদি একটি ডিরেক্টরিতে একাধিক থাকে
yacc ব্যাকরণ, এবং উভয় ব্যাকরণ একই সময়ে নির্মিত হয় (উদাহরণস্বরূপ, ক
সমান্তরাল করা প্রোগ্রাম), দ্বন্দ্ব ফলাফল। যদিও সমাধান ঐতিহাসিক অনুশীলন নয়,
এটি ঐতিহাসিক বাস্তবায়নে একটি পরিচিত ঘাটতি সংশোধন করে। অনুরূপ পরিবর্তন ছিল
ফাইলের নাম উল্লেখ করা সমস্ত বিভাগে তৈরি y.tab.c (এখন ``কোড ফাইল''),
y.tab.h (এখন ``হেডার ফাইল''), এবং y.আউটপুট (এখন ``বর্ণনা ফাইল'')।

জন্য ব্যাকরণ yacc ইনপুট সিস্টেম ভি ডকুমেন্টেশনের উপর ভিত্তি করে। পাঠ্য বিবরণ
সেখানে দেখায় যে ';' নিয়মের শেষে প্রয়োজন। ব্যাকরণ এবং
বাস্তবায়ন এই প্রয়োজন হয় না. (এর ব্যবহার C_IDENTIFIER ঘটতে একটি হ্রাস কারণ
যথাস্থান.)

এছাড়াও, যে বাস্তবায়ন, যেমন নির্মাণ %টোকেন a দ্বারা সমাপ্ত করা যেতে পারে
, কিন্তু এটি ব্যাকরণ দ্বারা অনুমোদিত নয়৷ কীওয়ার্ড যেমন %টোকেন পারেন
এছাড়াও বড় হাতের অক্ষরে উপস্থিত হয়, যা আবার আলোচনা করা হয়নি। অধিকাংশ জায়গায় যেখানে '%' ব্যবহৃত হয়,
প্রতিস্থাপন করা যেতে পারে, এবং কিছু প্রতীকের জন্য বিকল্প বানান আছে
(উদাহরণ স্বরূপ, % বাম হতে পারে "%<" অথবা এমনকি "\<").

ঐতিহাসিকভাবে,ট্যাগ> ছাড়া যেকোনো অক্ষর থাকতে পারে '>', সাদা স্থান সহ, মধ্যে
বাস্তবায়ন. যাইহোক, যেহেতু ট্যাগ একটি ISO C স্ট্যান্ডার্ড ইউনিয়ন সদস্য উল্লেখ করতে হবে, মধ্যে
অনুরূপ বাস্তবায়ন অনুশীলনের জন্য শুধুমাত্র ISO C-এর জন্য অক্ষরের সেট সমর্থন করতে হবে
এই প্রসঙ্গে স্ট্যান্ডার্ড শনাক্তকারী।

কিছু ঐতিহাসিক বাস্তবায়ন কর্মগুলি গ্রহণ করতে পরিচিত যেগুলি a দ্বারা সমাপ্ত হয়
সময়কাল ঐতিহাসিক বাস্তবায়ন প্রায়ই অনুমতি দেয় '$' নামে একটি সামঞ্জস্যপূর্ণ বাস্তবায়ন
এই আচরণের কোনটি সমর্থন করার প্রয়োজন নেই।

কখন ব্যবহার করবেন তা নির্ধারণ করা % prec এর আচরণ নির্দিষ্ট করতে অসুবিধা চিত্রিত করে yacc.
এমন পরিস্থিতি হতে পারে যার মধ্যে ব্যাকরণ না, কঠোরভাবে বলতে গেলে, ভুল, এবং এখনও
yacc এটা দ্ব্যর্থহীনভাবে ব্যাখ্যা করতে পারে না। ব্যাকরণে অস্পষ্টতার সমাধান করা যায়
অনেক ক্ষেত্রে অতিরিক্ত তথ্য প্রদান করে সমাধান করা হয়, যেমন ব্যবহার করে % প্রকার or
%মিলন ঘোষণা এটি প্রায়শই সহজ হয় এবং এটি সাধারণত একটি ছোট পার্সার গ্রহণ করে
এই বিকল্প যখন এটি উপযুক্ত।

রানটাইম ডিবাগিং কোড ছাড়াই উত্পাদিত একটি প্রোগ্রামের আকার এবং কার্যকর করার সময়
ঐতিহাসিক বাস্তবায়নে সাধারণত ছোট এবং সামান্য দ্রুত।

বিভিন্ন ঐতিহাসিক বাস্তবায়ন থেকে পরিসংখ্যান বার্তা নিম্নলিখিত ধরনের অন্তর্ভুক্ত
তথ্য:

n/512 টার্মিনাল, n/300 নন-টার্মিনাল
n/600 ব্যাকরণের নিয়ম, n/1500 রাজ্য
n স্থানান্তর/কমাও, n রিপোর্ট করা দ্বন্দ্ব কমানো/কমান
n/350 ওয়ার্কিং সেট ব্যবহৃত
স্মৃতি: রাজ্য, ইত্যাদি n/15000, পার্সার n/ 15000
n/600 স্বতন্ত্র লুকআহেড সেট
n অতিরিক্ত বন্ধ
n শিফট এন্ট্রি, n ব্যতিক্রম
n এন্ট্রি যান
n এন্ট্রিগুলি ডিফল্টরূপে সংরক্ষিত
অপ্টিমাইজার স্পেস ব্যবহৃত: ইনপুট n/15000, আউটপুট n/ 15000
n টেবিল এন্ট্রি, n শূন্য
সর্বাধিক বিস্তার: n, সর্বোচ্চ অফসেট: n

বর্ণনা ফাইলে অভ্যন্তরীণ টেবিলের রিপোর্ট বাস্তবায়ন-সংজ্ঞায়িত রেখে দেওয়া হয়
কারণ এই সীমার সমস্ত দিকগুলিও বাস্তবায়ন-সংজ্ঞায়িত। কিছু বাস্তবায়ন
গতিশীল বরাদ্দ কৌশল ব্যবহার করতে পারে এবং রিপোর্ট করার জন্য কোন নির্দিষ্ট সীমা মান নেই।

এর বিন্যাস y.আউটপুট ফাইল দেওয়া হয়নি কারণ বিন্যাসের স্পেসিফিকেশন ছিল না
অ্যাপ্লিকেশন পোর্টেবিলিটি উন্নত করতে দেখা যায়। তালিকা প্রাথমিকভাবে মানুষের সাহায্য করার উদ্দেশ্যে করা হয়
ব্যবহারকারীরা পার্সার বুঝতে এবং ডিবাগ করে; ব্যাবহার y.আউটপুট একটি সঙ্গতিপূর্ণ অ্যাপ্লিকেশন স্ক্রিপ্ট দ্বারা
অস্বাভাবিক হবে। অধিকন্তু, বাস্তবায়নগুলি সামঞ্জস্যপূর্ণ আউটপুট তৈরি করেনি এবং না
জনপ্রিয় বিন্যাস স্পষ্ট ছিল. বাস্তবায়নের দ্বারা নির্বাচিত বিন্যাসটি মানবিক হওয়া উচিত-
পঠনযোগ্য, প্রয়োজনীয়তা ছাড়াও এটি একটি পাঠ্য ফাইল।

স্ট্যান্ডার্ড ত্রুটি প্রতিবেদনগুলি বিশেষভাবে বর্ণনা করা হয় না কারণ সেগুলি খুব কমই ব্যবহার করা হয়
অ্যাপ্লিকেশনের সাথে সামঞ্জস্যপূর্ণ এবং বাস্তবায়ন সীমাবদ্ধ করার কোন কারণ ছিল না।

কিছু বাস্তবায়ন স্বীকৃতি "=" এর সমতুল্য '{' কারণ এটি ঐতিহাসিকভাবে দেখা যায়
ডকুমেন্টেশন এই নির্মাণ স্বীকৃত এবং অপ্রচলিত হিসাবে নথিভুক্ত হিসাবে অনেক আগে হিসাবে
1978, উল্লেখ করা হয়েছে ইয়াক: এখনো অন্য কম্পাইলার-কম্পাইলার. POSIX.1-2008-এর এই ভলিউম
এটিকে অপ্রচলিত হিসাবে ছেড়ে দেওয়া এবং বাদ দেওয়া বেছে নেওয়া হয়েছে৷

মাল্টি-বাইট অক্ষরগুলি আভিধানিক বিশ্লেষক দ্বারা স্বীকৃত হওয়া উচিত এবং টোকেন হিসাবে ফেরত দেওয়া উচিত।
সেগুলিকে মাল্টি-বাইট অক্ষর আক্ষরিক হিসাবে ফেরত দেওয়া উচিত নয়৷ টোকেন ভুল যে ব্যবহার করা হয়
ত্রুটি পুনরুদ্ধারের জন্য সাধারণত ঐতিহাসিক বাস্তবায়নে মান 256 বরাদ্দ করা হয়।
সুতরাং, টোকেন মান 256, যা অনেক মাল্টি-বাইট অক্ষর সেটে ব্যবহৃত হয়, তা নয়
ব্যবহারকারী-সংজ্ঞায়িত টোকেনের মান হিসাবে ব্যবহারের জন্য উপলব্ধ।

ভবিষ্যতের দিকনির্দেশ


কোনটিই নয়।

onworks.net পরিষেবা ব্যবহার করে yaccposix অনলাইন ব্যবহার করুন


বিনামূল্যে সার্ভার এবং ওয়ার্কস্টেশন

উইন্ডোজ এবং লিনাক্স অ্যাপ ডাউনলোড করুন

  • 1
    itop - ITSM CMDB ওপেনসোর্স
    itop - ITSM CMDB ওপেনসোর্স
    আইটি অপারেশন পোর্টাল: একটি সম্পূর্ণ খোলা
    উৎস, ITIL, ওয়েব ভিত্তিক পরিষেবা
    একটি সম্পূর্ণ সহ ব্যবস্থাপনা টুল
    কাস্টমাইজযোগ্য CMDB, একটি হেল্পডেস্ক সিস্টেম এবং
    একজন দলিল মানুষ...
    এটি ডাউনলোড করুন - ITSM CMDB ওপেনসোর্স
  • 2
    Clementine
    Clementine
    ক্লেমেন্টাইন একটি মাল্টি-প্ল্যাটফর্ম সঙ্গীত
    প্লেয়ার এবং লাইব্রেরি সংগঠক দ্বারা অনুপ্রাণিত
    Amarok 1.4. এটি একটি দ্রুত এবং আছে
    সহজে ব্যবহারযোগ্য ইন্টারফেস, এবং আপনাকে অনুমতি দেয়
    অনুসন্ধান এবং...
    ক্লেমেন্টাইন ডাউনলোড করুন
  • 3
    XISMuS
    XISMuS
    মনোযোগ: ক্রমবর্ধমান আপডেট 2.4.3 আছে
    মুক্তি পেয়েছে!! আপডেট যে কোনো জন্য কাজ করে
    পূর্ববর্তী 2.xx সংস্করণ। আপগ্রেড করলে
    সংস্করণ v1.xx থেকে, ডাউনলোড করুন এবং
    আমি ...
    XISMuS ডাউনলোড করুন
  • 4
    facetracknoir
    facetracknoir
    মডুলার হেডট্র্যাকিং প্রোগ্রাম যে
    একাধিক ফেস-ট্র্যাকার, ফিল্টার সমর্থন করে
    এবং গেম-প্রটোকল। ট্র্যাকারদের মধ্যে
    এসএম ফেসএপিআই, এআইসি ইনর্শিয়াল হেড
    ট্র্যাকার...
    ফেসট্র্যাকনয়ার ডাউনলোড করুন
  • 5
    পিএইচপি QR কোড
    পিএইচপি QR কোড
    পিএইচপি QR কোড হল ওপেন সোর্স (LGPL)
    QR কোড তৈরির জন্য লাইব্রেরি,
    2-মাত্রিক বারকোড। উপর ভিত্তি করে
    libqrencode C লাইব্রেরি, এর জন্য API প্রদান করে
    QR কোড বারক তৈরি করা হচ্ছে...
    পিএইচপি কিউআর কোড ডাউনলোড করুন
  • 6
    ফ্রিসিভ
    ফ্রিসিভ
    ফ্রিসিভ একটি ফ্রি টার্ন-ভিত্তিক
    মাল্টিপ্লেয়ার কৌশল খেলা, যার মধ্যে প্রতিটি
    খেলোয়াড় একটি নেতা হয়
    সভ্যতা, পেতে যুদ্ধ
    চূড়ান্ত লক্ষ্য: হতে...
    Freeciv ডাউনলোড করুন
  • আরও »

লিনাক্স কমান্ডগুলি

Ad