(۱۷ اردیبهشت ۱۳۹۵ ۰۱:۵۳ ب.ظ)mohamad moo نوشته شده توسط: (17 اردیبهشت ۱۳۹۵ ۰۱:۵۲ ب.ظ)saeid1389 نوشته شده توسط: سوال یک کامپایلر
به علت برخورد first/follow ، گرامر (۱)LL نیست
پس تناقض داشت
شما LL(1) بودن رو دارید اشتباه تحلیل میکنید!
گرامری LL(1) هستش که تمام قواعد آن،برخورد first/first و برخورد first/follow نداشته باشه!
ّ
در این سوال گفته شده یکی از متغیر های گرامر A هستش که دارای قاعده تولید های [tex]A\: \rightarrow\: \alpha\: \mid\: \: \beta[/tex] هستش.(پس متغیرها و قواعد دیگه ای هم داره)...
از طرفی طبق فرض سوال :قاعده [tex]\alpha[/tex] میتونه لامبدا رو تولید کنه ولی [tex]\beta[/tex] لامبدا رو تولید نمیکنه!
و شرط اول سوال: [tex]first(\alpha)\: \cap\: \: first(\beta)\: =\: \varnothing[/tex] هستش ،پس یعنی این متغیر برخورد first/first نداره.
و شرط دوم سوال: [tex]follow(A)\: \cap\: \: first(\beta)\: =\: \varnothing[/tex] هستش، پس یعنی این متغیر برخورد First/Follow نداره!
همونطور که میدونید برخورد first/follow یعنی follow متغیر مورد نظر،اشتراکش با قاعده ای که لامبدا رو تولید نمیکنه،تهی باشه!!! که اینجا هم همینطوره!
و شرط سوم میگه که : [tex]follow(A)\: \cap\: \: first(A)\: \ne\: \varnothing[/tex] که هیچ مشکلی نداره و میتونه اتفاق بیفته!!بطور مثال گرامر زیر رو در نظر بگیرید:که هر سه شرط صورت سوال رو داره!
[tex]A\: \rightarrow\: BC\: \mid\: \: g[/tex]
[tex]B\: \rightarrow\: b\: \mid\: \: \lambda[/tex]
[tex]C\: \rightarrow\: dD\: \mid\: \: \lambda[/tex]
[tex]D\: \rightarrow\: Ab\: \mid\: \: \lambda[/tex]
در متغیر A:
[tex]First(\alpha)\: =\: First\: (BC)\: =\{b\: ,\: d\: ,\: \lambda\}[/tex]
[tex]First(\beta)\: =\: First\: (g)\: =\{g\}[/tex]
پس برخورد first/first نداره.
[tex]Follow(A)\: =\: \{\: \$\: ,\: \: b\}[/tex]
و چون [tex]Follow(A)\: \cap\: First(\beta)\: =\: \{\: \$\: ,\: b\}\: \cap\: \: \{g\}\: =\: \varnothing[/tex]
پس برخورد first/follow هم نداره در حالیکه [tex]Follow(A)\: \cap\: First(A)\: =\: \{\: \$\: ,\: b\}\: \cap\: \: \{b,c,\: \lambda\: ,\: g\}\: =\{b\}\: \ne\varnothing[/tex] هستش!
پس با این مثال مشخص شد که هر سه شرط سوال درست هستش و هیچ تناقضی نیست.وچون زوج قاعده A ، شرط LL(1) بودن رو نقض نمیکنه ،LL(1) بودن یا نبودن گرامر بستگی به قواعد دیگر گرامر داره.(که در متن سوال اشاره شده زوج قاعده A بخشی از قواعد یک گرامر است)