词法分析、语法分析

本文详细介绍了词法分析的过程,包括词法分析器的工作原理、单词符号的种类,以及状态转换图的应用。随后讨论了语法分析方法,如自上而下的预测分析和自下而上的算符优先分析法,重点讲解了LL(1)文法的构造和预测分析表的构建。
摘要由CSDN通过智能技术生成

语法分析

词法分析器

词法分析的任务是:从左往右逐个字符地扫描源程序,产生一个个的单词符号。也就是说,它会对输入的字符流进行处理,再输出单词流。执行词法分析的程序即词法分析器,或者说扫描器。

词法分析的成果就是由一系列单词符号构成的单词流。单词符号其实就是 token,一般有6类:

  • 关键字:例如 whileifint
  • 标识符:变量名、常量名、函数名等
  • 常数:例如,100'text'TRUE
  • 运算符:例如 +*/
  • 界符:逗号,分号,括号,点等
  • 系统函数名    如 scanf、printf、getc等

词法分析器的输出时一个二元式:(单词种别,单词符号的属性值)

单词种别通常用整数编码表示
若一个种别只有一个单词符号,则种别编码就代表该单词符号。假定基本字、运算符和符都是一符一种。
若一个种别有多个单词符号,则对于每个单词符号,给出种别编码和自身的值。
标识符单列一种:标识符自身的值表示成按机器字节划分的内部码
常数按类型分种;常数的值则表示成标准的二进制形式。

词法分析器设计

 

 

 

词法分析器的设计工具---状态转换图

状态转换图

状态转换图的实现 

正规式与正规集

 

运算性质

e*=e﹢|⊱

确定有限自动机

状态转换矩阵:状态\字符 

 化简 

 

 

 

 

非确定有限自动机

为正规式构造NFA

状态转换图 

 

 

子集构造法确定化

  DFA和NFA区别

 

语法分析

  • 语法分析方法
    • 自下而上:算符优先分析法、LR分析法
    • 自上而下:递归下降分析法、预测分析程序

自上而下分析: 

 

面临的问题
  • 回溯问题
    • 分析过程中,当一个非终结符用某一个候选匹配成功时,这种匹配可能是暂时的
    • 因此如果在后续匹配中出错的话,不得不“回溯”

  • 文法左递归问题
    • 𝑃→𝑃𝛼,匹配过程会无限循环下去

消除左递归 

  • 核心思想:左递归变右递归

  • 例题

消除间接左递归

消除回溯

提取左公共因子

LL(1)文法:
 

构造不带回溯的自上而下分析算法:

消除文法的左递归

提取左公共因子,克服回溯 

从左到右扫描

最左推导

每一步只需向前查看一个符号

LL(1)分析法

构造FIRST、FOLLOW集合

FIRST(a):首终结符集。a能够推出的所有终结符串中位于串首的那些终结符构成的集合

FLLOW(a): 可以在某句型中紧跟在a后边的终结符构成的集合

G[E]:

E-------> TE’

E’------> +TE’ | ε

T--------> FT’

T’----------> *FT’ | ε

F ------------>(E) | i

先求出first集合

答案
first(E)    { ( , i }
first(E’)    { + , ε }
first(T)    { ( , i }
first(T’)    { *, ε }
first(F)    { (, i }
再求follow集合

答案
follow(E)    {#,)}
follow(E’)    {#,)}
follow(T)    {+,#,)}
follow(T’)    {+,),#}
follow(F)    {*,+,),#}

预测分析程序

 构造预测分析表:

一般来说, 预测分析表可以用矩阵M表示:
(1)矩阵的行表示非终结符号
(2)列表示终结符号和#(结束符号)
(3)矩阵元素M(U,a)表示非终结符号U+输入符号a时,向下推导所应该采取的产生式。

构造预测分析表的步骤
(1)对每个终结符a∈FIRST(a),将A->a加到M[A,a]中。
(2)如果ε∈FIRST(a),则对于任何b∈FOLLOW(A),将A->a加到M[A,b]中。
(3)表格填完后仍然空缺的位置表明没有对应的产生式,即:非终结符号U+输入符号a无法继续向下推导,所以将空缺的位置填写错误信息。(一般默认,可以不写)

自下而上:

基本思想

从输入串开始,逐步归约,直到文法的开始符号

归约:根据文法的产生式规则,把串中出现的产生式的右部替换成左部符号

从树叶节点开始,构造语法树

语法树

短语

直接短语:只有一层孩子节点

素短语:1、直接短语2、至少包含一个终结符3、除它自身外不包含任何更小的素短语

句柄:最左直接短语

算符优先分析法

则运算的优先规则 先乘除后加减,同级从左到右

优先关系

 

构造优先关系表

例: 

 

LR分析法

规范规约:句柄作为可规约串
                        
从左到右

逆向完成,最右推导,向右查看输入串符合的个数

内容来源

编译原理学习笔记-3:词法分析(一)基本过程、正规式和有限自动机-腾讯云开发者社区-腾讯云 (tencent.com) 编译原理_中国大学MOOC(慕课) (icourse163.org)

[编译原理] 期末复习,求FIRST集和FOLLOW集。简单易懂,例题讲解。_first和follow求法例题-CSDN博客

编译原理:LL(1)文法-构造预测分析表_ll(1)分析表-CSDN博客

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值