payamvha/North_RAG huggingface dataset:
مدرن می‌توان به فارنهایت ۹/۱۱ و رژه پنگوئن‌ها اشاره کرد. این نوع از فیلم در مقایسه با فیلم‌های دراما به بودجه بسیار کمتری نیاز دارد؛ به همین دلیل، شرکت‌های فیلم‌سازی به این نوع از فیلم توجه زیادی دارند و از آن سود سرشاری را نصیب خود می‌کنند. فارنهایت ۹/۱۱ با فروش سینمایی معادل بیش از ۲۲۸ میلیون دلار و فروش بیش از ۳ میلیون دی‌وی‌دی رکورد جدیدی را بر جای گذاشت. مستندهای حیات وحش. مستندهای حیات وحش یکی از انواع مستندها است که جذابیت بسیار زیادی در جهان دارد و علاقه‌مندان زیادی پیگیر این نوع مستند هستند. این
علاقه‌مندان زیادی پیگیر این نوع مستند هستند. این نوع فیلم‌ها با اینکه در دستهٔ مستندها قرار می‌گیرند، به دلیل تفاوت اساسی با سایر مستندها در نوع ساخت، در زبان انگلیسی بیشتر با عنوان «فیلم حیات وحش» (Wildlife Film) شناخته می‌شوند؛ زیرا از لحاظ ساخت، بیشتر به فیلم‌های سینمایی داستانی شبیه هستند تا مستندهای سیاسی یا اجتماعی.
سوره شناسی یا قرآن‌شناسی سوره به سوره، یکی از علوم قرآنی است که در واقع به بررسی شناخت یک سوره برای تعیین تفاوت آن با دیگر سوره‌های قرآن می‌پردازد. از همین رو نام این علم از علوم قرآنی، در منابع تاریخی "علم خصایص السور" وارد شده‌است. این علم خود از آنجا که در مورد یک متن مقدس یعنی قرآن است و از آن بحث می‌کند، همانند علم دین‌شناسی ماهیتی چندروشی دارد. این علم در واقع برای رسیدن به هدف خود به دنبال ارایهٔ یک خوانش از سوره‌های قرآن است و به این ترتیب از علم تفسیر قرآن متمایز می‌گردد. تاریخچه این علم هنوز مدون
قرآن متمایز می‌گردد. تاریخچه این علم هنوز مدون نیست اما می‌توان رگه‌هایی از این گونه فعالیت علمی در آثار قرآن پژوهان مسلمان در طول چهارده قرن گذشته یافت. از جملهٔ این افراد می‌توان سیوطی، سید قطب و محمدحسین طباطبایی را نام برد. گفته می‌شود در دوران معاصر، توجه آکادمیک به این علم اولین بار از سوی محمدعلی لسانی فشارکی استاد علوم قرآنی دانشگاه تربیت مدرس تهران، صورت گرفت. وی در ۱۳۷۹ خورشیدی توجه محققین حوزهٔ مطالعات قرآنی را به این علم - طی دو سخنرانی درسی در دانشگاه امام صادق - جلب نمود. مبانی این علم در
در دانشگاه امام صادق - جلب نمود. مبانی این علم در سخنان دانشوران دین، مانند پیامبر اسلام و امامان شیعه قابل بازیابی است. روش‌های این علم متعدد است. از جمله روش‌های این علم که متکی بر صورتهای کلاسیک علوم انسانی است و کاربرد آنها در فرهنگ اسلامی نیز سابقه دارد، خواندن مکرر سوره، ترسیم تابلوی سوره، یافتن کلید واژه‌های سوره، مطالعهٔ رکوع‌های سوره و بررسی سوره در کنار سوره‌های مجاور و سوره‌های همگروه است. در همین راستا کتاب سوره شناسی (روش تحقیق ساختاری در قرآن کریم) تألیف محمدعلی لسانی فشارکی و حسین مرادی
کریم) تألیف محمدعلی لسانی فشارکی و حسین مرادی زنجانی در نشر نصایح به چاپ رسیده است که از سال 1397 چاپ این کتاب در نشر صدوچهارده انتشارات وابسته به مؤسسه فرهنگی هنری کانون نشر و ترویج زبان قرآن ادامه پیدا کرده است. در ادامه بخشی از مقدّمه این کتاب را ملاحظه می کنید: "یکی از زمینه های آماده و گستردۀ تدبّر و پژوهش و تحقیق در قرآن که یکی از عوامل مؤثر در ایجاد و افزایش انس با قرآن نیز هست، روش تحقیق ساختاری در قرآن کریم یا سوره شناسی است. در فضای مطالعات سوره شناختی، شخص پژوهشگر و محقّق، با قرآن به عنوان یک
شناختی، شخص پژوهشگر و محقّق، با قرآن به عنوان یک کتاب چندصد صفحه‏ای با تقسیمات قالبی نه محتواییِ اجزاء و احزاب و اعشار و اخماس برخورد نمی‏کند، بلکه قرآن کریم برای او مجموعه‏ای است متشکّل از یکصد و چهارده سورة کوچک و بزرگ و پانصد و پنجاه و پنج زیرسوره یا واحد موضوعی یا رکوع، که سوره به سوره و واحد به واحد مورد بررسی و مطالعه و تدبّر و استفاده قرار می‏گیرد؛ جایگاه و اهداف و مقاصد هر یک از سوره های قرآن کریم بازشناخته می شود؛ محور یا محورهای موضوعی هر سوره کشف و بررسی و فعّال می‏شود و ویژگی‏های یکایک سوره‏ها
و بررسی و فعّال می‏شود و ویژگی‏های یکایک سوره‏ها خودنمایی می‏کنند." "پژوهشگر سوره‏‌شناس خیلی زود درمی‏ یابد که بر خلاف تصوّر غالبِ قرآن شناسان مسلمان و بعضی از قرآن شناسان غیرمسلمان، سوره‏‌های قرآن قطعات یا مقطّعات کوچک و بزرگ یک کتاب که نام قرآن را به خود گرفته باشد، نیستند، بلکه سوره‏‌های قرآن چهره‏‌های متعدّدی از قرآن مجید و جلوه‏های متنوّعی از قرآن کریم ‏اند که صاحب قرآن ایزد منّان در این سفره پهن و بی‏کران فراروی بندگان گسترده و در اختیار آنان قرار داده است، تا هر فرد و هر گروه و هر جماعت از انسان ها
است، تا هر فرد و هر گروه و هر جماعت از انسان ها در طول زمان و عرض مکان تا قیام قیامت بنا به هر شاکله و شاخصه و هر شخصیت و هویّت و موقعیّت که داشته باشند، یک به یک از میان آن سوره ها ـ که هر یک از آنها جداگانه به مثابة کلّ قرآن حکیم‏اند ـ برگزینند و از آن طریق، به تدریج، به دریای معارف و ژرفای حقایق قرآن کریم راه یابند." "سوره شناسی که همان «قرآن شناسی سوره به سوره» است، یکی از بایسته‏ترین «انواع» علوم قرآنی و یکی از شایسته ترین حوزه های مطالعات نوین قرآنی است. نزدیک‏ترین انواع سنّتی علوم قرآنی به این رشته
نزدیک‏ترین انواع سنّتی علوم قرآنی به این رشته نوپدید و کارآمد، علم فضائل القرآن/ فضائل السور، همچنین علم خواص القرآن/ خواص الآیات و السور بوده است، و در منابع تاریخی از این دانش سوره شناسی، هرچند عملاً هنوز شکل نگرفته و تحقّق نیافته بوده، با عنوان «خصائص السُّوَر» یاد می‌‏شده است. علم سوره شناسی برخلاف علم تفسیر که عهده‌‏دار شرح و توضیح آیه به آیة متن قرآن کریم مطابق ترتیب مصحف شریف است، عبارت از یک مطالعۀ اسلوبی و ساختاری است که در پی شناخت فزاینده نسبت به چیستی و چرایی تدوین سوره‌‏ها در مجموعه آسمانی و
چیستی و چرایی تدوین سوره‌‏ها در مجموعه آسمانی و الهی قرآن، و فلسفه وجودی حصارهایی است که لا به لای مجموعة عظیم آیات در قرآن کریم کشیده شده‏اند." "مطالعه و بررسی سوره‌‏های قرآنی از دیرباز مطرح بوده و هست، امّا دست‏کم تا پیش از دو سدة اخیر 14 و 15 هجری، هیچگاه از خاطرنشان کردن عناوین بررسی ناشدۀ مکّی و مدنی و تکرار مکرّر شأن نزول‏‌های تحقیق ناشده و شمارش کلمات و آیات و رکوعات و ذکر نام یا نام های متعدد سوره‏‌ها و احیاناً بیان وجه تسمیه هر سوره به آن نام یا نام‌‏ها، و مانند این‌ها، فراتر نرفته است؛ چنانکه
نام‌‏ها، و مانند این‌ها، فراتر نرفته است؛ چنانکه هرگاه با نگاه سوره‏ شناسانه به میراث عظیم و افتخارآمیز و غرورآفرین تفاسیر مفصّل و انبوه قرآن مراجعه می‏‌کنیم، جز آن موارد یاد شده، بر یافته‏‌های دیگری دست نخواهیم یافت." "سوره شناسی نوین رمز فعّال‏سازی اسماء حُسنا و اوصاف زیبای قرآن همچون «بلاغ» و «نور» و «شفا» و «رحمت» و «موعظه» و «هدایت» است که در مقام قرآن شناسی اجمالی در طول تاریخ درازمدّت و پرفرازونشیب قرآن همواره مطرح می شده است و پیوسته مطرح می شود. به عبارت دیگر، سوره شناسی عبارت است از قرآن شناسی
به عبارت دیگر، سوره شناسی عبارت است از قرآن شناسی تفصیلی و بازشناسی سوره به سوره قرآن کریم؛ چنانکه آموزه‌‏های پیامبر اکرم و ائمه معصومین در راستای تعلیم و تبلیغ و ترویج قرآن به روشنی حاکی از این واقعیّت است که در سیره قولی و فعلی و تقریری ایشان بیش و پیش از آن که بر گرایش به کلّ مجموعیِ قرآن و تشویق مردمان به ختم‏های پی‏ درپی و قرائت مکرّر و سرتاسری قرآن تاکید کنند، به ارتباط داشتن و انس برقرار کردن با یک یا چند سوره از قرآن حکیم ترغیب و تشویق می‏ کرده‏ اند، و فضائل و خواصّ سوره‏‌ها و حتّی گاه آیه‏‌هایی
و فضائل و خواصّ سوره‏‌ها و حتّی گاه آیه‏‌هایی مشخّص از قرآن را برمی ‏شمرده‏‌اند و بر مداومت و اِدمان آنها تأکید می‏کرده‏‌اند." "نخستین بارقه های سوره شناسی در بهار 1365 به برکت چاپ و انتشار نخستین مجلّدات دائرة المعارف بزرگ اسلامی و درک نیاز مبرم به تألیف مقالات علمی برای عناوین سوره‏های قرآنی از کرانه‌‏های آسمان نیاوران تهران درخشیدن گرفت، و دیری نپایید که با تدوین آیین پژوهش و نگارش مقالات مدخل سوره‌‏ها نخستین گام‌‏ها برای بنیانگذاری این دانش نوین قرآنی برداشته شد. در پاییز 1378 به اهتمام معاونت پژوهشی
برداشته شد. در پاییز 1378 به اهتمام معاونت پژوهشی دانشکدة الهیّات و ارشاد دانشگاه امام صادق علیه‏ السلام یک سمینار علمی تحت عنوان «سوره شناسی گامی در مسیر قرآن شناسی تفصیلی» ارائه شد و دو سال بعد، نخستین کارگاه آموزشی ـ پژوهشی سوره شناسی در مهرماه 1380 با حضور مؤثر دانشجویان و مشارکت هم‏افزایانة استادان تشکیل گردید. کارگاه‏های سوره شناسی سال‏ها ادامه یافت و ثمرات پیوسته و آثار شایسته‏ای از خود برجای ‏نهاد. در نشریه گلستان قرآن (شماره های 117 تا 130، دورة سوم، 1381) نیز، پروندۀ سوره شناسی به شیوه‌‏ای بی‏
سوم، 1381) نیز، پروندۀ سوره شناسی به شیوه‌‏ای بی‏ پیشینه گشوده شد و به جریان افتاد و مورد قبول و استقبال کارشناسان و متخصصان و محافل قرآنی قرارگرفت." همچنین کارگاه های آموزشی پژوهشی متعدد با همین عنوان در مؤسسۀ فرهنگی هنری کانون نشر و ترویج زبان قرآن زیر نظر دکتر محمدعلی لسانی فشارکی برگزار گردیده است که در سایت این مؤسسه قایل دستیابی می باشد.
داودآباد شهری است در بخش مرکزی شهرستان اراک در استان مرکزی ایران. داودآباد در ۳۲ کیلومتری شمال شرق اراک است. این شهر سال ۱۳۹۵ دارای جمعیتی ۵۵۶۲ نفر است. اقتصاد مردم شهر داودآباد. عمده درآمد مردم این شهر بر پایهٔ دامپروری و کشاورزی است. همچنین، باید از کارگاه‌های کوچک صنعتی از جمله ریخته‌گری آلومینیوم و چدن و نیز کارگاه‌های کفاشی در داودآباد نام برد. گندم، جو و یونجه اساسیترین محصولات کشاورزی این منطقه اند. کشاورزی. کشاورزی به عنوان اصلی‌ترین کار مردم داودآباد شناخته می‌شود. گندم و جو (دیم و آبی) عمده
شناخته می‌شود. گندم و جو (دیم و آبی) عمده محصولات کشاورزی این شهر است. جغرافیای شهر. داودآباد با اراک، فرمهین، آشتیان و کمیجان همسایه است. روستاها. جعفرآباد، خوشدون، دهنمک، سهل آباد، عباس‌آباد و ویسمه Visme از روستاهای همسایهٔ داودآباد هستند.
جدول نمادها، در علم کامپیوتر، ساختمان داده‌ای است که برای ذخیره کردن اطلاعات توکن‌ها در همگردانی (کامپایل کردن) بکار می‌رود. معمولاً ابتدای این جدول با اطلاعاتی مثل کلمات کلیدی و رزرو شده زبان پر می‌شود. مابقی جدول نیز با اسم متغیر ها، اسم توابع و ... پر می‌شود. معمولاً به خاطر اینکه این جدوای و هم توسط بخش‌های ترکیبی کامپایلر مورد استفاده قرار می‌گیرد. زمینه. یک جدول نماد ممکن است فقط در زمان فرایند ترجمه در حافظه وجود داشته باشد، یا ممکن است در خروجی ترجمه برای استفاده های بعدی نهفته شده باشد مانند برای
برای استفاده های بعدی نهفته شده باشد مانند برای مثال این جدول ممکن است در یک جلسه دیباگ تعاملی استفاده شده و یا به عنوان منبعی برای قالب بندی یک گزارش تشخیصی در حین اجرای یک برنامه یا پس از اجرای آن مورد استفاده قرار گیرد. شرح. حداقل اطلاعات موجود در یک جدول نماد که توسط یک مترجم استفاده می شود، شامل نام نماد و محل یا آدرس آن است. جدول نماد برای یک کامپایلر با هدف گذاری برای دارا بودن قابلیت جابجایی جدول نماد شامل ویژگی هایی برای برای قابلیت جابجایی خواهد بود. جدول نماد برای زبان های برنامه نویسی سطح بالا
جدول نماد برای زبان های برنامه نویسی سطح بالا ممکن است نوع نماد، محدوده ها، اندازه و ابعاد آن را ذخیره کند. همه این اطلاعات در فایل خروجی نخواهند بود بلکه برای اشکال زدایی احتمالی مهیا شده اند. پیاده سازی. ساختمان داده های متعددی برای پیاده سازی جدول نماد مثل:درخت ها، لیست های خطی و فهرست خودسازمان‌دهی‌کننده قابل استفاده است. جدول نمادها به وسیله بخش های زیادی از کامپایلر مورد دسترسی قرار می گیرد، در شروع با تحلیل لغوی و در ادامه در بهینه سازی. یک کامپایلر ممکن است از یک جدول نماد بزرگ برای همه نمادها
ممکن است از یک جدول نماد بزرگ برای همه نمادها استفاده کند یا از جداول نماد سلسله مراتبی جداگانه برای دامنه های مختلف استفاده کند. برای نمونه در یک زبان دامنه دار مثل Algol و یا PL/I یک نماد "p" می تواند به صورت مجزا در چندین دامنه و احتمالاً با ویژگی های متفاوت اعلان گردد. دامنه هر اعلان بخشی از برنامه است که در آن ارجاع به "p" به آن اشاره دارد. هر اعلان یک "p" خاص را بازنمائی می کند. یک ساختمان داده متداول که برای پیاده سازی جداول نمادها استفاده می شود، جدول درهم سازی است. زمان جستجو در جداول درهم سازی
جدول درهم سازی است. زمان جستجو در جداول درهم سازی مستقل از تعداد عناصر ذخیره شده در جدول است، بنابراین برای تعداد زیادی از عناصر کارآمد است. استفاده از جدول درهم سازی علاوه بر افزایش سرعت جستجو طبقه بندی حروف الفبا در فرم جدول را ساده تر می کند. براي كامپايلر مفيد است كه بتواند در صورت لزوم در زمان كامپايل اندازه جدول نماد را به صورت پويا افزايش دهد. اگر در زمان نوشتن كامپايلر، اندازه جدول نماد ثابت باشد، اندازه آن بايد به اندازه كافی بزرگ انتخاب شود تا بتواند هر برنامه مبدا ممكن را اداره نمايد. اين چنين
هر برنامه مبدا ممكن را اداره نمايد. اين چنين اندازه ثابتی براي اكثر برنامه ها بسيار بزرگ و براي بعضی نامناسب است. از آنجا که تحلیل گر واژگان بخش زیادی از زمان خود را برای جستجو در جدول نمادها مصرف می کند، این فعالیت تأثیر بسزایی در سرعت کلی کامپایلر دارد. جدول نمادها باید به گونه ای سازماندهی شود که ورودی ها در اسرع وقت پیدا شوند. جداول درهم سازی معمولاً برای سازماندهی یک جدول نماد استفاده می شود، جایی که کلمه کلیدی یا شناسه برای تولید یک زیرنویس آرایه "هش" می شود. برخوردها در جدول درهم سازی اجتناب ناپذیر
می شود. برخوردها در جدول درهم سازی اجتناب ناپذیر است و روش معمول رسیدگی به آنها ذخیره مترادف در فضای آزاد بعدی موجود در جدول است. کاربردها. یک جدول نماد بسته به زبان مورد استفاده برای مقاصد زیر استفاده می‌شود: یک آبجکت فایل شامل یک جدول نماد از شناسه هایی است که از خارج قابل مشاهده است. در هنگام پیوند دادن آبجکت فایل های گوناگون، یک پیونددهنده این منابع نماد را شناسایی و حل می کند. معمولاً تمام نمادهای خارجی تعریف نشده در یک یا چند کتابخانه جستجو می شوند. اگر ماژولی پیدا شود که آن علامت را مشخص کند، همراه
ماژولی پیدا شود که آن علامت را مشخص کند، همراه با اولین آبجکت فایل با آن پیوند داده می شود و هر شناسه خارجی تعریف نشده ای به لیست شناسه هایی که باید جستجو شوند، اضافه می شود. این فرایند تا زمان حل شدن همه منابع خارجی ادامه می یابد. اگر یک یا چند مورد در پایان روند حل نشده باقی بمانند، خطا خواهیم داشت. در حالی که مهندسی معکوس قابل اجرا است، بسیاری از ابزارها برای بررسی آدرس هایی که به متغیرهای سراسری و توابع شناخته شده اختصاص داده شده اند، به جدول نماد مراجعه می کنند. اگر جدول نماد قبل از اینکه به یک برنامه
می کنند. اگر جدول نماد قبل از اینکه به یک برنامه اجرایی تبدیل شود، از بین رفته یا پاک شده باشد، تعیین آدرس یا درک هر چیزی از برنامه برای ابزار دشوارتر می شود. عملیات‌ها. یک جدول نماد چه خطی و چه هَش باید عملیات‌های زیر را ارائه کرده باشد: ()Insert. این عملیات به‌طور عمده در فاز تحلیلی مورد استفاده قرار می‌گیرد، یعنی نیمه نخست فرایند کامپایل که توکن‌ها شناسایی می‌شوند و نام‌ها در جدول ذخیره می‌شوند. این عملیات برای افزودن اطلاعات در جدول نماد در مورد نام‌های منحصر به فرد که در کد منبع حضور دارند استفاده
منحصر به فرد که در کد منبع حضور دارند استفاده می‌شود. قالب یا ساختاری که در آن نام‌ها ذخیره می‌شوند به نوع کامپایلر بستگی دارد. یک خصوصیت برای یک نماد در کد منبع معادل اطلاعاتی است که در مورد آن نماد وجود دارد. این اطلاعات شامل مقدار، وضعیت، دامنه و نوع نماد است. تابع ()insert نماد و خصوصیت‌های آن را به صورت آرگومان‌هایی می‌گیرد و اطلاعات آن را در جدول نماد ذخیره می‌کند. ()lookup. عملیات ()lookup برای جستجوی یک نام در جدول نماد برای تعیین موارد زیر استفاده می‌شود: نمايش اطلاعات محدوده. وارده های جدول نماد،
نمايش اطلاعات محدوده. وارده های جدول نماد، برای اعلان نام ها می باشند. هنگامی كه برای رخدادي از نام، در جدول نماد جستجو مي شود، وارده مربوط به اعلان مناسب آن نام بايد بر گردانده شود. قوانين محدوده در زبان مبدا مشخص می نمايند كه كدام اعلان مناسب است. يک روش ساده استفاده از جدول نماد مجزا برای هر محدوده است. در نتيجه جدول نماد برای یک رويه يا محدوده معادل ركورد فعاليت در زمان كامپايل است. اطلاعات غير محلی يک رويه با استفاده از پويش جدول هاي نماد مربوط به رويه هاي موجود در حيطه قوانين محدوده زبان يافت می شود.
هاي موجود در حيطه قوانين محدوده زبان يافت می شود. به‌طور مشابه اطلاعات محلی يک رويه می تواند به گروه مربوط به آن رويه در درخت نحو مربوط به آن برنامه الحاق گردد. اكثر قوانين محدوده كه به شكل نزديكی متداخل هستند. نام های محلی هر رويه با اختصاص عدد منحصر به فردی به هر رويه قابل پيگيري است. اگر زبان دارای ساختار بلوكی است بلوک ها نيز بايد شماره گذاری شوند. شماره هر رويه می تواند به صورت نحوگرا با استفاده از قوانين معنايی كه ابتدا و انتهای هر رويه را مشخص می نمايند، محاسبه گردد. شماره رويه به عنوان بخشی از تمام
محاسبه گردد. شماره رويه به عنوان بخشی از تمام اطلاعات محلی آن رويه قرار می گيرد، نمايش نام محلی در جدول نماد زوجی است شامل نام و شماره رويه. هنگامی كه براي نام تازه پويش شده به جدول نماد مراجعه می شود، تنها هنگامی كه انطباق رخ می دهد كه كاراكترهای نام به صورت كاراكتر به كاراكتر با وارده منطبق گردد و شماره همراه آن در وارده جدول نماد با شماره رويه ای كه در حال پردازش است برابر باشد. نمونه. برنامه زیر را که به زبان C نوشته شده را درنظر بگیرید: // Declare an external function extern double bar(double x); //
external function extern double bar(double x); // Define a public function double foo(int count) double sum = 0.0; // Sum all the values bar(1) to bar(count) for (int i = 1; i &lt;= count; i++) sum += bar((double) i); return sum; یک کامپایلر C که کد بالا را پارس می کند دست کم جدول زیر را تولید می کند: علاوه بر این، جدول نمادها شامل ورودی هایی است که توسط کامپایلر برای بیان مقادیر میانی تولید می شود.
تجزیه‌گر یا تجزیه‌کننده یا پارسر فازم دوم عمل کامپایل است. گرامر مورد استفاده در این مرحله گرامر مستقل از متن یا Context Free است. در حین این مرحله از کامپایل است که خطاهای نحوی تشخیص داده می‌شوند. تحلیل واژه‌ای. نخستین مرحلهٔ کامپایل تحلیل واژه‌ای است. به واحدی از کامپایلر که کار تحلیل واژه‌ای را انجام می‌دهد، اسکنر می‌گویند. اسکنر بین رشتهٔ ورودی و تحلیلگر نحوی (یا پارسر-parser) واقع است. وظیفهٔ اصلی اسکنر این است که با خواندن کاراکترهای ورودی، توکن‌ها را تشخیص داده و برای parser ارسال نماید. رابطهٔ
را تشخیص داده و برای parser ارسال نماید. رابطهٔ scanner و parser به صورت زیر است: به عنوان مثال در صورتی‌که رشتهٔ ورودی A:=B+C باشد، توکن‌های زیر تشخیص داده خواهند شد: بنابراین اسکنر علاوه بر اینکه تشخیص می‌دهد که توکن یک شناسه‌است، آدرس آن در جدول نشانه‌ها را نیز برای پارسر می‌فرستد. علاوه بر این اسکنر می‌تواند محل‌های خالی و توضیحات(comments) موجود در برنامه اصلی را ضمن خواندن برنامه حذف نماید. به آخرین توکنی که اسکنر یافته‌است، علامت پیش‌بینی (look ahead symbol) یا توکن جاری گفته می‌شود. ۲–۱- الگو
ahead symbol) یا توکن جاری گفته می‌شود. ۲–۱- الگو (pattern) و واژهٔ (Lexem) توکنها: به فرم کلی که یک توکن می‌تواند داشته باشد، الگوی آن توکن می‌گویند. به عبارتی دیگر در ورودی، رشته‌هایی وجود دارند که توکنِ یکسانی برای آن‌ها تشخیص داده می‌شود. فرم کلی این رشته‌ها توسط الگوی آن توکن توصیف می‌شود. به دنباله‌ای از نویسه‌ها که تشکیل یک توکن می‌دهند، واژه (Lexem) آن توکن می‌گویند. جدول زیر حاوی چند نمونه الگو و واژه‌است: الگو واژه توکن با حروف الفبا شروع و به‌دنبال آن حرف ورقم قرار می‌گیرد A1 id هرثابت عددی ۳٫۱۴
آن حرف ورقم قرار می‌گیرد A1 id هرثابت عددی ۳٫۱۴ num هر رشتهٔ کاراکتری که بین دو علامت " " قرار گیرد "book" literal «relation &gt;=&gt;= relation if if if در بعضی وضعیتها اسکنر قبل از اینکه تصمیم بگیرد که چه توکنی را به پارسر بفرستد، نیاز دارد که چند کاراکتر دیگر را نیز، از ورودی بخواند. مثلاً اسکنر با دیدن علامت &lt;در ورودی نیاز دارد که کاراکتر ورودی بعدی را نیز بخواند. در صورتی‌که این کاراکتر = باشد، در نتیجه توکن '&lt;=' و در غیر اینصورت توکن ' &lt;' تشخیص داده می‌شود. در این مورد باید کاراکتر اضافی
تشخیص داده می‌شود. در این مورد باید کاراکتر اضافی خوانده شده مجدداً به ورودی برگردد. یکی دیگر از مشکلاتی که اسکنر با آن روبروست این است که در زبان‌هایی نظیر فرترن مثلاً محل خالی یا (space) بجز در رشته‌های کاراکتری، نادیده گرفته می‌شود. به عنوان مثال کلمهٔ Do در زبان فرترن را در دستور زیر در نظر بگیرید: do bi =۱٫۲۵ تا زمانی‌که به نقطهٔ اعشار در ۱٫۲۵ نرسیده باشیم نمی‌توان گفت که do در این دستور کلمه کلیدی نیست، بلکه بخشی از متغیری است که نام آن do bi است. به همین ترتیب در دستور do bi=۱٬۲۵ تا زمانی‌که علامت
همین ترتیب در دستور do bi=۱٬۲۵ تا زمانی‌که علامت کاما دیده نشود، نمی‌توان گفت که این دستور یک حلقهٔ do است. در زبان‌هایی که کلمات کلیدی آن جزو کلمات رزرو شده نیستند، اسکنر نمی‌تواند کلمات کلیدی را از شناسه‌های همنام آن‌ها تشخیص دهد. به عنوان مثال در دستور زیر: IF Then THEN then=else;ELSE Else=Then; جدا کردن کلمهٔ کلیدی THEN از متغیری که نام آن Then است بسیار مشکل است. در این موارد معمولاً پارسر تشخیص نهایی را خواهد داد. ۲–۲- خطاهای واژه‌ای (Lexical Errors): به‌طور کلی خطاهای محدودی را اسکنر می‌تواند بیابد،
به‌طور کلی خطاهای محدودی را اسکنر می‌تواند بیابد، زیرا اسکنر تمام برنامهٔ ورودی را یکجا نمی‌بیند بلکه هر بار قسمت کوچکی از برنامهٔ منبع را. به‌عنوان مثال هرگاه رشتهٔ fi در یک برنامهٔ C برای بار اول مشاهده شود، اسکنر قادر نیست تشخیص دهد که آیا fi یک املای غلط از کلمهٔ کلیدی if است یا نام یک متغیر است: fi (x==۳) از آنجایی که fi می‌تواند نام یک متغیر مجاز باشد، اسکنر این توکن را به‌عنوان یک شناسه به پارسر می‌فرستد تا اینکه پارسر در اینمورد تصمیم بگیرد. اما ممکن است خطاهایی پیش بیاید که اسکنر قادر به انجام هیچ
است خطاهایی پیش بیاید که اسکنر قادر به انجام هیچ عملی نباشد. در این مورد، برنامهٔ خطا پرداز (error handler) فرا خوانده می‌شودتاآن خطا را به نحوی برطرف کند. روش‌های مختلفی برای این کار وجود دارد که ساده‌ترین آن‌ها روشی است بنام panic mode (وضعیت هراس). در این روش آنقدر از رشتهٔ ورودی حذف می‌شود تا اینکه یک توکن درست، تشخیص داده شود. سایر روش‌های تصحیح خطا (error recovery) عبارت‌اند از: a) حذف یک کاراکتر غیرمجاز (تبدیل:$= به :=) b) وارد کردن یک کاراکتر گم شده (مثلاً تبدیل: به :=) c) تعویض کردن یک کاراکتر غلط
(مثلاً تبدیل: به :=) c) تعویض کردن یک کاراکتر غلط با یک کاراکتر درست (مثلاً تبدیل :: به :=) d) جابجایی دو کاراکتر مجاز (مانند =: به :=) ۲–۳- روشهایی جهت بهبود کار اسکنر: الف)استفاده از بافر: در بسیاری از زبان‌ها اسکنر برای تشخیص نهایی توکن‌ها و مطابقت دادن آن با الگوهای موجود، نیاز دارد که چند کاراکتر جلوتر را نیز مورد بررسی قرار دهد. از آنجایی که مقدار زیادی از زمان در جابجایی کاراکترها سپری می‌شود، از تکنیک‌های بافرینگ، برای پردازش کاراکترهای ورودی استفاده می‌گردد. در یکی از این تکنیک‌ها از یک بافر که به
می‌گردد. در یکی از این تکنیک‌ها از یک بافر که به دو نیمهٔ n کاراکتری تقسیم شده‌است، استفاده می‌کنند (که در آن n تعداد کاراکترهایی است که در روی یک بلوک از دیسک جای می‌گیرند). به این ترتیب با یک فرمان read به جای خواندن یک کاراکتر، می‌توان n کاراکتر ورودی را در هر نیمهٔ بافر وارد کرد. در صورتی‌که ورودی شامل تعداد کاراکترهای کمتر از n باشد، بعد از خواندن این کاراکترها یک کاراکتر خاصِ eof نیز وارد بافر می‌گردد. کاراکتر eof بیانگر پایان فایل منبع بوده و با سایر کاراکترهای ورودی به نوعی تفاوت دارد. C ** 2 eof E
کاراکترهای ورودی به نوعی تفاوت دارد. C ** 2 eof E = M * forward Lexam –beginning ابتدای واژه در بافر ورودی از دو نشانه رو استفاده می‌شود. رشتهٔ کاراکتری بین این دو نشانه رو، معرف Lexem (واژه) جاری است. در ابتدا هر دو نشانه رو به اولین کاراکتر Lexem بعدی که باید پیدا شود اشاره می‌کنند. نشانه رویِ forward پیش می‌رود تا اینکه یک توکن تشخیص داده شود. این نحو استفاده از بافر در بیشتر موارد کاملاً خوب عمل می‌کند. با این وجود در مواردی که جهت تشخیص یک توکن، نشانه روِ forward ناچار است بیشتر از طول بافر جلو برود،
روِ forward ناچار است بیشتر از طول بافر جلو برود، این روش درست کار نمی‌کند. به‌عنوان مثال دستور declare (arg1،arg2، … ،arn n) را در یک برنامهٔ pl/1 در نظر بگیرید. در این دستور تا زمانی‌که کاراکتر بعد از پرانتز سمت راست را بررسی نکنیم، نمی‌توان گفت که declare یک کلمهٔ کلیدی است یا اسم یک آرایه‌است. برای کنترل حرکت نشانه رویِ forward و همچنین کنترل بافر می‌توان به صورت زیر عمل کرد: If forward is at end of first half then Begin reload second-half; Forward:=forward+1 End Else If forward is at end of
End Else If forward is at end of second-half then Begin reload first half; Move forward to begin of first half End Else forward:= forward+1; ب) استفاده از نگهبان‌ها (sentinels): در حالت قبل، با جلو رفتن نشانه‌روِ forward باید چک می‌شد که آیا این نشانه رو به انتهای یک نیمه از بافر رسیده‌است یا خیر. درصورتی‌که به انتهای یک نیمه از بافر رسیده باشد، باید نیمهٔ دیگر را دوباره بار می‌کردیم. در الگوریتم فوق، همان‌طور که مشاهده شد، برای هر جلورَویِ نشانه رویِ forward، دو بار عمل مقایسه انجام می‌شود. می‌توان این دو
دو بار عمل مقایسه انجام می‌شود. می‌توان این دو را به یک بار تست تبدیل کرد. برای این کار باید در انتهای هر نیمهٔ بافر، یک کاراکتر نگهبان قرار دهیم (نگهبان به عنوان قسمتی از برنامهٔ منبع نخواهد بود). به این ترتیب، برای کنترل حرکت نشانه‌روِ forward می‌توانیم از الگوریتم زیر استفاده کنیم: forward:=forward + 1 ; if (forward = eof) then begin if (forward is at end of first half) then begin reload second half; forward := forward+1 ; end else if (forward at end of second half) then begin reload first half; move
second half) then begin reload first half; move forward to beginning of first half end else /* eof within a buffer signifying end of input */ terminate lexical analysis (آنالیز واژه‌ای به پایان برسد) end.
خطای منطقی یا خطای منطق در برنامه‌سازی رایانه نوعی خطا است که باعث عملکرد نادرست برنامه می‌شود، اگرچه به قطع اجرای آن نمی‌انجامد. این‌گونه خطا یا در اثر نادرست بودن الگوریتم، یا نادرست بودن نحوه کدنویسی الگوریتم یا خطا در نوشتن دستورالعمل خاصی است. مثال. حالتی را تصور کنید که یک برنامه‌ای که می‌بایست با گرفتن طول ضلع یک مربع، محیط آن را محاسبه کند، با وارد کردن ۳ به عنوان طول ضلع، عددی غیر از ۱۲ را نمایش دهد. در این حالت برنامه بدون هیچ ایرادی کامپایل شده و اجرایش هم بدون خطا خاتمه یافته، ولی جواب درست را
اجرایش هم بدون خطا خاتمه یافته، ولی جواب درست را تولید نکرده‌است. همچنین گیرکردن برنامه در حلقه‌های بینهایت نیز جزو این دسته از خطاها می‌باشد. کشف کردن و رفع ایراد این نوع خطاها کار دشواری می‌باشد، چرا که ممکن است برنامه در حالات خاصی جواب درست بدهد و در حالات دیگری جواب غیر درست. مثال 2. این یک تابع در زبان برنامه نویسی C است که جمع دو عدد را حساب می کند. ولی نتیجه درست را حساب نمی کند. چون که کامپیوتر ابتدا مقدار تقسیم و سپس جمع را جساب می کند float average(float a, float b) return a + b / 2; // should
a, float b) return a + b / 2; // should be (a + b) / 2 منابع. Wikipedia contributors، "Logic error،" Wikipedia، The Free Encyclopedia، http://en.wikipedia.org/w/index.php?title=Logic_error&amp;oldid=171105988 (accessed December ۲۹، ۲۰۰۷).