zoukankan      html  css  js  c++  java
  • 谈谈编译原理和其在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

  • 相关阅读:
    You have new mail in /var/spool/mail/root
    ./configure: error: C compiler cc is not found
    XAMPP下MYSQL中文乱码问题的解决
    Linux服务器配置秘钥对连接
    linux根分区满了如何处理,查找大文件方法
    Linux下挂载windows的共享文件夹
    zabbix分布式监控系统安装配置
    远程桌面,身份验证错误:要求的函数不正确等解决办法
    Linux之Shell 脚本加密工具-shc
    Shell脚本监控专线Network并SendEmail报警
  • 原文地址:https://www.cnblogs.com/afxcn/p/1379932.html
Copyright © 2011-2022 走看看