作业十一——LL(1)文法的判断,递归下降分析程序

作业十一——LL(1)文法的判断,递归下降分析程序

判断是否为LL(1)文法

选取有多个产生式的求select,只有一条产生式的无需求select

同一个非终结符之间求交集,全部判断为空后则为LL(1)文法

求FIRST集

是每条产生式右边所出现的首个终结符的集合

求FOLLOW集

是针对非终结符,找到产生式右边跟在非终结符后的终结符,#为输入串的结束符

求SELECT集

当产生式不推导出ε时,就为FIRST 当产生式推到出ε时,就为(FIRST(A->ε)-{ε})∪FOLLOW{A}

2.法消除左递归之后的表达式文法是否是LL(1)文法?

3.接2,如果是LL(1)文法,写出它的递归下降语法分析程序代码

E() {
	T();
	E'();
}
E'(){ 
		if('+') {
			matchtoken(+);
			T();
			E();
		} else if (')','#') {
		}//为空串时
		else {
			errot;
			exit(0);
		}//错误提示
	}

T() {
		F();
		T'();
	}

T'() {
		if('*') {
				matchtoken(*);
				F();
				T'();
			}
		else if ('+',')','#')
			{}//为空串时
		else{
				errot;exit(0);
			}//错误提示
			}
F(){
		if('('){
			E();
			if(')'){
			        }
			else{
				errot;exit(0);
			}//错误提示
			}
		else if('i'){  
		     matchtoken(i);  
		}
		else{
				errot;exit(0);
			}//错误提示
			}

  

4.加上实验一的词法分析程序,形成可运行的语法分析程序,分析任意输入的符号串是不是合法的表达式。

原文地址:https://www.cnblogs.com/cyxxixi/p/11907056.html