تالار گفتمان مانشت
مهندسی کامپیوتر ۸۰ - نسخه‌ی قابل چاپ

مهندسی کامپیوتر ۸۰ - ahmadnouri - 18 دى ۱۳۹۰ ۱۱:۲۹ ب.ظ

دوستان مگه تشخیص کلمات و نوع کلمات از وظایف تحلیلگر لغوی نیست؟
اگه نیست؟ خب چطوری این فاز نوع لغت رو تشخیص نداده براش تعیین میکنه که کدوم Token رو بفرسته؟
اگه میشه نظراتتون رو در مورد سوال زیر بفرمایید

گزینه صحیح رو انتخاب کنید؟
۱ - تشخیص شناسه‌ها و کلمات کلیدی حذف فضای های خالی و پردازش توضیحات و پابت های عددی و حرفی از وظالیف اسکنر است.
۲- تشخیص شناسه‌ها و کلمات کلیدی از وظایف اسکنر نیست.
۳ - حذف فضای خالی و پردازش توضیحات از وظایف اسکنر نیست.
۴ - پردازش ثابت های عددی و حرفی از وظایف اسکنر نیست .

پوران گزینه ۲ رو انتخاب کرده.

مهندسی کامپیوتر ۸۰ - - rasool - - 18 دى ۱۳۹۰ ۱۱:۵۹ ب.ظ

تحلیلگر لغوی فقط میگه فلان کلمه (شناسه) از لحاظ ساختار ظاهری مجاز هست یا نه و دیگه کاری به نوعش نداره. مثلا اگه ما به جای کلمه کلیدی while بنویسیم wile از لحاظ اسکنر یک کلمه مجازه(چون ظاهرش هیچ مشکلی نداره و مثلا می تونه فرضا به عنوان نام یک متغیر تلقی بشه). و این پارسر هست که بر حسب قواعد زبان میاد و خطا می گیره.

(و اگه مثلا توی پاسکال کلمه ای رو با رقم شروع می کردیم اونوقت ساختار کلمه غیرمجاز بوده و اسکنر خطا می داد چون هیچ الگوی لغتی برای چنین کلمه ای در پاسکال موجود نیست) .

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

و اما چند نکته:
پردازش و حذف فضاهای خالی و توضیحات از وظایف اسکنره.
تشخیص نوع شناسه‌ها (که کلا چه ماهیتی دارند) و کلمات کلیدی با پارسره.
پردازش ثابت های عددی و حرفی با اسکنره.

با توجه به توضیحات فوق گزینه ۲ صحیحه.

پ ن‌: توضیحات بیشتر‌: پوران پژوهش- روح الله آل شیخ

RE: مهندسی کامپیوتر ۸۰ - ahmadnouri - 19 دى ۱۳۹۰ ۰۱:۳۸ ق.ظ

خیلی ممنون از پاسخی که دادین
شما اشاره کردین که
(۱۸ دى ۱۳۹۰ ۱۱:۵۹ ب.ظ)yaali نوشته شده توسط:  مثلا اگه ما به جای کلمه کلیدی while بنویسیم wile از لحاظ اسکنر یک کلمه مجازه

خب من حرفم اینه وقتی اسکنر میتونه برای کلمه wile توکن شناسه رو بفرسته یعنی تونسته شناسه رو تشخیص بده چون اگه نتونه تشخیص بده که از کجا میدونه کدوم توکن رو بفرسته؟ در واقع اسکنر اشتباه تایپی کاربر رو نمی تونه تشخیص بده و اگه بتونه برای کلمه کلیدی while توکن کلمه کلیدی رو بفرسته یعنی کلمه کلیدی رو شناخته و توکنش رو ارسال کرده به نظر من اصلا پارسر بر اساس همین اطلاعات هست که می تونه کارش رو انجام بده
اصلا خود روح الله آل شیخ در صفحه ۳۰ کتابش در یه نکته گفته که برای عبارت x=y*z اسکنر توکن های زیر رو ارسال میکنه
مثلا برای x <آدرس x و id> رو میفرسته خب در همین عبارت هم نوع x که id مشخص شده پس چطور در مورد سوال بالا اسکنر نمیتونه id رو تشخیص بده؟DodgyExclamation

RE: مهندسی کامپیوتر ۸۰ - - rasool - - 19 دى ۱۳۹۰ ۰۲:۰۶ ب.ظ

(۱۹ دى ۱۳۹۰ ۰۱:۳۸ ق.ظ)ahmadnouri نوشته شده توسط:  خب من حرفم اینه وقتی اسکنر میتونه برای کلمه wile توکن شناسه رو بفرسته یعنی تونسته شناسه رو تشخیص بده چون اگه نتونه تشخیص بده که از کجا میدونه کدوم توکن رو بفرسته؟ در واقع اسکنر اشتباه تایپی کاربر رو نمی تونه تشخیص بده و اگه بتونه برای کلمه کلیدی while توکن کلمه کلیدی رو بفرسته یعنی کلمه کلیدی رو شناخته و توکنش رو ارسال کرده ...DodgyExclamation
اسکنر از روی ظاهر کلمات و جدول الگویی که داره، می تونه مثلا بگه فلان کلمه وارد شده در کد رو بعنوان شناسه بفرسته یا بعنوان کلمه کلیدی یا بعنوان ... و اگه الگوی چنین کلمه ای رو نداشت خطا می ده.
اما وقتی شما اشتباهی تایپ کرده‌اید wile‌، اسکنر تشخیص نمی ده که حالا به جای این wile باید کلمه کلیدی while وارد می شده.(یعنی نمی فهمه‌، تشخیص نمی ده و نمی گه که شما باید اینجا یک کلمه کلیدی می زدی) در نتیجه باهاش مثل یک شناسه معمولی برخورد کرده و توکنش رو می فرسته. و خطایی هم نمی ده.

ولی در مرحله بعدی یعنی پارسر هستش که طبق ساختار و قواعد زبان متوجه می شه که مثلا این قسمت کدنویسی شما یک مشکلی داره و wile در اینجا یک شناسه عادی نمی تونه باشه. در نتیجه خطا می ده.

حالا باز خودتون می تونید بررسی و تحقیق بیشتری داشته باشید.

RE: مهندسی کامپیوتر ۸۰ - mehdi63_1 - 29 آبان ۱۳۹۲ ۰۲:۳۷ ب.ظ

(۱۸ دى ۱۳۹۰ ۱۱:۲۹ ب.ظ)ahmadnouri نوشته شده توسط:  دوستان مگه تشخیص کلمات و نوع کلمات از وظایف تحلیلگر لغوی نیست؟
اگه نیست؟ خب چطوری این فاز نوع لغت رو تشخیص نداده براش تعیین میکنه که کدوم Token رو بفرسته؟
اگه میشه نظراتتون رو در مورد سوال زیر بفرمایید

گزینه صحیح رو انتخاب کنید؟
۱ - تشخیص شناسه‌ها و کلمات کلیدی حذف فضای های خالی و پردازش توضیحات و پابت های عددی و حرفی از وظالیف اسکنر است.
۲- تشخیص شناسه‌ها و کلمات کلیدی از وظایف اسکنر نیست.
۳ - حذف فضای خالی و پردازش توضیحات از وظایف اسکنر نیست.
۴ - پردازش ثابت های عددی و حرفی از وظایف اسکنر نیست .

پوران گزینه ۲ رو انتخاب کرده.

من هم همین مشکل رو داشتم کلا کتابای مقسمی و پوران رو با هم مقایسه کردم فصل یک رو ۲ ۳ تا تست با جوابای مختلف داشتن. متاسفانه کتاب های تخصصی اشکالات زیادی دارن.

RE: مهندسی کامپیوتر ۸۰ - hoda ahmadi - 04 آذر ۱۳۹۲ ۱۲:۴۵ ب.ظ

دوستان تو رو خدا یکی بگه تشخیص نوع متغیرها و همچنینی بررسی اندیس آرایه مگه بر عهده تحلیلگر معنایی نیست؟؟؟