在之前,我们有对编译器做过一定的介绍,我们认为编译器是具有一定流水线结构的软件系统。它可以分为前端,中端和后端这样的不同的阶段。

编译器前端

对于我们正在研究的前端,我们已经通过词法分析的学习掌握了从将源程序转化为记号流的过程。

对于之后的语法分析器阶段,我们在编译器设计的早期,只实现了分析源程序是否合法,如果不合法就返回程序的出错信息给程序员,退出源程序的编译过程。程序员对代码进行修改后就重启该编译过程,重新进行词法分析和语法分析...。在后期的编译器设计过程中,我们的语法分析过程就通常需要生成一个抽象语法树的中间表示。该语法书输出到后续阶段,用于语义分析器或者代码生成器进行进一步的处理。这样的新设计使语法分析器能够更加专注于自己的任务,将语义检测和代码生成的任务交给后续阶段再来进行处理。

语法分析器是前端比较核心的模块,负责处理程序员输入的程序,产生编译器后端需要使用的第一个非常核心的数据结构——抽象语法树。

单独提出语法分析器的模块如下,输入是记号流,输出是语法书。

语法分析器是以语言的语法规则为准则对从记号流输入的语法进行分析的。

举个语法错误处理的例子:

对于上面的程序,如果进行语法分析,可以得到如下的语法错误:

  • 第一行缺少右圆括号,
  • 第二行缺少分号
  • 第四行,得到了一个逗号而不是期待得到的分号

在举一个语法书的构建的例子

如果程序员根据上面得到的反馈信息对源代码进行修改,使其能够得到一个可以通过语法分析器的代码,该代码显示如下:

语法分析会接着对语法分析通过的代码存入内存,由于对如此显示的字符串的存储后续的处理会过于麻烦,所以我们需要对其构造一定的数据结构,我们通常选用语法树的数据结构。语法树显示如下:

对这样的一个代码分析完成后,我们返回的是该树的根节点的指针。

语法分析是编译器中第一个做切分的阶段,将程序员所写的字符串变化到相应的树状结构上。

语法分析的路线图

  • 数学理论:上下文无关文法(CFG)

    • 描述语言语法规则的数学工具
  • 自顶向下分析
    • 递归下降分析算法(预测分析算法)
    • LL 分析算法
  • 自底向上分析
    • LR 分析算法

原文链接:

  • 编译原理 - 网易云课堂

java实现语法分析器_语法分析 | 语法分析的任务相关推荐

  1. Java中语法分析器_语法分析器(java语法分析器)

    亲这是一款采用递归下降语法分析器,是一种适合手写语法编译器的方法,且非常简单.递归下降法对语言所用的文法有一些限制,但递归下降是现阶段主流的语法分析方法,因为它可以由开发人员高度控制,在提供错误信息方 ...

  2. java实现语法分析器_200 行 JS 代码,带你实现代码编译器

    一.前言 对于前端同学来说,编译器可能适合神奇的魔盒 ,表面普通,但常常给我们惊喜. 编译器,顾名思义,用来编译,编译什么呢?当然是编译代码咯 . 其实我们也经常接触到编译器的使用场景: React ...

  3. java抽象语法树_抽象语法树(AST)

    抽象语法树(AST) 最近在做一个类JAVA语言的编译器,整个开发过程,用抽象语法树(Abstract SyntaxTree,AST)作为程序的一种中间表示,所以首先就要学会建立相对应源代码的AST和 ...

  4. java抽象语法树_抽象语法树AST的全面解析(一)

    Javac编译概述 将.java源文件编译成.class文件,这一步大致可以分为3个过程: 1.把所有的源文件解析成语法树,输入到编译器的符号表: 2.注解处理器的注解处理过程: 3.分析语法树并生成 ...

  5. java基本语法借阅_课内资源 - 基于Java和MySql实现的光盘借阅管理系统

    一.需求设计以下几个类:光盘类:用户类:借阅记录类,包括下列模块: 新建.修改.删除光盘信息 新建.修改.删除用户信息 光盘借阅/归还信息记录 查询光盘名称,用户的借阅历史 要求:基于JFrame窗体 ...

  6. 编写递归下降语法分析器_面试BAT必问的JVM,今天我们来说一说它类加载器的底层原理...

    类加载器的关系 类加载器的分类 JVM支持两种类加载器,一种为引导类加载器(Bootstrap ClassLoader),另外一种是自定义类加载器(User Defined ClassLoader) ...

  7. java基础语法试题_请问有没有java基础语法的练习题?发个链接吧!?

    01.默写holloWorld案例 02.使用三元运算符求三个数的最大值; 03.键盘录入两个数,求出两个数是否相等; 04.键盘录入一个成绩.输出该成绩属于哪个档次;(80-100优秀,70-80良 ...

  8. python编写语法解析器_SLR语法分析器 python实现

    一.语法分析器做什么 语法分析是根据某种给定的形式文法对由单词序列(如英语单词序列)构成的输入文本进行分析并确定其语法结构的一种过程. 一个语法分析器从词法分析器获得一个词素序列,并验证这个序列是否可 ...

  9. 编译原理-5-LL(1)语法分析器

    LL(1)语法分析器 1. 什么是LL(1)语法分析器 自顶向下的.递归下降的.预测分析的.适用于LL(1)文法的LL(1)语法分析器 自顶向下构建语法分析树 根节点是文法的起始符号SSS 每个中间节 ...

最新文章

  1. React 深入系列3:Props 和 State
  2. Tachyon 0.7.1伪分布式集群安装与测试
  3. python(40):利用utf-8编码判断中文英文字符
  4. 【数据挖掘】决策树算法简介 ( 决策树模型 | 模型示例 | 决策树算法性能要求 | 递归创建决策树 | 树根属性选择 )
  5. 统一修改文件下所有图片大小 Python3
  6. 他们为什么融资上市?因为用好了……
  7. 零基础入门学习Python,我与python的第一次亲密接触后的感受
  8. Android 系统(153)--- M上默认接入点apn显示
  9. iOS --- [持续更新中] iOS移动开发中的优质资源
  10. dll创建及调用(VS2005)
  11. Pycharm快速入门(5) — Python解释器和环境配置
  12. 采用文件白名单方式构建主机安全环境
  13. 推荐个我在用的免费翻译软件,支持多家翻译API整合
  14. 机器学习之二分类模型评价指标
  15. 论文阅读《Revisiting Domain Generalized Stereo Matching Networks from a Feature Consistency Perspective》
  16. 以太网交换机和路由器的区别(转载)
  17. hdu5745 La Vie en rose(暴力)
  18. 树莓派CM4_5G扩展板搭载展锐国货5G在Kali系统下免驱即插即用演示
  19. 家政服务:保姆朋友圈鄙视链在上海
  20. 【RNG vs SKT】弹幕的自然语言的初步分析

热门文章

  1. 统计学习方法第七章作业:SVM非线性支持向量机之SMO序列最小优化算法代码实现
  2. 技术干货 | 高性能短链设计与实现
  3. Android 截屏监听(截图分享功能实现)
  4. 记录Nginx模块开发
  5. 通过jS打包下载图片
  6. 解决ftp上传connection reset错误
  7. 推荐:制作地图的网站和工具
  8. webbench 代码阅读
  9. 新浪微博-企业微博运营手册
  10. MapInfo之格式说明(转载)