• 谈谈编译原理和其在WEB开发中的应用2


      上一篇谈到了词法分析,并且给了一小段词法分析上的代码。如果大家对着代码看,可能就会发现我构造了一个对象来对字符串进行读取。

         具体代码是:CharReader src = new CharReader(chars);

         这样子写是为了减少在后面的while语句对字符串数组末尾的判断,起到简化代码的作用;这样的小技巧在写一些比较复杂的算法的时候特别的重要。

         实现完词法分析之后我们就要进行到下一步的语法分析了。教科书的的语法分析一般都是教我们怎么去实现一个抽象语法树,而我个人比较喜欢用所谓的面向对象的方式去实现它,这样子的实现方式代码看起来比较直观,而且扩展也相对容易一些。

      语法分析的前提是我们首先要构建出对应的对象结构。

     

    ExpressionNode

         ExpressionNode是我们的对象结构的最基本的对象,所有的其它的对象都来继承于它。

    ObjectExpression

      ObjectExpression 对象对应的是JSON里的Object对象。

    ArrayExpression

      ArrayExpression 对象对应的是JSON里的Array对象。

    NullPrimitive

      NullPrimitive 对应的是null值。BooleanPrimitive、IntPrimitive、DoublePrimitive、StringPrimitive 所代表的东西一眼就能看出来,不再贴代码,可以自己对着代码去看。

          构建完对象后要进行的工作那就是最终的分析了。JSON的value是最具有普遍性的对象之一,我们就先实现它,代码如下:

    ParseValue

      其次是对数组的分析:

    ParseArray

      再接着是对Object对象的分析:

    ParseObject

      这样子整个语法分析的过程就已经完成,大家可能认为是因为json比较简单才可以用这样的方式来实现,其实不是,目前比较流行的编译器我们也可以用这样的方式来实现了,只是其结构会相对来说比较复杂一些而已。

    下一篇:

    谈谈编译原理和其在WEB开发中的应用3

  • 相关阅读:
    getopt函数
    Pac的OI回忆录
    Python embed包使用
    Git add . Git add * 的区别
    Linux Python升级版本至2.7.5
    Linux6.3升级zlib
    一: Centos 虚拟机安装
    4.4 SpringCloud__服务注册与发现Eureka__自我保护机制
    4.3 SpringCloud__服务注册与发现Eureka__高可用集群配置
    4.2 SpringCloud__服务注册与发现Eureka__搭建注册中心
  • 原文地址:https://www.cnblogs.com/afxcn/p/1379932.html
Copyright © 2020-2023  润新知