(مبانی برنامه نویسی) روشهایی جهت بهبود کار اسکنر در استفاده از بافر (عمومی _ الکترونیک)

پژوهشگر و نویسنده:  (  افشین رشید )

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

از آنجایی که مقدار زیادی از زمان در جابجایی کاراکترها سپری می شود از تکنیک های بافرینگ برای پردازش کاراکترهای ورودی استفاده می گردد.در یکی از این تکنیک ها از یک بافر که به دو نیمه N کاراکتری تقسیم شده است. استفاده میکنند که در آن N تعداد کاراکترهایی است که در ر وی یک بلوک از دیسک جای میگیرند.به این ترتیب با یک فرمان read بجای خواندن یک کاراکتر میتوان N کاراکتر ورودی را در هر نیمه بافر وارد کرد .در صورتیکه ورودی شامل تعداد کاراکتر های کمتر از N باشد بعد از خواندن این کاراکترها یک کاراکتر خاص eof نیز وارد بافر میگردد.کاراکتر eof بیانگر پایان فایل منبع بوده و با سایر کاراکتر های ورودی به نوعی تفاوت دارد.

در بافر ورودی از دو نشانه رو استفاده می شود. رشته کاراکتری بین این دو نشانه رو معرف Lexeme جاری می باشد.در ابتدا هر دو نشانه رو به اولین کاراکتر Lexeme بعدی که باید پیدا شود اشاره می کنند .نشانه روی Forward  پیش می رود تا اینکه یک توکن تشخیص داده شود.این نحوه استفاده از بافر در بیشتر موارد کاملا خوب عمل می کند .با این وجود در مواردی که جهت تشخیص یک توکن , نشانه رو Forward ناچار است بیشتر از طول بافر جلو برود این روش کار نمیکند .به عنوان مثال دستور  (ARGn,…,ARG2,ARG1 (DECLARE را در یک برنامه 1/PL در نظر بگیرید.در این دستور تا زمانی که کاراکتر بعد از پرانتز سمت راست را بررسی نکنیم نمیتوان گفت که DECLARE یک کلمه کلیدی است.

نویسنده: دکتر (افشین رشید )