当前位置:首页 > 编译原理-实验3-LL(1)分析文法构造
六、实验小结
1、在本次实验中,通过设计、编制、调试一个递归下降语法分析程序,实现对词法分析程序所提供的单词序列进行语法检查和结构分析,掌握LL(1)分析法的基本原理、掌握LL(1)分析表的构造方法、掌握LL(1)驱动程序的构造方法;
2、通过本次实验,对LL(1)递归下降分析程序的构造和设计有了更为全面的认识,对LL(1)文法分析程序的实现有了进一步了解;
3、实验输入串以‘$’结束,才用栈的形式,依次弹出进行处理;
附录:程序代码:
#coding:utf-8
from prettytable import PrettyTable
def LL1(): global c,flag if(c=='E'): if(a[k]=='i' or a[k]=='('): table.add_row([a[k:], \ stack.append('X') stack.append('T') print stack c=stack.pop() else: error() flag=1 elif(c=='X'): if(a[k]=='+'): table.add_row([a[k:], \ stack.append('X') stack.append('T') stack.append('+') print stack c=stack.pop() elif(a[k]==')' or a[k]=='$'): table.add_row([a[k:], \ε\ print stack c=stack.pop()
else: error() flag=1 elif(c=='T'): if(a[k]=='i' or a[k]=='('): table.add_row([a[k:], \ stack.append('Y') stack.append('F') print stack c=stack.pop() else: error() flag=1 elif(c=='Y'): if(a[k]=='*'): table.add_row([a[k:], \ stack.append('Y') stack.append('F') stack.append('*') print stack c=stack.pop() elif(a[k]=='+' or a[k]==')' or a[k]=='$'): table.add_row([a[k:], \ε\ print stack c=stack.pop() else: error() flag=1 elif(c=='F'): if(a[k]=='i'): table.add_row([a[k:], \ stack.append('i') print stack c=stack.pop() elif(a[k]=='('): table.add_row([a[k:], \ stack.append(')') stack.append('E') stack.append('(') print stack c=stack.pop()
else: error() flag=1
def error(): global k
table.add_row([a[k], \ print stack k+=1
if __name__ == '__main__':
a=raw_input(\ a=a+'$'
for temp in a: if(temp!='i' and temp!='+' and temp!='*' and temp!='(' and temp!=')' and temp!='$'):
print \ exit(0)
table = PrettyTable([\ table.padding_width = 1 table.align[\ table.align[\ stack=[] k=0 flag=0
stack.append('$') stack.append('E')
table.add_row([a[k:],\ print stack c=stack.pop() while(c!='$'): if(c==a[k]): table.add_row([a[k+1:],'{'+a[k]+'}'+\ print stack k+=1 c=stack.pop() elif(c==')' and c!=a[k]): error() flag=1
break elif(flag==1): break
elif(a[k]=='$' and c=='$'): break else: LL1()
print table if(flag==0): print \else: print \
共分享92篇相关文档