【编译原理】第三章语法分析
语法分析
根据词法单元的构成规则,对源代码文件的字符流进行了词法分析,由词法单元的模式 → 正则表达式 → DFA → 词法
语法分析就是根据一个个单词,让它们组成逻辑关系,语言规约是上下文无关语法
要进行语法分析,输入的是词素流,类似于这样,这是之前词法分析得到的结果
如何进行语法分析?
先引入一个概念,文法
文法
算术表达式文法
我们都知道算术表达式是什么,就是一个式子,式子和式子之间也能构成新的式子。算术运算表达式文法的构成因此有:
① E →num
② E →id
③ E →F
④ E →( E )
⑤ E →E / E
⑥ E →E * E
⑦ E →E - E
⑧ E →E + E
E代表算术表达式,num和id就不用多说了,代表数字和变量
语句的文法
上面引入了算术表达式文法,程序有很多的语句构成,一条语句的文法包含什么语句?
① S →T id ( L ) { Q } 函数实现语句
② S →T L; 变量定义语句
③ S →L = E; 赋值语句
④ S →while ( B ) Q while语句
⑤ S →return E 函数返回语句
⑥ S →return; 函数返回语句
程序的文法
最核心的部分,说明的一个程序的文法构成,下面讲解的
① P →Q 程序有语句序列构成
② Q →Q S 语句序列可以由语句序列和单个语句构成
③ Q →S 一个语句序列也可以只有由单个语句
④ Q →{ Q } 语句序列可以由{}括起来
⑤ S →T id ( L ) { Q }
⑥ S →T L;
⑦ S →L = E;
⑧ S →while ( B ) Q
⑨ S →return E;
P代表程序,Q代表语句序列,S代表单个语句,T代表预定义符,B代表逻辑表达式,E代表算术表达式,还有V,L,F…
语法分析树
语法分析的目标是验证词素流是否符合语法规则
语法分析树,很好的表现了语法的构成逻辑以及之后处理的过程
已知语言的文法,给定一个词素串,判定它是否符合文法,符合的话,得出语法分析树
语法分析的方式有自顶向下的语法分析:最左推导,最右推导,还有自底向上的语法分析
下面是词法分析和语法分析的区别,加深理解
2022/3/19更新,重要的是推导过程
上下文无关文法
对词法分析后的源程序:输入串(符号串);验证输入串符合文法吗?
不符号的话,就说明源程序有语法错误;输入串:id + id
符合的话,推导出输入串的语法分析树
语法分析分类两种方式:
- 自顶向下的语法分析:最左推导,最右推导
- 自底向上的语法分析
算术表达式的上下文无关文法举例(带优先级)
开始符号:树根非终结符号:E, T,F
终结符号:+,*,(,),id
产生式:从左到右:推导,分析;
从右到左:规约,归纳;
基于文法的推导
从根往下,任用产生式,进行细化的过程,直至树的叶结点不含非终结符号,仅含终结符号
自顶向下的语法分析,最右推导,以id +id *id为例
推导是从输入串的最右端(即末尾)开始逐一来匹配:不切实际
自顶向下的语法分析,最左推导,以id +id *id为例
推导是从输入串的最左端(即起始)开始逐一来匹配:切合实际
推导后:树中的叶结点,从左至右,组成的符号串,叫句型;如果句型中不含非终结符号,自然只含终结符号,那么就叫句子
文法就是所有句子的集合
最后是文法和正则表达式比较,用正则表达式表达的,用文法都能表达,但是括号配对的语法,正则表达式无法表达;但是文法语法树中出现了很多非终结符,效率比正则表达式低
如果写得不错就麻烦点个赞吧
【编译原理】第三章语法分析相关推荐
- 编译原理(三)语法分析:3.二义性与二义性的消除
文章目录 一.二义性 1.定义 2.原因 二.二义性的消除 1.改写二义文法为非二义文法 (1)步骤 (2)例子 (3)缺点 2.为文法符号规定优先级和结合性 3.修改语言的语法(表现形式被改变) [ ...
- 编译原理——第三章词法分析总结
词法分析 在词法分析这一章主要通过学习了词法分析.正规表达式和有限自动机来了解词法分析器的构造. 词法分析器是执行词法分析的程序.将源程序输入词法分析器后,词法分析器从左至右逐个字符的对源程序进行扫描 ...
- 【笔记】编译原理——第三章 词法分析
目录 编译过程结构框架 3.1 对于词法分析器的要求 3.1.1 词法分析器的功能和输出形式 3.1.2 词法分析器作为一个独立子程序 3.2 词法分析器的设计 3.2.1 输入.预处理 3.2.2 ...
- [编译原理]-----第三章 词法分析
文章目录 @[toc] 1. 有穷自动机(Finite Automata) (1). FA转换图 (2). 最长子串匹配原则 2. 有穷自动机的分类 (1). 确定的有穷自动机(DFA) (2). 非 ...
- 编译原理第三章 词法分析与有穷自动机
词法分析与有穷自动机 1.词法分析程序的功能 2.正规集.正规式.正规文法.确定的有穷自动机.不确定的有穷自动机的定义. 3.正规文法.有穷自动机.正规式三者之间的互相转换方法.不确定有穷自动机到确定 ...
- 文法分析——编译原理第三章、第四章
归约与推导 归约: 将产生式右部替换为产生式的左部. 推导:将产生式左部替换为产生式的右部. 最左推导 如下: 就是把最左边的非总结符号替换成终结符号. 文法的存储结构 class LinkNode ...
- 编译原理第四章练习题
目录 编译原理第四章作业 课本习题 补充习题 编译原理第四章作业 自己写的不包对,有错请指正 BY hllinyu 2023年3月31日 课本习题 编译原理 第三版 王生原- 清华大学出版社 的那本 ...
- 编译原理实验:自下而上语法分析
编译原理实验:自下而上语法分析 1. 实验题目:自下而上语法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3. 算法流程 4. 源程序 5. 调试数据 1. 实验题目:自下而上语法分析 ...
- 计算机组原理ppt,计算机组原理第三章.ppt
计算机组原理第三章 计算机组成原理 毛典辉 北京工商大学计算机与信息工程学院 Email: amaode@ 进一步结论: 当最高有效位产生进位而符号位无进位时,产生上溢: 当最高有效位无进位而符号位有 ...
- 设某微型计算机内存ram区,微机原理第三章习题.doc
微机原理第三章习题 第四章 指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式: (1) AND AX,0FFH (2) AND BL,[OFFH] (3) MOV ...
最新文章
- R语言字符串处理函数
- 第一次冲刺对各组的评价
- linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)
- 网络工程中,VLAN到底有什么作用?
- GBT19668.3-2007 电子设备机房系统工程监理规范
- python 并发_Python bin()
- php数据的导出到excel,php 数据的导出到excel表格-怎么将php数据导出excel
- amd玄冰400怎么拆图解_【装机帮扶站】第735期:“无货”当道的京东年底大预售来了(AMD篇)...
- 代码整洁之道 php,关于代码整洁之道的详细介绍
- 噪音达到多少分贝就算是扰民
- 上次的计网络课你是不是又旷课了
- IOS小知识点5之内存警告、循环引用、交叉引用
- android wifi传图片,「教程」将Mac电脑上的照片无线传到安卓手机上
- vs code python插件_vs code Python code runner配置 , 飞跃|Fly
- 微软原版系统安装Win7篇
- C 程序设计语言(第2版)
- 仿qq email界面 登陆
- Python 3 怎么快速搭建服务器
- 网易传媒计算机视觉算法实习生面试总结
- 数据的逻辑结构和数据的存储结构
热门文章
文章目录 一.二义性 1.定义 2.原因 二.二义性的消除 1.改写二义文法为非二义文法 (1)步骤 (2)例子 (3)缺点 2.为文法符号规定优先级和结合性 3.修改语言的语法(表现形式被改变) [ ...
词法分析 在词法分析这一章主要通过学习了词法分析.正规表达式和有限自动机来了解词法分析器的构造. 词法分析器是执行词法分析的程序.将源程序输入词法分析器后,词法分析器从左至右逐个字符的对源程序进行扫描 ...
目录 编译过程结构框架 3.1 对于词法分析器的要求 3.1.1 词法分析器的功能和输出形式 3.1.2 词法分析器作为一个独立子程序 3.2 词法分析器的设计 3.2.1 输入.预处理 3.2.2 ...
文章目录 @[toc] 1. 有穷自动机(Finite Automata) (1). FA转换图 (2). 最长子串匹配原则 2. 有穷自动机的分类 (1). 确定的有穷自动机(DFA) (2). 非 ...
词法分析与有穷自动机 1.词法分析程序的功能 2.正规集.正规式.正规文法.确定的有穷自动机.不确定的有穷自动机的定义. 3.正规文法.有穷自动机.正规式三者之间的互相转换方法.不确定有穷自动机到确定 ...
归约与推导 归约: 将产生式右部替换为产生式的左部. 推导:将产生式左部替换为产生式的右部. 最左推导 如下: 就是把最左边的非总结符号替换成终结符号. 文法的存储结构 class LinkNode ...
目录 编译原理第四章作业 课本习题 补充习题 编译原理第四章作业 自己写的不包对,有错请指正 BY hllinyu 2023年3月31日 课本习题 编译原理 第三版 王生原- 清华大学出版社 的那本 ...
编译原理实验:自下而上语法分析 1. 实验题目:自下而上语法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3. 算法流程 4. 源程序 5. 调试数据 1. 实验题目:自下而上语法分析 ...
计算机组原理第三章 计算机组成原理 毛典辉 北京工商大学计算机与信息工程学院 Email: amaode@ 进一步结论: 当最高有效位产生进位而符号位无进位时,产生上溢: 当最高有效位无进位而符号位有 ...
微机原理第三章习题 第四章 指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式: (1) AND AX,0FFH (2) AND BL,[OFFH] (3) MOV ...