چند مفهوم مرتبط :
مجموعه محدود از علامتها:Alphabet
: دنباله محدود از علامتهاstring
مجموعه محدود یا نامحدود از الفبا: )language) زبان
رشته حاصل از حذف صفر یا بیشتر علائم از انتهای رشته: (prefix) پیشوند رشته
رشته حاصل از حذف یک پیشوند و یا یک پسوند را زیر رشته می گویند.: sub string
: اگر طول رشته برابر صفر باشد گوئیم رشته تهی است و با (null string)
نمایش می دهند.
رشته حاصل از حذف صفر یا بیشتر علائم از ابتدای رشته: (suffix) پسوند رشته
عملیات روی زبانها:اگرL وm دو زبان باشند می توان عملیات زیر را برای آنها تعریف کرد .
1)LU M ={S| S€L OR S € M }
2)L.M={ST | S€L AND T€M }
3) L*=L0 U L1 U L2 U ……. Li = Uni=0 Li
4) L+= L1 U L2 U ……. Li = Uni =1 Li
ادامه مطلب
ا
الگو: (Pattern)
الگو به شکل های مختلفی از یک توکن که می تواند به خود بگیرد اطلاق می شود و به عبارت دیگر
در ورودی رشته هایی وجود دارد که توکن یکسانی برای آن ها تشخیص داده شده می شود .فرم کلی
این رشته ها توسط الگو یا Pattern توکن توصیف می شود.
واژه: (Lexeme)
به دنباله ای از کاراکتر ها (نویسه ها) که تشکیل یک توکن را می دهند واژه یا Lexeme
گفته می شود.
کوچکترین عضوی که یک اسکنر می گیرد.
مثال: نحوه ای از کار اسکنر If textvar = 123 then
X := Y ;
برنامه باید یک جامعیت داشته باشد که بتواند Lexemeرا تشخیص دهد و آن را به
توکن معادلش تبدیل کند.
الگو ها هستند که مشخص می کنند هر توکن به چه صورت باشد والگو باعث می شود که بین
if و textvar تفاوت را بفهمیم. وبدانیم کدام متغیر است و کدام کلمه کلیدی.
ورودی اسکنر Lexeme و پردازش Pattern و خروجی اسکنر Token است.
اولین قدم برای تشخیص توکن تعریف Pattern است .
ادامه مطلب
یک پذیرنده ماشینی است که یک رشته را از یک زبان می گیردو در انتها می گوید که این رشته متعلق
به آن زبان هست یا نه.
حالت کلی پذیرنده (ماشینautomata)
(شکل1)
تشخیص دهنده Recognizer))
برای تشخیص اینکه یک جمله متعلق به یک زبان است یا نه دو راه وجود دارد .
1) Pars tree استفاده از درخت نحو
2) Derivation یا بسط جمله
حل کنیم .ابتدا بررسی می کنیم آیا می توانیم اشتقاق دهیم یا نه .
S→AB : قاعده 1
aA|a → A : 2 و3
bB|b → B : 4و5
V={s,A,B} T={a,b} روش اول
اشتقاق در یک مرحله → Derivation
S →AB (1
→ aAB (2
→aaB (3
→aabB (4
→aabbB (4
→aabbb (5
روش دوم :درخت اشتقاق جمله فوق بر طبق گرامر فوق .(شکل 2)
پیمایش درخت بدست آمده (پارس) در برگ ها انجام می شود.
ادامه مطلب
نظریه زبان
اصطلاحات:
الفبا:یک مجموعه محدود از علامت ها
{1 و 0 }=∑ ←الفبا
مثال :عضویت . زیر مجموعه . مجموعه ی جهانی و... در مورد الفبا صدق می کند.
رشته : دنباله ای از علامات می باشد . مثال : abc
طول رشته :طول علامات می باشد . مثال : 3= |abc|
رشته تهی: رشته ای با طول صفر که با λ نمایش داده می شود.
مثال: 0= | λ|
عملگر های روی یک رشته : عملگر اتصال یا con cat و یا ادغام می باشد
مثال : x = abb و y=bb ← x.y = abbbb
اگر طول رشته با صفر ضرب شود برابر خودش می شود . x= λ .x = x . λ
عملگر معکوس :( reverse) x =abb → X^R=bba
زبان : مجموعه ای محدود یا نا محدود از رشته ها
مثال : L1={aa,abb,bab} L2={a,b,bb,aa}
الفبای زبان فارسی نامحدود است .
یک زبان است ولی نامحدود نیست ← L3={a,aa,aaa,…..}
عملگر روی زبان ها : ما گفتیم که زبان یک مجموعه است پس باید خاصیت مجموعه
در زبان ها صدق کند.
1) اجتماع union L1 U L2={x| x € L1 or x € L2}
2) اشتراک L1 ∩L2={x| x € L1 and x € L2}
3)اتصال L1.L2={xy| x € L1and y € L2 }
ادامه مطلب
پویش گر (scanner):
به واحدی از کامپایلر گفته می شود که کار تحلیل واژه را انجام می دهد.
Parser :
به واحدی از کامپایلر می گویند که تحلیل نحوی را انجام می دهد . parser
درخت پارس را تولید می کند. (شکل 2)
نکته 1 : وظیفه L.A تشخیص کاراکترها و جمع کردن کاراکترها کنار هم و
تحویل لغت یا کلمه به فاز بعدی است.
نکته 2 : تحلیل گر نحوی یا S.A جملات را می گیرد اگر مشکلی نداشته
باشد در جایگذاری در قسمت اول یعنی L.A تک تک کاراکترها را می گیرد
همچنین در قسمت S.A جمله را از نظر قاعده درست بررسی می کند
سپس در قسمت تحلیل گر معنایی جمله از نظر مفهومی بررسی می
شود.
ادامه مطلب
کامپایلر چیست؟
برنامه ای است که متن یک برنامه به زبان برنامه نویسی a را دریافت نموده و پس از اعمال
تغییراتی خاص روی آن بطوریکه معنا و مفهوم آن عوض نشود به زبان برنامه نویسی b تبدیل می کند.
(شکل 1-1)
مهم این است که ما یکسری قوانین داشته باشیم که متن a را به متن b تبدیل کند.
ما در کامپایلر یکسری پیام و هشدار داریم یعنی اگر در برنامه ورودی خطائی داشته باشیم کامپایلر
هشدار می دهد و ممکن است خطا بگیرد.برنامه مبدا راsource program و برنامه مقصد را target
program می گویند.
برنامه مبدا با زبان سطح بالا پس از کامپایل در مقصد با زبان سطح پایین تبدیل می شود.
هر چه برنامه به زبان ماشین نزدیک تر باشد سرعت هم بیشتر می شود.
نکته 1 : اگر تمام داده های ورودی مورد نیاز کامپایلر فراهم باشد , کامپایلر می تواند عمل مشخص شده
