小鬼之家

流浪,游走于文明与原始之间. 关注底层技术,实现美好生活。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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

     具体代码是: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

posted on 2009-01-22 15:28  黄尚  阅读(673)  评论(0编辑  收藏  举报