X بستن تبلیغات
X بستن تبلیغات
header
متن مورد نظر

مقدمه ای بر تحلیل نحوی جهت دار

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

هر برنامه نویسی به داده های ورودی ها می پردازد . معمولا پردازش داده های ورودی به آنچه که مقاوم می باشد ، و اغلب حتی بر انچه که دنبال می کند ، ورودی تحت بررسی بستگی دارد . به منظور دانستن اینکه چگونه پردازش داده تجزیه نامیده می شود این تبعیتها را دنبال می کنیم . اغلب هنگامی که اول برنامه را می نویسیم دنبال کردن تبعیتهای ساده نسبتا آسان است . همان طور ک برنامه توسعه می یابد ، همانطور که ویژگی های جدید اضافه می شوند و خطاها ثابت هستند ، اغلب متوقف کردن تبعیتها ساده می باشد. چون دنبال کردن یا حتی تشخیص دادن تمام موارد خاص سخت است پردازش ورودی در دسری شده است .

هر برنامه نویسی به داده های ورودی ها می پردازد . معمولا پردازش داده های ورودی به آنچه که مقاوم می باشد ، و اغلب حتی بر انچه که دنبال می کند ، ورودی تحت بررسی بستگی دارد . به منظور دانستن اینکه چگونه پردازش داده تجزیه نامیده می شود این تبعیتها را دنبال می کنیم . اغلب هنگامی که اول برنامه را می نویسیم دنبال کردن تبعیتهای ساده نسبتا آسان است . همان طور ک برنامه توسعه می یابد ، همانطور که ویژگی های جدید اضافه می شوند و خطاها ثابت هستند ، اغلب متوقف کردن تبعیتها ساده می باشد. چون دنبال کردن یا حتی تشخیص دادن تمام موارد خاص سخت است پردازش ورودی در دسری شده است . تغییر دادن برنامه باعث می شود که مسائل پیش بینی نشده و خطرات نگهداشت برنامه از کنترل خارج شوند . تحلیل نحوی جهت دار تکنیکی است برای خطاب قرار دادن این مشکلات است . در تحلیل نحوی جهت دار ، بخش ورودی برنامه بوسیله الگوریتم استاندارد ، از توصیف سطح بالا درباره ساختار داده ورودی به طور خود کار ساخته شده است . دستورالعملهای اجرا کردن پردزاش ضروری داده وابسته به توصیف در راهی مناسب است . شرحی که رویه ای نمی باشد معمولا برای نوشتن و تغییر دادن دستورالعمل معادل برنامه و احتمالا خطاهای حفاظی آسانتر است برای خواندن و حفظ کردن آسانتر است . برای استفاده شدن در برنامه های ضروری دیگر همان ورودی  آسان است ، بنابراین رابطهای یکسان را تایید می کند . همچنین تکنیک با جدا سازی ورودی و پردازش مولفه ها و فراهم آوردن ساختار واحدی ، طبیعی در کل برنامه ساده می شود. برای استفاده از تحلیل نحوی جهت دار نخست شرح داده های ورودی که دستور زبان نامیده می شوند را بنویسید. فایلی که شامل دستور زبان است فایل نحوی نامیده می شود .

سپس مولد تجزیه گر ، از قبیل Ana Gvam   می تواند از فایل نحوی عملی ( یا برنامه ای ) را بوجود آورد که تجزیه گر نامیده می شود و به صورت C   یا C++   نوشته می شود . تجزیه گر تمام تبعیتها را در ورودی شما دنبال می کند ، عملهای خاص پردازه های کاهنده را فرا می خواند ، به واحدهای معین یا توالی های داده همانطور که با آنها مواجه می شود می پردازد . پردازه های کاهنده رمزی هستند که برای پردزاش کردن داده هایتان می نویسید در دستور زبان تان طوری به ساختار ها در ورودی تان پیوست می شوند که تجزیه گر دقیقا در زمانهای درست با داده های دقیقا درست آنها را فرا خواهد خواند . توجه کنید که با این تکنیک فقط باید شرح غیر رویه ای از ورودی فراهم آورید. جزئیات روند کنترل کاملا بوسیله تجزیه گر کنترل می شوند هنگامی که پردازه های کاهنده را می نویسید، کاملا می توانید روی آنچه که با داده انجام داده اید تمرکز کنید. برای مشخص کردن ساختار ورودی تان مجبور نیستید رمزتان را با گزینه ها و آزمایشها پر کنید. تجزیه گرهایی که با استفاده از مواد تجزیه گیر از قبیل Ana Gvam   ساخته اید ممکن است در برنامه های مستقل کامل شوند یا ممکن است به روالهای ورودی برای برنامه گسترده تر کمک کنند. ممکن است بعضی از برنامه ها بیشتر از یک تجزیه گر را به کار برند.

توصیف یک توالی ورودی

نوشتن دستور زبان شامل توصیف توالی های مورد قبول ورودی برای برنامه تان است ابزار توصیف یک توالی ورودی تولید نامیده میشود. تولیدات نشان می دهند که چگونه مولفه منطقی ورودی می تواند از توالی مؤلفه های بنیادی تر بوجود آید . تولیدی که تاریخ را توصیف می کند ممکن است به صورت زیر نوشته شود :

 سال و ویرگول ، روز ، اسم ماه ـــ تاریخ مولفه های ورودی شاخه ها نامیده می شوند . توالی مولفه ها در یک سمت از تولید قاعده دستور زبان یا قاعده برای رعایت اختصار  نامیده می شود همچنین نشانه های خاص در سمت راست قاعده عناصر قاعده نامیده می شوند . در سمت چپ تولید نشانه برای قاعده نشانه کاهنده نامیده می شود. ممکن است نشانه ها همانطور که از ارزشهای نحوی متمایز می شوند ، ارزشهای معنایی داشته باشند که می توانید در پردازه های کاهنده تان بکار برید. به عنوان مثال ، ارزش اسم ماه می تواند از گسترده صفر تا یازده یک عدد صحیح یا می تواند برای یک رشته اسکی اشاره گر باشد . ارزش روز می تواند از گسترده یک تا سیو یک عدد صحیح باشد . دستور زبان شامل شادی از چنین تولیداتی است که هر کدام می تواند برخی از مولفه های ورودی را بر حسب مولفه های دیگر توصیف کند و همچنین بسیاری از تولیدات را برای توصیف جریانهای ورودی کاملا پیچیده در نظر نمی گیرد.دستور زبان برای زبان C   ، به عنوان مثال حدود ۲۰۰ تولید نیاز دارد. برای برخی از مردم اصطلاح تولید گیج کننده است واز زبان شناسی نظری ناشی می شود که برای توصیف اینکه چگونه فرد ممکن است توالیها را تولید کند که مطابق با مجموعه ای از قواعد گرامری است استفاده می شود . شگفت اینکه ، استفاده عمده از فکر به تحلیل نحوی منجر شد که به ایجاد توالیهایی که قواعد گرامری را در رمزگشایی و تحلیل چنین توالیها ارضا می کند علاقه ای ندارد. با این همه ، در مثال بالا مناسب است بگوییم که تاریخ نشانه توالی از نشانه ها را تولید می کند که شامل اسم ماه ، روز ، ویرگول و سال است . همچنین ما می گوییم که توالی به تاریخ کاهش می یابد . ممکن است برای توصیف مولفه مشخص بیشتر از یک تولید وجود داشته باشد ، اگر بیشتر از یک راه وجود دارد ممکن است به صورت زیر نمایش داده شود: سال ، اسم ماه ، روز ـــ تاریخ که راه مشترک دیگری از نوشتن تاریخ را توصیف می کند . به عبارت دیگر ، نشانه کاهنده ممکن است شماری از قواعد مختلف گرامری را تولید کند . نشانه هایی که در سمت چپ یک یا چند تولید ظاهر می شوند نشانه های غیر پایانه نامیده می شوند و نشانه هایی که فقط در سمتهای راست تولیدات ظاهر می شوند نشانه های پایا نامیده می شوند . نشانه های پایانه واحدهایی هستند که واقعا در ورودی به طور طبیعی ظاهر می شوند هنگامی که توالی نشانه ها که مطابق با سمت راست تولید است در ورودی دیده می شود نشانه های غیر پایانه تشخیص داده می شوند . هنگامی که Ana Gvam   دستور زبان را تحلیل می کند ، به هر نشانه ای که در دستور زبان یافته است شماری از نشانه های تک را اختصاص می دهد. ممکن است نشانه های غیر پایانه ، از قبیل تاریخ در مثال بالا ، در هر قاعده دستور زبان ظاهر شوند چنانکه گویی نشانه های ورودی بودند . نشانه درست چپ تولید حتی می تواند در سمت راست هر ظاهر شود. چنین تولیدی تولید بازگشتی نامیده می شود . هنگامی که نشانه غیرپایانه در سمت راست تولید ظاهر می شود ، ممکن است در این متن از طریق قواعد دستور زبانی که تولید می کند نمایش داده شود . دستور زبان های توصیف شده به این طریق دستور زبانهای مستقل از متن نامیده می شوند و چون برای قواعدی که نشانه تولید می کند محدودیت متنی وجود ندارد می توانند در هر متن معین بکار روند . ممکن است تولیدات بازگشتی یا در بازگشتی چپ یا بازگشتی راست باشند . تولیدات بازگشتی چپ تولیداتی هستند که غیر پایانه تعریف شده را از راه بازگشتی به عنوان نخستین عنصر در قاعده بازگشت ظاهر می کنند. تولیدات بازگشتی راست تولیداتی هستند که باری آنها غیر پایانه آخرین عنصر است . اگر تولید در هر جای دیگری ظاهر شود گفته می شود که بازشگتی مرکزی می باشد. همچنین هر نشانه غیر پایانه ای که تولید بازگشتی دارد حداقل باید یک تولید غیر بازگشتی ساده داشته باشد . در غیر اینصورت ، ممکن نیست که توالی متناهی نشانه های پایانه را از نشانه غیر پایانه بوجود آورد. همچنین هنگامی که یکی از نشانه ها در سمت راست تولید خود مستلزم تولیدی باشد که نشانه را در چپ در بر دارد ممکن است بازگشت در دستور زبان بر طور تلویحی اتفاق افتد. گاهی اوقات ممکن است چنین بازگشت تلوحی سطوح متعددی از تولیدات را در برداشته باشد . بازگشت تلویحی معمولا در توصیف ساختهایی از قبیل عبارتهای حسابی یا ساختار قطعه ای زبانهای برنامه نویسی روی میدهد. دستور زبانها مسلما می توانند سطوح متعدد ساختار را با توالیهای ورودی که توصیف می کنند وفق دهند. باید در بالا نشانه واحدی وجود داشته باشد که تمام ورودی را در بر گیرد . این نشانه ویژه به طرق مختلف نشانه دستور زبان ، نشانه هدف یا نشانه شروع نامیده می شود. Ana Gvam   به شما اجازه می دهد که نشانه های پایانه را به عنوان کاراکترهای اسکی ، یا حتی مجموعه هایی از کاراکترهای اسکی در سمت راست دستور زبان مشخص کنید . بنابراین ، ممکن است   0 – 9   را برای نمایش مجموعه از ارقام اسکی یا A-Z   را برای نمایش مجموعه ای از حروف بزرگ بنویسید. ارزش معنایی چنین نشانه ای رمز کاراکتر اسکی است که در حقیقت در جریان ورودی ظاهر می شود. اگر مجموعه های متفاوتی که در دستور زبان تان بکار می برید تداخل داشته باشند ، ممکن است نشانه های پایانه را به طور مناسبی نمایش ندهند . در این حالت Ana Gvam   به طور خودکار و به نحوی شایسته دستور زبان شما را توسعه می دهد.

تجزیه گر چگونه کار می کند.

هدف تجزیه گر تطابق ورودی اش با ساختار نحوی مشخص شده توسط تولیداتی است که دستور زبان را بوجود می آورند . مولفه اصلی تجزیه گر یک میانگیر ورودی است ، گاهی اوقات به عنوان پشته ای تصور می شود که در آن نشانه ها تغییر می یابند ، یا همانطور که با ورودی روبرو می شوند، به صورت متوالی ذخیره می شوند . در همان زمانیکه نشانه در میانگیر ورودی ذخیره می شود، ارزش معنایی اش روی پشته ارزشی افزوده می شود. نشانه در میانگیر تغییر نمی یابد مگر اینکه معنی دهد یعنی مگر اینکه با قواعد دستور زبان و با ورودی که بر آن مقدم می باشد هماهنگ باشد . اگر ورودی معنی ندهد ، تجزیه گر به خطای نحوی اشاره می کند . به منظور مشخص کردن اینکه آیا نشانه معنی می دهد ، تجزیه گر نوعی از جدول تصمیم گیری دارد که برای هر یک از حالتها لیستی از نشانه های قابل قبول را فراهم می آورد . همچنین جدول مشخص می کند که با هر نشانه قابل قبول چه تجزیه گری استفاده می شود. هنگامی که جدول نشان میدهد که نشانه در میانگیر تغییر داده می شود ، یک حالت جدید را مشخص می کند . تجزیه گر حالت جاری از روی پشته حالت پشته می کند و به حالت جدید می پرد . بنابراین هر زمان که نشانه در میانگیر ورودی تغییر می یابد ، به تعداد حالت روی پشته حالت افزوده می شود . برای هر حالت از تجزیه گیر ، به جز حالت اولیه‌، نشانه تکی وجود دارد که باعث جهش به آن حالت خوانده شد . این نشانه ، برای حالت نشانه مشخصه نامیده می شود. هنگامی که سمت راست ترین ، یا جدیدترین نشانه ها در میانگیر ورودی دقیقا مطابق با سمت راست تولید باشند ، ممکن است تجزیه گر نشانه هایی را جایگزین کند که قاعده را با نشانه واحد ، نشانه در سمت چپ تولید تطبیق دهد. نشانه ای که توالی نشانه ها را جایگزین  می کند نشانه کاهنده نامیده می شود . مکانیسم واقعی کاهش کاملا مهم است . در همان زمانی که نشانه های ورودی از میانگیر ورودی حذف می شود ، شماره های حالت از پشته حالت برداشته می شود طوری که وقتی تمام نشانه های ورودی مطابق با قاعده حذف می شوند ، حالت تجزیه گیر به مقدار قبلی بر گردانده می شود که آن مقدار را در زمانی که نخستین نشانه در قاعده دیده می شد در برداشت همانطور که شماره های حالت از پشته حالت برداشته می شود ، مقادیر نشانه از پشته مقدار برداشته می شود . اگر قاعده پردازده کاهنده ای دارد ، متغیرهای موقتی با مقادیر برداشته شده از پشته بار می شوند و پردازده کاهنده نامیده می شوند . اکنون نشانه کاهنده در میانگیر ورودی طوری  تغییر می یابد که گویی یک نشانه ورودی بودند. اگر پردازه کاهنده نتیجه را بر گرداند به عنوان مقدار نشانه کاهنده در پشته مقدار تغییر می یابد . تجزیه گیر دوباره حالت جرای را پشته می کند و همانطور که از طریق جدلوهای تجزیه گیر مشخص می شود به حالت جدید می پرد. اگر در ورودی شما خطا وجود ندارد ، هنگامی که آخرین نشانه از  ورودی خوانده می شود ، در میانگیر ورودی تغییر می یابد ، و کاهش ها اجرا می شوند ، دقیقا یک نشانه ، نشانه دستور زبان یا هدف که کل ورودی شما را توصیف می کند در میانگیر ورودی وجود خواهد داشت . در این هنگام تجزیه گیر اعلام می کند که پایان یافته است . در هر زمان که قاعده نشانه ها را در میانگیر ورودی برابر می کند کاهشها الزاما رخ نمی دهند . اگر نشانه کاهنده معنی ندهد ، یعنی اگر هماهنگ با قواعد دستور زبان و با ورودی که بر آن مقدم می باشد نیست ، تجزیه گر کاهش را اجرا نخواهد کرد . فرض کنید نشانه هایی در ورودی وجود دارند که یکی از قواعد مشخص بالا را برای تاریخ تطبیق می دهد . کاهش رخ نخواهد داد مگر اینکه تاریخ یکی از نشانه های تجزیه گیر باشد که در حقیقت آن مرحله را در ورودی جستجو می کند . حتی هنگامی که نشانه کاهنده معنی میدهد ، هنوز موقعیتهایی وجود دارند که کاهش اتفاق نمی افتد ، فرض کنید دستور زبان شامل دو تا از تولیدات مشخص در بالا برای تاریخ به علاوه برای نمونه زیر است :

روز  و اسم ماه ـــ تاریخ

این تولید همانند اولی اما بدون مشخصه سال است . هنگامی که تجزیه گیر جهت دار از طریق دستور زبان با اسم ماه و روز مواجه شود ، نمی تواند بدون نگاه کردن بگوید که آیا تاریخ فرم طولانی را دارد یا تاریخ فرم کوتاه را . در چنین شرایطی تجزیه گر به نشانه بعدی که نشانه پیش بینی نامیده می شود نگاه می کند . اگر نشانه پیش بینی ویرگول نیست ، سپس ورودی مطمئنا تاریخ فرم طولانی نیست ، و برای کاهش دادن تولید فرم کوتاه مناسب است . فرض کنید که نشانه پیش بینی ویرگول بود و همچنین دستور زبان شامل تولید زیر بود :

زمان ـ ویرگول ـ تاریخ ــــ انتخاب

چون ویرگول می تواند مطابق این قاعده تاریخ را دنبال کند ، و همچنین می تواند مطابق نخستین تولید روز را دنبال کند ، غیر ممکن است با نگاه کردن به نشانه پیش بینی به سادگی مشخص کنیم که آیا تاریخ در فرم کوتاه یا در فرم طولانی مشخص شده بود. فرد می تواند به بعد از ویرگول نگاه کند تا ببیند آنچه که ویرگول را دنبال می کند قواعد را با زمان تطبیق می دهد یا با سال . اگر چه ساختن تجزیه گر هایی که این کار را انجام می دهند ممکن است ، اما معمولا امکان پذیرنیست . این نوع موقعیتها تعارض نامیده می شوند . هنگامی که Ana Gvam   دستور زبان تان را تحلیل می کند و امکانات متعدد را فراهم می آورد تا برای درست کردن آن به شما کمک کنند در باره متعارض ها در دستور زبانتان به شما اخطار می دهد.

یادداشتی درباره نشان گذاری :

دستور زبانهای مستقل از متن در آثار ادبی با استفاده از صورت بکوس ـ نویر گذاری یا نشانه BNF   به طور سنتی نمایش داده شده اند . در صورت بکوس نویر گذاری ، کاراکترهای خاصی که فراکاراکتر ها نامیده می شوند ، برای نقطه گذاری کردن تولیدات و دیگر کاراکترهای چاپ شدنی استفاده می شوند که برای نمایش خودشان دقیقا در نظر گرفته می شوند . نشانه های ذکر شده با ضمیمه کردن اسم در علامتهای زاویه دار مدلول می شوند . سمت چپ تولید با کاراکترها = :: از سمت راست متمایز می شوند . اگر چند تا از تولیدات یک سمت چپ را داشته ابشند میله عمودی | برای جدا کردن آنها استفاده می شود . عناصر قاعده دستور زبان رای نشان دادن اینکه یکی دیگری را دنبال می کند به سادگی کنار هم گذاشته می شوند . فاصله ها نادیده گرفته می شوند . بنابراین در نشانه BNF   ، نخستین تولید مشخص برای تاریخ در بالا می تواند (سال) ، ( روز ) ( اسم ماه ) = :: (تاریخ ) باشد.

Ana Gvam   با استفاده از برنامه نویسی معمولی نشان گذاری را هم خوانتر بکار می برد . بنابراین اسم های نشانه نیاز ندارند که داخل کروشه بشوند و کاراکترهای لفظی باید به نحوی شایسته نقل شوند . عناصر قواعد با ویرگول به هم پیوست می شوند . با استفاده از این روش ، نیازی برای فراکاراکترهای وجود ندارد و بوجود آوردن شماری از توسعه های مفید باری نشان گذاری ممکن میباشد.

پردازه های کاهنده :

البته ، دلیل تجزیه یک جریان ورودی تغییر کردن داده در جریان و پردازش آن در سبکی مفید است . ابزار اصلی برای انجام این کار پردازنده کاهنده است که اغلب به آن به عنوان عمل معنایی اشاره می شود . پردازه کاهنده قطعه ای از رمز C   است و هنگامی که قاعده خاص دستور زبان کاهش می یابد اجرا می شود اغلب ، پردازنده کاهنده مقداری را حساب می کند که مقدار معنایی نشانه کاهش می باشد. ورودی برای پردازه کاهنده شامل مقادیری از نشانه هاست که قاعده دستور زبان را بوجود می آورد.   Ana Gvam  به شما اجازه می دهد که اسم های متغیر C را به نشانه ها در قاعده دستور زبان طوری نسبت دهید که بتوانید در پردازه کاهنده به آنها اشاره کنید . برای نسبت دادن اسم متغیر C نشانه را در قاعده با علامت دو نقطه : و اسم متغیر C به سادگی دنبال کنید . پردازه های کاهنده ساده می توانند همانند عبارتهای C++ یا C نوشته شوند . در پایان قاعده ، نوشتن یک علامت تساوی و یک عبارت با واک و نقطه رو ، پایان می یابد به عنوان مثال :

<!–[if gte vml 1]> <!–[if !vml]–>\"\"<!–[endif]–>(int) hex digit                        `0 – 9 :  d               = d — `0`                                                

هنگامی که هر یک از این قواعد برابر می شوند ، مقدار نشانه در قاعده به متغیر موقتی نسبت داده می شود . عبارت سمت راست علامت تساوی ارزیابی می شود و مقدار عبارت به عنوان مقدار رقم شانزده شانزدهی که اظهار نمره یک int می باشد ذخیره می شود . این تولیدات ارقام شانزده شانزدهی را به عنوان کاراکترهای اسکلی مشخص می کنند، و بر حسب رمز  کاراکتر اسلی ، d مقدار دودوئی رقم را حساب می کنند. مقدار دودویی مقدار رقم شانزده شانزدهی می باشد . ارقام شانزده شانزدهی می توانند برای ایجاد اعداد شانزده شانزدهی با نوشتن تولیدات زیر ترکیب شوند :

 :dرقم شانزده  :n/a  عدد شانزده ـــ رقم شانزده شاندزدهی ـــ  عدد شانزده شانزدهی (int)

چندین نکته مهم در این مثال وجود دارند که باید به آنها توجه کنیم ، نخست ، پردازه های کاهنده از پایین به بالا اجرا می شوند ، یعنی ، پردازه کاهنده برای رقم شانزده شانزدهی قبل از هر پردازه کاهنده برای عدد شانزده شانزدهی اجرا می شود. دوم ، اگر برای تولید پردازه کاهنده وجود ندارد ، مقدار نخستین نشانه در قاعده به نشانه کاهنده نسبت داده می شود . بنابراین ، لازم نیست که برای عدد شانزده شانزدهی در تولید نخستین پردازه کاهنده ای را فراهم آوریم . سوم ، اگر پردازه های کاهنده تولید غیر بازگشتیی را داشته باشد که بازگشت را شروع می کند همیشه برای تولیدات بازگشتی بعد از پرداز ، کاهنده اجرا می شود و بالاخره ، هنگامی که یک توالی ورودی با استفاده از بازگشت چپ توصیف می شود ، عناصر توالی همانند این مثال از چپ به راست پردازش می شوند. اگر دوست دارید که عناصر توالی را از راست به چپ پردازش کنید ، ممکن است بازگشت راست را بکار برید . به عنوان مثال ، گاهی اوقات مناسب است که بخش کسری عدد دهدهی را مشخص کنیم بنابراین :

بخش کسری ( دو برابر)

`۰ – 9` : d             = ( d –` 0` ) /10.,   

`۰ – 9` : d / fraction port : f  = (d-`o` + f ) / 10` ,

در این حالت ارقام مقدم در پشته تجزیه به طور موقت ذخیره می شوند و سپس هنگامی که رقم آ÷ر یافت می شود بخش کسری از راست به چپ ارزیابی می شود . پردازه های کاهنده می توانند از عبارتهای ساده پیچیده تر باشند . ممکن است بعد از علامت تساوی بلوک اختیاری C یا رمز C++ را اضافه کنید که در آکولاد ضمیمه شده اند . برای برگرداندن مقدار معنایی برای نشانه کاهنده دستور بازگشت را به سادگی به کار برید ، البته ، پردازه های کاهنده منابع کاملی از C یا C++ را در اختیار خود دارند . ممکن است متغیرهای سراسری را تنظیم و بازپرسی کنند و تابع ها را به راحتی فرا خوانند. چون پردازه های کاهنده ای که می نویسید احتمالا به رمز پشتیبانی از قبیل ++ که شامل دستورات و اعلانات است نیاز خواهند داشت ، ممکن است رمز C یا C++ را در هر نقطه در فایل نحوی تان بگنجانید . فقط باید آن را در آکولاد ها ضمیمه کنید. و چنین رمزی رمز جاسازی شده C نامیده می شود . همچنین تمام رمز جاسازی شده C به فایل تجزیه گر کپی می شود ، و بر تمام پردازه های کاهنده تان مقدم می باشد.

ساختمان تجزیه گر:

به منوظر گرد کردن تجزیه گر در برنامه دایر تجزیه گر به پردازه های ورودی ، به علاوه تشخیص خطا و قابلیت بهبود نیاز دارد. Ana Gvam تعدادی از انتخابات در دسترس دارد که برای متناسب کردن نیازهای خاص تان درجه بالایی از انعطاف پذیری را در پیکربندی تجزیه گیر بر شما می دهد. تمام انتخابات با پیش فرضهای معقول فراهم می شوند ، طوری که با اطمینان بتوانید هر انتخابی را نادیده بگیرید تابه مشخصه هایی که آن را فراهم آورده نیاز پیدا کنید .

 

فراخوانی تجزیه گر :

Ana Gvam معمولا تجزیهگیر ها را به عنوان وظایفی که می توانید از جای دیگر در برنامه هایتان فرا خوانید پیکربندی می کند در این موقعیت ، تجزیه گیر را فرا می خوانید و ورودی اش را پردازش می کند و یا هنگامی که تکمیل شود بر می گردد یا بخاطر خطاها نمی تواند پیش رود . متناوبا اگر گزینه پیکربندی رویدادی را تنظیم کنید ، پردازشگرتان طوری پیکربندی خواهد شد که دو پردازه یک  ارزش آغازی دهنده و دو تجزیه گیر را برای فراخوانی دارید ، در پیکربندی رویداد با فرا خواندن ارزش آغازی دهنده تجزیه را آغاز کنید و سپس برای هر واحد ورودی تجزیه گیر را فرا خوانید با استفاده از حالت رویدادی پیکربندی تجزیه گیری مانند فیلتر کاملا آسان می شود وچند تا از تجزیه گیرها را طوری با هم زنجیره ای کنید که خروجی ازیک تجزیه گیر ورودی تجزیه گیر     باشد . برای پرداختن به ورودی پیچیده ای که مستقل از متن نیست این نوع تجزیه چند مرحله ای راهی مناسب است .

برقراری ارتباط با تجزیه گر:

وضعیت کامل تجزیه گر شما شامل ساختار داده ای واحد است که بلوک کنترل تجزیه گر نامیده می شود . تمام ارتباطات با تجزیه گر از طریق بلوک کنترل تجزیه گیر اتفاق می افتد. پردازه های ورودی باید داده ورودی را در میدانی مناسب در بلوک کنترل تجزیه گیر قرار دهند . هنگامی که تجزیه گر کامل است یا با خطا مواجه می شود ، ممکن است نتایج تجزیه در بلوک کنترل تجزیه گیر یافت شوند هنگامی که Ana Gvam تجزیه گر ساخت آن را در فایل سرآمدی که ایجاد کرده بود و دستوری که ساختار بلوک کنترل تجزیه گر را مشخص می کرد گنجاند.

 

 

ورودی تجزیه گر:

ورودی تجزیه گیرتان ممکن است یا کاراکترهایی باشد که از یک جریان ورودی مستقیما خوانده می شوند یا نشانه هایی هستند که از طریق پیش پرداز یا اسکندواژ گانی انباشته می شوند. راهی که ورودی را برای تجزیه گیرتان فراهم می آورید هم بستگی به این دارد که چگونه دستور زبانتان نشانه های ورودی را مشخص می کند و هم به اینکه خواه یا نا خواه یک تجزیه گیر رویدادی را درخواست می کنید . اگر تجزیه گر شما رویدادی است ، ورودی اش را با ذخیره کردن رمز ورودی و مقدار ورودی و اگر داشته ابشد در بلوک کنترل تجزیه گیر و فراخوان تجزیه گیر فراهم آورید . اگر گزینه پیکربندی ورودی اشاره گرتان را در فایل نحوی تنظیم کنید ، قبل از اینکه تجزیه گرتان را فرا خوانید در بلوک کنترل تجزیه گرتان به فیلد اشاره گر ارزش آنازی می دهید . سپس همانطور که لازم است تجزیه گیرتان ورودی اش را مستقیما از حافظه با نمو کردن اشاره گر به آسانی خواهد خواند. در غیر اینصورت ، تجزیه گیرتان هر زمان که به ورودی بیشتری نیاز داشته باشد درشت دستوری که Get Input نامیده می ش ود را فرا می خواند . ممکن است Get Input را بر طبق نیازهایتان مشخص کنید . می توانید آن را طوری مشخص کنید که یک تابع ورودی را فرا خواند ، یا هر زمان که فرا خوانده میشود زبان درون برنامه ای را اجرا کند ، درشت دستور Get Input شما می تواند رمز ورودی اش را در فیلد برنامه ورودی بلوک کنترل تجزیه گیر ذخیره کند . اگر درشت دستور Get Input را ننویسید، Ana Gvam درشت دستوری فراهم خواهد آورد که کاراکترها را از Stdin خواهد خواند. اگر دستور زبانتان نشانه های پایانه را بر حسب کاراکترهای اسکی یا اعداد نشانه خارجی مشخص نکند ، Get Input شما برای هر نشانه ورودی عدد نشانه داخلی مناسب را معین خواهد کرد. Ana Gvam برای اینکه به شما در مشخص کردن این اعداد نشانه کمک کند در فایل سرآمد دستور نوع شمارشی را فراهم می آورد . سپس می توانید برای مشخص کردن اعداد نشانه داخلی برای نشانه های ورودی هم خوانهای نامیده شده را بکار برید.

کنترل خطا:

تجزیه گرتان باید برای پرداختن به ورودی نادرست آماده باشد . دو جنبه برای کنترل خطا وجود دارد: تشخیص خطا ، و بازیافت از خطا .  تجزیه گیرتان هنگام مواجه شدن با یک خطا ، درشت دستوری را فرا می خواند که Syntax Error خطای نحوی نامیده می شود . اگر برای Syntax Error خطای نحوی تعریفی را فراهم نیاورید Ana Gvam تشخیص خطای ساده را فراهم خواهد آورد . همچنین Ana Gvam می تواند تشخیص خطای خودکاری را فراهم آورد که مکان خطا را مشخص می کند . Ana Gvam برای بازیفات خطا دو انتخاب فراهم می آورد . دوباره همزمانی نشانه خطا و دوباره همزمانی خود کار . برای دوباره بدست آوردن تجزیه گیرتان در همزمانی با ورودی اش تکنیکهایی وجود دارند سپس تجزیه گیر می تواند بعداز مواجه شدن با یک خطا پیش رود. معمولا ، اگر شما یکی از این تکنیکهای بازیافت راانتخاب نکنید ، تجزیه گیرتان هنگامی که با یک خطا مواجه می شود پایان خواهد یافت با وجود این ، اگر دوست دارید می توانید این پیش فرض را لغو کنید و تکنیک بازیافتن خودتان را فراهم آورید.

ارسال نظر