Compiler
Compiler
1
شناسنامه منبع
پيغام خطا
نحوي
تحليلنحوي
تحليل
معنايي
تحليلمعنايي
تحليل
خطا
كنندهخطا
ادارهكننده مياني نماد
جدولنماد
مديرجدول
مدير
اداره كدمياني
توليدكد
توليد
كد
سازكد
بهينهساز
بهينه
نهايي
كدنهايي
توليدكد
توليد
ایجاد درخت نحو با استفاده از Yنشانه های تولید شده در
مرحله قبل
هدف
فراهم کردن شناسایی سریع رکورد شناسه به منظور ذخیره و بازیابی
صفات آن
Mov
Mov id,
id,R2
R2 Mov id2 , R1
Mul
Mul 50.0, ,R2
50.0 R2 Add R2, R1
Mov R1, id1
Mov R1, id1
Lookahead به آخرین توکن شناسایی شده عالمت پیش بینی یا
Symbolگفته می شود.
.1بهتر است پارسرها به گونه ای پیاده سازی شوند که نیازی به پیجویی نداشته باشند
.2پارسرهایی که عملیات عقبگردرا انجام نمی دهند پارسرهای پیشگو می گویند.
.3روش کار پارسرها به صورت حریصانه می باشد یعنی با دریافت هر توکن تا جایی که ممکن است
رخترا بسط می دهند و هنگامی که ممکن نشد توکن بعدیرا درخواست می کنند.
در گره nبا غیر پایانه Aیکی از قواعد گرامر که Aدر سمت چپ آن قرار دارد را .1
انتخاب کرده و سمت راست این قاعده را به عنوان فرزنداYن گره nدر درخت پارس
قرار میدهیم.
گره بعدی را که از آنجا یک زیر درخت دیگر باید ایجاد شود را پیدا می کنیم .2
First(cAd) = {c}
First(S) = {c}
First(A) = {a}
A → Aα
رYوش های پارس باال به پایین رYا نمی توان برYای
گرامرهای چپ گرد استفاده کرد.
دلیل؟(تمرین)
گرامر حاصل:
'A → β1A' | β2A' | … | βnA
A' → α1A' | α2A' | … | αmA' | ε
پس از فاکتورگیری:
)First(X اگر قاعده ای بصورت Xεدر گرامر باشد εرا به .2
اضافه می کنیم.
First(A) = {a}
First(B) = { c,b,d }
First(C) = {ε , c }
First(*FT') = { * } , First(ε) = { ε } , { ε } ∩ { * } = ф
First(*FT') = { * } , Follow(T') = { $,),+ } , { * } ∩ { $,),+ } = ф
First((E)) = { ( } , First(id) = { id } , { ( } ∩ { id } = ф
روش حل مسئله:
رYوش Panic Mode
Id + * ( ) $
E 1 1 S S
E` 2 3 3
T 4 S 4 S S
T` 6 5 6 6
F 8 S S 7 S S
.1عملیات انتقال(:)Shift
عالئم ورودی را به انباره اضافه میکنیم .تا زمانی که دستگیره در باالی انباره
تشخیص داده شود
.2عملیات کاهش(:)Reduce
دستگیره در باالی انباره را حذف و به جای آن غیر پایانه سمت چپ قاعده مربوطه
را قرار می دهیم
.3قبول ورودی()Accept
.4تشخیص خطا()Error