主观题:变量的消除左递归
(1)@[](6)请解释什么是变量的左递归、直接左递归、间接左递归。
(2)@[](6)请分析下列三种文法的产生式,分别写出哪个变量存在直接/间接左递归,或者所有变量都不存在左递归的情况(注意:要有具体分析)。
* 1)G[E]: E → c|+E|-E|E+E |EE| (E)
* 2)G[S]: S→AS|BS;A→Sa|Bb;B→Sb|Aa
* 3)G[Z]: Z→RS;R→aAc;A→aAc|bBb;S→aSb|ε;B→bB|ε
(3)@[](3)已知文法G[T]:T→T0|T1|2|3,消除左递归后的文法为G[T']:\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_\_,其中V={T’,A},(注:填写格式为G[T']:T'→XXX|YYY;A→XXX|YYY)
答案:(1)(6分)通过若干步推导,能对某个文法推出A=>Ab,则称为A变量含有左递归(2分);则只通过推导一步,就能推出A=>Ab,称为A变量含有直接左递归(2分);若通过推导2步及2步以上,则称为A变量含有间接左递归(2分)。
(2)(6分=2+2+2)1)E:直接左递归 2)S、A、B:间接左递归()3)不存在递归情况
(3)(3分)T’→2|3|2A|3A A→0A|1A|0|1 (3分,符号正确1分,每个式子1分)