语法分析

根据词法单元的构成规则,对源代码文件的字符流进行了词法分析,由词法单元的模式 → 正则表达式 → 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为例

推导是从输入串的最左端(即起始)开始逐一来匹配:切合实际

推导后:树中的叶结点,从左至右,组成的符号串,叫句型;如果句型中不含非终结符号,自然只含终结符号,那么就叫句子

文法就是所有句子的集合

最后是文法和正则表达式比较,用正则表达式表达的,用文法都能表达,但是括号配对的语法,正则表达式无法表达;但是文法语法树中出现了很多非终结符,效率比正则表达式低

如果写得不错就麻烦点个赞吧

【编译原理】第三章语法分析相关推荐

  1. 编译原理(三)语法分析:3.二义性与二义性的消除

    文章目录 一.二义性 1.定义 2.原因 二.二义性的消除 1.改写二义文法为非二义文法 (1)步骤 (2)例子 (3)缺点 2.为文法符号规定优先级和结合性 3.修改语言的语法(表现形式被改变) [ ...

  2. 编译原理——第三章词法分析总结

    词法分析 在词法分析这一章主要通过学习了词法分析.正规表达式和有限自动机来了解词法分析器的构造. 词法分析器是执行词法分析的程序.将源程序输入词法分析器后,词法分析器从左至右逐个字符的对源程序进行扫描 ...

  3. 【笔记】编译原理——第三章 词法分析

    目录 编译过程结构框架 3.1 对于词法分析器的要求 3.1.1 词法分析器的功能和输出形式 3.1.2 词法分析器作为一个独立子程序 3.2 词法分析器的设计 3.2.1 输入.预处理 3.2.2 ...

  4. [编译原理]-----第三章 词法分析

    文章目录 @[toc] 1. 有穷自动机(Finite Automata) (1). FA转换图 (2). 最长子串匹配原则 2. 有穷自动机的分类 (1). 确定的有穷自动机(DFA) (2). 非 ...

  5. 编译原理第三章 词法分析与有穷自动机

    词法分析与有穷自动机 1.词法分析程序的功能 2.正规集.正规式.正规文法.确定的有穷自动机.不确定的有穷自动机的定义. 3.正规文法.有穷自动机.正规式三者之间的互相转换方法.不确定有穷自动机到确定 ...

  6. 文法分析——编译原理第三章、第四章

    归约与推导 归约: 将产生式右部替换为产生式的左部. 推导:将产生式左部替换为产生式的右部. 最左推导 如下: 就是把最左边的非总结符号替换成终结符号. 文法的存储结构 class LinkNode ...

  7. 编译原理第四章练习题

    目录 编译原理第四章作业 课本习题 补充习题 编译原理第四章作业 自己写的不包对,有错请指正 BY hllinyu 2023年3月31日 课本习题 编译原理 第三版 王生原- 清华大学出版社 的那本 ...

  8. 编译原理实验:自下而上语法分析

    编译原理实验:自下而上语法分析 1. 实验题目:自下而上语法分析 实验目的 实验内容 实验要求 输入输出 2. 设计思想 3. 算法流程 4. 源程序 5. 调试数据 1. 实验题目:自下而上语法分析 ...

  9. 计算机组原理ppt,计算机组原理第三章.ppt

    计算机组原理第三章 计算机组成原理 毛典辉 北京工商大学计算机与信息工程学院 Email: amaode@ 进一步结论: 当最高有效位产生进位而符号位无进位时,产生上溢: 当最高有效位无进位而符号位有 ...

  10. 设某微型计算机内存ram区,微机原理第三章习题.doc

    微机原理第三章习题 第四章 指令与寻址方式习题解答 1.试分别说明下列各指令中源操作数和目的操作数使用的寻址方式: (1) AND AX,0FFH (2) AND BL,[OFFH] (3) MOV ...

最新文章

  1. R语言字符串处理函数
  2. 第一次冲刺对各组的评价
  3. linux踩内存内存越界,Linux如何调试内存泄漏?超牛干货奉献给你(代码全)
  4. 网络工程中,VLAN到底有什么作用?
  5. GBT19668.3-2007 电子设备机房系统工程监理规范
  6. python 并发_Python bin()
  7. php数据的导出到excel,php 数据的导出到excel表格-怎么将php数据导出excel
  8. amd玄冰400怎么拆图解_【装机帮扶站】第735期:“无货”当道的京东年底大预售来了(AMD篇)...
  9. 代码整洁之道 php,关于代码整洁之道的详细介绍
  10. 噪音达到多少分贝就算是扰民
  11. 上次的计网络课你是不是又旷课了
  12. IOS小知识点5之内存警告、循环引用、交叉引用
  13. android wifi传图片,「教程」将Mac电脑上的照片无线传到安卓手机上
  14. vs code python插件_vs code Python code runner配置 , 飞跃|Fly
  15. 微软原版系统安装Win7篇
  16. C 程序设计语言(第2版)
  17. 仿qq email界面 登陆
  18. Python 3 怎么快速搭建服务器
  19. 网易传媒计算机视觉算法实习生面试总结
  20. 数据的逻辑结构和数据的存储结构

热门文章

  1. 计算机视觉大型攻略 —— 立体视觉(4)立体匹配算法简介与SGM
  2. PackageManager的参数及使用
  3. Java小程序之你画我猜
  4. PDF 文件如何转换从可以编辑的文本和word
  5. Windows系统口令扫描之——使用NTScan扫描Windows口令
  6. 提供多种版本- MSI Code条形码字体具有可扩充性条形码控件MSI Plessey
  7. 谷歌翻译器 6.2.620 电脑版
  8. C++入侵电脑远程控制,体验一把做黑客的感觉!
  9. Windows 10 的快捷关机方式
  10. 2019年2月CNNIC第43次《中国互联网络发展状况统计报告》