بخشی از مقاله
مقدمه اي بر تحليل نحوي جهت دار
مقدمه اي بر تحليل نحوي جهت دار
تحليل نحوي جهت دار چيست ؟
توصيف توالي ورودي
چگونه تجزيه گر كار مي كند
يادداشتي بر نشان گذاري
پردازنده هاي كاهنده
ساختمان تجزيه گر
فراخواني تجزيه گر
برقراري ارتباط با تجزيه گير
ورودي تجزيه گير
كنترل خطا
تحليل نحوي جهت دار چيست ؟
هر برنامه نويسي به داده هاي ورودي ها مي پردازد . معمولا پردازش داده هاي ورودي به آنچه كه مقاوم مي باشد ، و اغلب حتي بر انچه كه دنبال مي كند ، ورودي تحت بررسي بستگي دارد . به منظور دانستن اينكه چگونه پردازش داده تجزيه ناميده مي شود اين تبعيتها را دنبال مي كنيم . اغلب هنگامي كه اول برنامه را مي نويسيم دنبال كردن تبعيتهاي ساده نسبتا آسان است .
همان طور ك برنامه توسعه مي يابد ، همانطور كه ويژگي هاي جديد اضافه مي شوند و خطاها ثابت هستند ، اغلب متوقف كردن تبعيتها ساده مي باشد. چون دنبال كردن يا حتي تشخيص دادن تمام موارد خاص سخت است پردازش ورودي در دسري شده است . تغيير دادن برنامه باعث مي شود كه مسائل پيش بيني نشده و خطرات نگهداشت برنامه از كنترل خارج شوند . تحليل نحوي جهت دار تكنيكي است براي خطاب قرار دادن اين مشكلات است . در تحليل نحوي جهت دار ، بخش ورودي برنامه بوسيله الگوريتم استاندارد ، از توصيف سطح بالا درباره ساختار داده ورودي به طور خود كار ساخته شده است .
دستورالعملهاي اجرا كردن پردزاش ضروري داده وابسته به توصيف در راهي مناسب است . شرحي كه رويه اي نمي باشد معمولا براي نوشتن و تغيير دادن دستورالعمل معادل برنامه و احتمالا خطاهاي حفاظي آسانتر است براي خواندن و حفظ كردن آسانتر است . براي استفاده شدن در برنامه هاي ضروري ديگر همان ورودي آسان است ، بنابراين رابطهاي يكسان را تاييد مي كند . همچنين تكنيك با جدا سازي ورودي و پردازش مولفه ها و فراهم آوردن ساختار واحدي ، طبيعي در كل برنامه ساده مي شود. براي استفاده از تحليل نحوي جهت دار نخست شرح داده هاي ورودي كه دستور زبان ناميده مي شوند را بنويسيد. فايلي كه شامل دستور زبان است فايل نحوي ناميده مي شود .
سپس مولد تجزيه گر ، از قبيل Ana Gvam مي تواند از فايل نحوي عملي ( يا برنامه اي ) را بوجود آورد كه تجزيه گر ناميده مي شود و به صورت C يا C++ نوشته مي شود . تجزيه گر تمام تبعيتها را در ورودي شما دنبال مي كند ، عملهاي خاص پردازه هاي كاهنده را فرا مي خواند ، به واحدهاي معين يا توالي هاي داده همانطور كه با آنها مواجه مي شود مي پردازد .
پردازه هاي كاهنده رمزي هستند كه براي پردزاش كردن داده هايتان مي نويسيد در دستور زبان تان طوري به ساختار ها در ورودي تان پيوست مي شوند كه تجزيه گر دقيقا در زمانهاي درست با داده هاي دقيقا درست آنها را فرا خواهد خواند . توجه كنيد كه با اين تكنيك فقط بايد شرح غير رويه اي از ورودي فراهم آوريد. جزئيات روند كنترل كاملا بوسيله تجزيه گر كنترل مي شوند هنگامي كه پردازه هاي كاهنده را مي نويسيد، كاملا مي توانيد روي آنچه كه با داده انجام داده ايد تمركز كنيد. براي مشخص كردن ساختار ورودي تان مجبور نيستيد رمزتان را با گزينه ها و آزمايشها پر كنيد. تجزيه گرهايي كه با استفاده از مواد تجزيه گير از قبيل Ana Gvam ساخته ايد ممكن است در برنامه هاي مستقل كامل شوند يا ممكن است به روالهاي ورودي براي برنامه گسترده تر كمك كنند. ممكن است بعضي از برنامه ها بيشتر از يك تجزيه گر را به كار برند.
توصيف يك توالي ورودي
نوشتن دستور زبان شامل توصيف توالي هاي مورد قبول ورودي براي برنامه تان است ابزار توصيف يك توالي ورودي توليد ناميده ميشود. توليدات نشان مي دهند كه چگونه مولفه منطقي ورودي مي تواند از توالي مؤلفه هاي بنيادي تر بوجود آيد . توليدي كه تاريخ را توصيف مي كند ممكن است به صورت زير نوشته شود :
سال و ويرگول ، روز ، اسم ماه ـــ تاريخ مولفه هاي ورودي شاخه ها ناميده مي شوند . توالي مولفه ها در يك سمت از توليد قاعده دستور زبان يا قاعده براي رعايت اختصار ناميده مي شود همچنين نشانه هاي خاص در سمت راست قاعده عناصر قاعده ناميده مي شوند .
در سمت چپ توليد نشانه براي قاعده نشانه كاهنده ناميده مي شود. ممكن است نشانه ها همانطور كه از ارزشهاي نحوي متمايز مي شوند ، ارزشهاي معنايي داشته باشند كه مي توانيد در پردازه هاي كاهنده تان بكار بريد. به عنوان مثال ، ارزش اسم ماه مي تواند از گسترده صفر تا يازده يك عدد صحيح يا مي تواند براي يك رشته اسكي اشاره گر باشد . ارزش روز مي تواند از گسترده يك تا سيو يك عدد صحيح باشد .
دستور زبان شامل شادي از چنين توليداتي است كه هر كدام مي تواند برخي از مولفه هاي ورودي را بر حسب مولفه هاي ديگر توصيف كند و همچنين بسياري از توليدات را براي توصيف جريانهاي ورودي كاملا پيچيده در نظر نمي گيرد.دستور زبان براي زبان C ، به عنوان مثال حدود 200 توليد نياز دارد. براي برخي از مردم اصطلاح توليد گيج كننده است واز زبان شناسي نظري ناشي مي شود كه براي توصيف اينكه چگونه فرد ممكن است تواليها را توليد كند كه مطابق با مجموعه اي از قواعد گرامري است استفاده مي شود .
شگفت اينكه ، استفاده عمده از فكر به تحليل نحوي منجر شد كه به ايجاد تواليهايي كه قواعد گرامري را در رمزگشايي و تحليل چنين تواليها ارضا مي كند علاقه اي ندارد. با اين همه ، در مثال بالا مناسب است بگوييم كه تاريخ نشانه توالي از نشانه ها را توليد مي كند كه شامل اسم ماه ، روز ، ويرگول و سال است . همچنين ما مي گوييم كه توالي به تاريخ كاهش مي يابد . ممكن است براي توصيف مولفه مشخص بيشتر از يك توليد وجود داشته باشد ، اگر بيشتر از يك راه وجود دارد ممكن است به صورت زير نمايش داده شود: سال ، اسم ماه ، روز ـــ تاريخ كه راه مشترك ديگري از نوشتن تاريخ را توصيف مي كند .
به عبارت ديگر ، نشانه كاهنده ممكن است شماري از قواعد مختلف گرامري را توليد كند . نشانه هايي كه در سمت چپ يك يا چند توليد ظاهر مي شوند نشانه هاي غير پايانه ناميده مي شوند و نشانه هايي كه فقط در سمتهاي راست توليدات ظاهر مي شوند نشانه هاي پايا ناميده مي شوند . نشانه هاي پايانه واحدهايي هستند كه واقعا در ورودي به طور طبيعي ظاهر مي شوند هنگامي كه توالي نشانه ها كه مطابق با سمت راست توليد است در ورودي ديده مي شود نشانه هاي غير پايانه تشخيص داده مي شوند . هنگامي كه Ana Gvam دستور زبان را تحليل مي كند ،
به هر نشانه اي كه در دستور زبان يافته است شماري از نشانه هاي تك را اختصاص مي دهد. ممكن است نشانه هاي غير پايانه ، از قبيل تاريخ در مثال بالا ، در هر قاعده دستور زبان ظاهر شوند چنانكه گويي نشانه هاي ورودي بودند . نشانه درست چپ توليد حتي مي تواند در سمت راست هر ظاهر شود. چنين توليدي توليد بازگشتي ناميده مي شود . هنگامي كه نشانه غيرپايانه در سمت راست توليد ظاهر مي شود ، ممكن است در اين متن از طريق قواعد دستور زباني كه توليد مي كند نمايش داده شود .
دستور زبان هاي توصيف شده به اين طريق دستور زبانهاي مستقل از متن ناميده مي شوند و چون براي قواعدي كه نشانه توليد مي كند محدوديت متني وجود ندارد مي توانند در هر متن معين بكار روند . ممكن است توليدات بازگشتي يا در بازگشتي چپ يا بازگشتي راست باشند . توليدات بازگشتي چپ توليداتي هستند كه غير پايانه تعريف شده را از راه بازگشتي به عنوان نخستين عنصر در قاعده بازگشت ظاهر مي كنند. توليدات بازگشتي راست توليداتي هستند كه باري آنها غير پايانه آخرين عنصر است . اگر توليد در هر جاي ديگري ظاهر شود گفته مي شود كه بازشگتي مركزي مي باشد. همچنين هر نشانه غير پايانه اي كه توليد بازگشتي دارد حداقل بايد يك توليد غير بازگشتي ساده داشته باشد .
در غير اينصورت ، ممكن نيست كه توالي متناهي نشانه هاي پايانه را از نشانه غير پايانه بوجود آورد. همچنين هنگامي كه يكي از نشانه ها در سمت راست توليد خود مستلزم توليدي باشد كه نشانه را در چپ در بر دارد ممكن است بازگشت در دستور زبان بر طور تلويحي اتفاق افتد. گاهي اوقات ممكن است چنين بازگشت تلوحي سطوح متعددي از توليدات را در برداشته باشد . بازگشت تلويحي معمولا در توصيف ساختهايي از قبيل عبارتهاي حسابي يا ساختار قطعه اي زبانهاي برنامه نويسي روي ميدهد.
دستور زبانها مسلما مي توانند سطوح متعدد ساختار را با تواليهاي ورودي كه توصيف مي كنند وفق دهند. بايد در بالا نشانه واحدي وجود داشته باشد كه تمام ورودي را در بر گيرد . اين نشانه ويژه به طرق مختلف نشانه دستور زبان ، نشانه هدف يا نشانه شروع ناميده مي شود. Ana Gvam به شما اجازه مي دهد كه نشانه هاي پايانه را به عنوان كاراكترهاي اسكي ، يا حتي مجموعه هايي از كاراكترهاي اسكي در سمت راست دستور زبان مشخص كنيد . بنابراين ، ممكن است 0 – 9 را براي نمايش مجموعه از ارقام اسكي يا A-Z را براي نمايش مجموعه اي از حروف بزرگ بنويسيد.
ارزش معنايي چنين نشانه اي رمز كاراكتر اسكي است كه در حقيقت در جريان ورودي ظاهر مي شود. اگر مجموعه هاي متفاوتي كه در دستور زبان تان بكار مي بريد تداخل داشته باشند ، ممكن است نشانه هاي پايانه را به طور مناسبي نمايش ندهند . در اين حالت Ana Gvam به طور خودكار و به نحوي شايسته دستور زبان شما را توسعه مي دهد.
تجزيه گر چگونه كار مي كند.
هدف تجزيه گر تطابق ورودي اش با ساختار نحوي مشخص شده توسط توليداتي است كه دستور زبان را بوجود مي آورند . مولفه اصلي تجزيه گر يك ميانگير ورودي است ، گاهي اوقات به عنوان پشته اي تصور مي شود كه در آن نشانه ها تغيير مي يابند ، يا همانطور كه با ورودي روبرو مي شوند، به صورت متوالي ذخيره مي شوند . در همان زمانيكه نشانه در ميانگير ورودي ذخيره مي شود، ارزش معنايي اش روي پشته ارزشي افزوده مي شود. نشانه در ميانگير تغيير نمي يابد مگر اينكه معني دهد يعني مگر اينكه با قواعد دستور زبان و با ورودي كه بر آن مقدم مي باشد هماهنگ باشد .
اگر ورودي معني ندهد ، تجزيه گر به خطاي نحوي اشاره مي كند . به منظور مشخص كردن اينكه آيا نشانه معني مي دهد ، تجزيه گر نوعي از جدول تصميم گيري دارد كه براي هر يك از حالتها ليستي از نشانه هاي قابل قبول را فراهم مي آورد . همچنين جدول مشخص مي كند كه با هر نشانه قابل قبول چه تجزيه گري استفاده مي شود. هنگامي كه جدول نشان ميدهد كه نشانه در ميانگير تغيير داده مي شود ، يك حالت جديد را مشخص مي كند . تجزيه گر حالت جاري از روي پشته حالت پشته مي كند و به حالت جديد مي پرد .
بنابراين هر زمان كه نشانه در ميانگير ورودي تغيير مي يابد ، به تعداد حالت روي پشته حالت افزوده مي شود . براي هر حالت از تجزيه گير ، به جز حالت اوليه، نشانه تكي وجود دارد كه باعث جهش به آن حالت خوانده شد . اين نشانه ، براي حالت نشانه مشخصه ناميده مي شود. هنگامي كه سمت راست ترين ، يا جديدترين نشانه ها در ميانگير ورودي دقيقا مطابق با سمت راست توليد باشند ، ممكن است تجزيه گر نشانه هايي را جايگزين كند كه قاعده را با نشانه واحد ، نشانه در سمت چپ توليد تطبيق دهد. نشانه اي كه توالي نشانه ها را جايگزين مي كند نشانه كاهنده ناميده مي شود . مكانيسم واقعي كاهش كاملا مهم است .
در همان زماني كه نشانه هاي ورودي از ميانگير ورودي حذف مي شود ، شماره هاي حالت از پشته حالت برداشته مي شود طوري كه وقتي تمام نشانه هاي ورودي مطابق با قاعده حذف مي شوند ، حالت تجزيه گير به مقدار قبلي بر گردانده مي شود كه آن مقدار را در زماني كه نخستين نشانه در قاعده ديده مي شد در برداشت همانطور كه شماره هاي حالت از پشته حالت برداشته مي شود ، مقادير نشانه از پشته مقدار برداشته مي شود . اگر قاعده پردازده كاهنده اي دارد ، متغيرهاي موقتي با مقادير برداشته شده از پشته بار مي شوند و پردازده كاهنده ناميده مي شوند .
اكنون نشانه كاهنده در ميانگير ورودي طوري تغيير مي يابد كه گويي يك نشانه ورودي بودند. اگر پردازه كاهنده نتيجه را بر گرداند به عنوان مقدار نشانه كاهنده در پشته مقدار تغيير مي يابد . تجزيه گير دوباره حالت جراي را پشته مي كند و همانطور كه از طريق جدلوهاي تجزيه گير مشخص مي شود به حالت جديد مي پرد. اگر در ورودي شما خطا وجود ندارد ، هنگامي كه آخرين نشانه از ورودي خوانده مي شود ، در ميانگير ورودي تغيير مي يابد ، و كاهش ها اجرا مي شوند ، دقيقا يك نشانه ، نشانه دستور زبان يا هدف كه كل ورودي شما را توصيف مي كند در ميانگير ورودي وجود خواهد داشت .
در اين هنگام تجزيه گير اعلام مي كند كه پايان يافته است . در هر زمان كه قاعده نشانه ها را در ميانگير ورودي برابر مي كند كاهشها الزاما رخ نمي دهند . اگر نشانه كاهنده معني ندهد ، يعني اگر هماهنگ با قواعد دستور زبان و با ورودي كه بر آن مقدم مي باشد نيست ، تجزيه گر كاهش را اجرا نخواهد كرد . فرض كنيد نشانه هايي در ورودي وجود دارند كه يكي از قواعد مشخص بالا را براي تاريخ تطبيق مي دهد . كاهش رخ نخواهد داد مگر اينكه تاريخ يكي از نشانه هاي تجزيه گير باشد كه در حقيقت آن مرحله را در ورودي جستجو مي كند . حتي هنگامي كه نشانه كاهنده معني ميدهد ، هنوز موقعيتهايي وجود دارند كه كاهش اتفاق نمي افتد ، فرض كنيد دستور زبان شامل دو تا از توليدات مشخص در بالا براي تاريخ به علاوه براي نمونه زير است :
روز و اسم ماه ـــ تاريخ
اين توليد همانند اولي اما بدون مشخصه سال است . هنگامي كه تجزيه گير جهت دار از طريق دستور زبان با اسم ماه و روز مواجه شود ، نمي تواند بدون نگاه كردن بگويد كه آيا تاريخ فرم طولاني را دارد يا تاريخ فرم كوتاه را . در چنين شرايطي تجزيه گر به نشانه بعدي كه نشانه پيش بيني ناميده مي شود نگاه مي كند . اگر نشانه پيش بيني ويرگول نيست ، سپس ورودي مطمئنا تاريخ فرم طولاني نيست ، و براي كاهش دادن توليد فرم كوتاه مناسب است . فرض كنيد كه نشانه پيش بيني ويرگول بود و همچنين دستور زبان شامل توليد زير بود :
زمان ـ ويرگول ـ تاريخ ــــ انتخاب
چون ويرگول مي تواند مطابق اين قاعده تاريخ را دنبال كند ، و همچنين مي تواند مطابق نخستين توليد روز را دنبال كند ، غير ممكن است با نگاه كردن به نشانه پيش بيني به سادگي مشخص كنيم كه آيا تاريخ در فرم كوتاه يا در فرم طولاني مشخص شده بود. فرد مي تواند به بعد از ويرگول نگاه كند تا ببيند آنچه كه ويرگول را دنبال مي كند قواعد را با زمان تطبيق مي دهد يا با سال . اگر چه ساختن تجزيه گر هايي كه اين كار را انجام مي دهند ممكن است ، اما معمولا امكان پذيرنيست . اين نوع موقعيتها تعارض ناميده مي شوند . هنگامي كه Ana Gvam دستور زبان تان را تحليل مي كند و امكانات متعدد را فراهم مي آورد تا براي درست كردن آن به شما كمك كنند در باره متعارض ها در دستور زبانتان به شما اخطار مي دهد.
يادداشتي درباره نشان گذاري :
دستور زبانهاي مستقل از متن در آثار ادبي با استفاده از صورت بكوس ـ نوير گذاري يا نشانه BNF به طور سنتي نمايش داده شده اند . در صورت بكوس نوير گذاري ، كاراكترهاي خاصي كه فراكاراكتر ها ناميده مي شوند ، براي نقطه گذاري كردن توليدات و ديگر كاراكترهاي چاپ شدني استفاده مي شوند كه براي نمايش خودشان دقيقا در نظر گرفته مي شوند .
نشانه هاي ذكر شده با ضميمه كردن اسم در علامتهاي زاويه دار مدلول مي شوند . سمت چپ توليد با كاراكترها = :: از سمت راست متمايز مي شوند . اگر چند تا از توليدات يك سمت چپ را داشته ابشند ميله عمودي | براي جدا كردن آنها استفاده مي شود . عناصر قاعده دستور زبان راي نشان دادن اينكه يكي ديگري را دنبال مي كند به سادگي كنار هم گذاشته مي شوند . فاصله ها ناديده گرفته مي شوند . بنابراين در نشانه BNF ، نخستين توليد مشخص براي تاريخ در بالا مي تواند (سال) ، ( روز ) ( اسم ماه ) = :: (تاريخ ) باشد.
Ana Gvam با استفاده از برنامه نويسي معمولي نشان گذاري را هم خوانتر بكار مي برد . بنابراين اسم هاي نشانه نياز ندارند كه داخل كروشه بشوند و كاراكترهاي لفظي بايد به نحوي شايسته نقل شوند . عناصر قواعد با ويرگول به هم پيوست مي شوند . با استفاده از اين روش ، نيازي براي فراكاراكترهاي وجود ندارد و بوجود آوردن شماري از توسعه هاي مفيد باري نشان گذاري ممكن ميباشد.
پردازه هاي كاهنده :
البته ، دليل تجزيه يك جريان ورودي تغيير كردن داده در جريان و پردازش آن در سبكي مفيد است . ابزار اصلي براي انجام اين كار پردازنده كاهنده است كه اغلب به آن به عنوان عمل معنايي اشاره مي شود . پردازه كاهنده قطعه اي از رمز C است و هنگامي كه قاعده خاص دستور زبان كاهش مي يابد اجرا مي شود اغلب ، پردازنده كاهنده مقداري را حساب مي كند كه مقدار معنايي نشانه كاهش مي باشد.
ورودي براي پردازه كاهنده شامل مقاديري از نشانه هاست كه قاعده دستور زبان را بوجود مي آورد. Ana Gvam به شما اجازه مي دهد كه اسم هاي متغير C را به نشانه ها در قاعده دستور زبان طوري نسبت دهيد كه بتوانيد در پردازه كاهنده به آنها اشاره كنيد . براي نسبت دادن اسم متغير C نشانه را در قاعده با علامت دو نقطه : و اسم متغير C به سادگي دنبال كنيد . پردازه هاي كاهنده ساده مي توانند همانند عبارتهاي C++ يا C نوشته شوند . در پايان قاعده ، نوشتن يك علامت تساوي و يك عبارت با واك و نقطه رو ، پايان مي يابد به عنوان مثال :
(int) hex digit `0 – 9 : d = d -- `0`
هنگامي كه هر يك از اين قواعد برابر مي شوند ، مقدار نشانه در قاعده به متغير موقتي نسبت داده مي شود . عبارت سمت راست علامت تساوي ارزيابي مي شود و مقدار عبارت به عنوان مقدار رقم شانزده شانزدهي كه اظهار نمره يك int مي باشد ذخيره مي شود . اين توليدات ارقام شانزده شانزدهي را به عنوان كاراكترهاي اسكلي مشخص مي كنند، و بر حسب رمز كاراكتر اسلي ، d مقدار دودوئي رقم را حساب مي كنند. مقدار دودويي مقدار رقم شانزده شانزدهي مي باشد . ارقام شانزده شانزدهي مي توانند براي ايجاد اعداد شانزده شانزدهي با نوشتن توليدات زير تركيب شوند :
:dرقم شانزده :n/a عدد شانزده ـــ رقم شانزده شاندزدهي ـــ عدد شانزده شانزدهي (int)
چندين نكته مهم در اين مثال وجود دارند كه بايد به آنها توجه كنيم ، نخست ، پردازه هاي كاهنده از پايين به بالا اجرا مي شوند ، يعني ، پردازه كاهنده براي رقم شانزده شانزدهي قبل از هر پردازه كاهنده براي عدد شانزده شانزدهي اجرا مي شود. دوم ، اگر براي توليد پردازه كاهنده وجود ندارد ، مقدار نخستين نشانه در قاعده به نشانه كاهنده نسبت داده مي شود .
بنابراين ، لازم نيست كه براي عدد شانزده شانزدهي در توليد نخستين پردازه كاهنده اي را فراهم آوريم . سوم ، اگر پردازه هاي كاهنده توليد غير بازگشتيي را داشته باشد كه بازگشت را شروع مي كند هميشه براي توليدات بازگشتي بعد از پرداز ، كاهنده اجرا مي شود و بالاخره ، هنگامي كه يك توالي ورودي با استفاده از بازگشت چپ توصيف مي شود ، عناصر توالي همانند اين مثال از چپ به راست پردازش مي شوند. اگر دوست داريد كه عناصر توالي را از راست به چپ پردازش كنيد ، ممكن است بازگشت راست را بكار بريد . به عنوان مثال ، گاهي اوقات مناسب است كه بخش كسري عدد دهدهي را مشخص كنيم بنابراين :
بخش كسري ( دو برابر)
`0 – 9` : d = ( d –` 0` ) /10.,
`0 – 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 براي بازيفات خطا دو انتخاب فراهم مي آورد . دوباره همزماني نشانه خطا و دوباره همزماني خود كار . براي دوباره بدست آوردن تجزيه گيرتان در همزماني با ورودي اش تكنيكهايي وجود دارند سپس تجزيه گير مي تواند بعداز مواجه شدن با يك خطا پيش رود. معمولا ، اگر شما يكي از اين تكنيكهاي بازيافت راانتخاب نكنيد ، تجزيه گيرتان هنگامي كه با يك خطا مواجه مي شود پايان خواهد يافت با وجود اين ، اگر دوست داريد مي توانيد اين پيش فرض را لغو كنيد و تكنيك بازيافتن خودتان را فراهم آوريد.