基于VC++的LL(1)语法分析器设计与实现学号:070108109基于VC++的LL(1)语法分析器设计与实现作者姓名:晏丽智指导老师:王一宾摘要:语法分析是编译过程的核心部分,可以粗略的分为自上而下分析法和自下而上分析法
LL(1)文法是一类可以进行确定的自上而下语法分析的文法
本文首先阐述了LL(1)文法的基本理论,然后着重讨论了LL(1)语法分析器的设计,最后用VC++实现了LL(1)语法分析器
关键词:LL(1)文法,FIRST集,FOLLOW集,预测分析表0引言语法分析是编译过程的核心部分,它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则
LL(1)文法是一类可以进行确定的自上而下语法分析的文法
本文讨论了LL(1)语法分析器的工作原理和过程,重点说明了FIRST集、FOLLOW集以及预测分析表的构造
1LL(1)语法分析器的基本理论1
1理论基础语法分析是编译过程的核心部分,它的任务是在词法分析识别出单词符号串的基础上,分析并判定程序的语法结构是否符合语法规则
语法分析器工作本质:按文法的产生式,识别输入符号串是否为一个句子,判断是否能从文法的开始符号出发推导出这个输入串
LL(1)文法是一类可以进行确定的自上而下语法分析的文法
自上而下分析方法的基本思想是从文法的开始符号出发,向下推导,推出句子;即对任何输入串,试图用一切可能的办法,从文法开始符号出发,自上而下地为输入串建立一棵语法树[1]
实现这种自上而下分析法存在许多困难,首先是递归问题,一个文法是含有左递归的,如果存在非终结符P,有PPa,则含有左递归的文法将使上述的自上而下的分析过程陷入无限循环
因此,使用自上而下分析法必须消除文法的左递归
其次是回溯问题
由于回溯造成的匹配虚假现象,把已经做的一大堆语义工作推倒重来
这些事情既麻烦又费时间,所以,最好应设法消除