自顶向下语法分析器。。。。。。。
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
递归下降程序分析和 LL(1)分析一般地都要求计算先行集合,它们分别称作 First 集合和 Follow 集合。由于无需显式地构造出这些集合就可以构造出简单的自顶向下的分 析程序。 1、LL(1)文法
LL(1)文法是一类可以进行确定的自顶向下语法分析的文法。就是要求描述语言的文 法是无左递归的和无回溯的。根据 LL(1)文法的定义,对于同一非终结符 A 的任意两个产 生式 A:=a 和 A:=b,都要满足:SELECT(A:=a )∩SELECT(A:=b)=Ø。这样,当前非终结符 A 面临输入符 a 时,如果 a∈SELECT(A:=a),则可以选择产生式 A:=a 去准确匹配。
如本程序中举例说明的 a.txt 的文法就是一个 LL(1)文法: S:=aBc|bAB A:=aAb|b
编译原理课程设计报告
1 系统概论
语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础 上,分析并判定程序的语法结构是否符合语法规则。语法分析器在编译程序中的地位如 图 1 所示:
图 1 语法分析器在编译程序中的地位
语言的语法结构是用上下文无关文法描述的。因此,语法分析器的工作本质上就是 按文法的产生式,识别输入符号串是否为一个句子。这里所说的输入串是指由单词符号 (文法的终结符)组成的有限序列。对一个文法,当给你一串(终结)符号时,怎样知 道它是不是该文法的一个句子呢?这就要判断,看是否能从文法的开始符号出发推导出 这个输入串。或者,从概念上讲,就是要建立一棵与输入串相匹配的语法分析树。
实现这种自顶向下的带回溯试探法的一个简单途径是让每个非终结符对应一个递归 子程序。每个这种子程序可作为一个布尔过程。一旦发现它的某个候选与输入串相匹配, 就用这个候选去扩展语法树,并返回“真”值;否则,保持原来的语法树和 IP 值不变, 并返回“假”值。
-1-
2 需求分析
编译原理课程设计报告
以前,人们对语法的分析都建立在人工的基础上,人工分析虽然能够做到侧类旁推, 但终究人力有限,再精密的分析都会出现或多或少的错误。为减少因人为产生的错误, 并加快语法的分析,故设计了这个自顶向下的语法分析器。人们只要运行程序,输入几 个简单的命令或语法,就能求出人们所需要的各种结果。虽然程序设计有一定的局限性, 但在这个局限中却能如人们的要求对语法进行分析,从而在一定程度上帮助人们更好的 完成工作。
自顶向下分析法就是语法分析办法中的一类。顾名思义,自顶向下就是从文法的开 始符号出发,向下推导,推出句子。这种方法是带“回溯”的。
自顶向下分析的主旨是,对任何输入串,试图用一切可能的办法,从文法开始符号 (根结)出发,自上而下地为输入串建立一棵语法树。或者说,为输入串寻找一个最左 推导。这种分析过程本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的 过程。
5.1 程序运行平台 ............................................................ 5 5.2 程序中所有定义的函数 .................................................... 5 5.3 文档说明 ................................................................ 7 5.4 调试分析 ................................................................ 7 6 课程设计总结 ............................................................... 12 参考文献 ..................................................................... 12 附录:重要代码 ............................................................... 13
4.1 程序流程图 .............................................................. 4 5 使用说明 .................................................................... 5
编译原理课程设计
课程设计题目 :自顶向下语法分析器
姓 名: 院(系) : 专业班级 : 学 号: 指导教师 : 设计来自百度文库期 :
目录
1 系统概论 .................................................................... 1 2 需求分析 .................................................................... 2 3 系统设计 .................................................................... 2 4 系统实现 .................................................................... 4
3 系统设计
自顶向下的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。之所以 称这样的算法为自顶向下是由于分析树隐含的编号是一个前序编号,而且其顺序是由根 到叶自顶向下的分析程序有两类:回溯分析程序(backtracking parser)和预测分析程 序(predictive parser)。预测分析程序试图利用一个或多个先行记号来预测出输入串 中的下一个构造,而回溯分析程序则试着分析其他可能的输入,当一种可能失败时就要 求输入中备份任意数量的字符。虽然回溯分析程序比预测分析程序强大许多,但它们都 非常慢,一般都在指数的数量级上,所以对于实际的编译器并不合适。
LL(1)文法是一类可以进行确定的自顶向下语法分析的文法。就是要求描述语言的文 法是无左递归的和无回溯的。根据 LL(1)文法的定义,对于同一非终结符 A 的任意两个产 生式 A:=a 和 A:=b,都要满足:SELECT(A:=a )∩SELECT(A:=b)=Ø。这样,当前非终结符 A 面临输入符 a 时,如果 a∈SELECT(A:=a),则可以选择产生式 A:=a 去准确匹配。
如本程序中举例说明的 a.txt 的文法就是一个 LL(1)文法: S:=aBc|bAB A:=aAb|b
编译原理课程设计报告
1 系统概论
语法分析是编译过程的核心部分。它的任务是在词法分析识别出单词符号串的基础 上,分析并判定程序的语法结构是否符合语法规则。语法分析器在编译程序中的地位如 图 1 所示:
图 1 语法分析器在编译程序中的地位
语言的语法结构是用上下文无关文法描述的。因此,语法分析器的工作本质上就是 按文法的产生式,识别输入符号串是否为一个句子。这里所说的输入串是指由单词符号 (文法的终结符)组成的有限序列。对一个文法,当给你一串(终结)符号时,怎样知 道它是不是该文法的一个句子呢?这就要判断,看是否能从文法的开始符号出发推导出 这个输入串。或者,从概念上讲,就是要建立一棵与输入串相匹配的语法分析树。
实现这种自顶向下的带回溯试探法的一个简单途径是让每个非终结符对应一个递归 子程序。每个这种子程序可作为一个布尔过程。一旦发现它的某个候选与输入串相匹配, 就用这个候选去扩展语法树,并返回“真”值;否则,保持原来的语法树和 IP 值不变, 并返回“假”值。
-1-
2 需求分析
编译原理课程设计报告
以前,人们对语法的分析都建立在人工的基础上,人工分析虽然能够做到侧类旁推, 但终究人力有限,再精密的分析都会出现或多或少的错误。为减少因人为产生的错误, 并加快语法的分析,故设计了这个自顶向下的语法分析器。人们只要运行程序,输入几 个简单的命令或语法,就能求出人们所需要的各种结果。虽然程序设计有一定的局限性, 但在这个局限中却能如人们的要求对语法进行分析,从而在一定程度上帮助人们更好的 完成工作。
自顶向下分析法就是语法分析办法中的一类。顾名思义,自顶向下就是从文法的开 始符号出发,向下推导,推出句子。这种方法是带“回溯”的。
自顶向下分析的主旨是,对任何输入串,试图用一切可能的办法,从文法开始符号 (根结)出发,自上而下地为输入串建立一棵语法树。或者说,为输入串寻找一个最左 推导。这种分析过程本质上是一种试探过程,是反复使用不同产生式谋求匹配输入串的 过程。
5.1 程序运行平台 ............................................................ 5 5.2 程序中所有定义的函数 .................................................... 5 5.3 文档说明 ................................................................ 7 5.4 调试分析 ................................................................ 7 6 课程设计总结 ............................................................... 12 参考文献 ..................................................................... 12 附录:重要代码 ............................................................... 13
4.1 程序流程图 .............................................................. 4 5 使用说明 .................................................................... 5
编译原理课程设计
课程设计题目 :自顶向下语法分析器
姓 名: 院(系) : 专业班级 : 学 号: 指导教师 : 设计来自百度文库期 :
目录
1 系统概论 .................................................................... 1 2 需求分析 .................................................................... 2 3 系统设计 .................................................................... 2 4 系统实现 .................................................................... 4
3 系统设计
自顶向下的分析算法通过在最左推导中描述出各个步骤来分析记号串输入。之所以 称这样的算法为自顶向下是由于分析树隐含的编号是一个前序编号,而且其顺序是由根 到叶自顶向下的分析程序有两类:回溯分析程序(backtracking parser)和预测分析程 序(predictive parser)。预测分析程序试图利用一个或多个先行记号来预测出输入串 中的下一个构造,而回溯分析程序则试着分析其他可能的输入,当一种可能失败时就要 求输入中备份任意数量的字符。虽然回溯分析程序比预测分析程序强大许多,但它们都 非常慢,一般都在指数的数量级上,所以对于实际的编译器并不合适。