您的位置:首页 > 其它

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

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

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

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

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

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

ParseObject

private ObjectExpression ParseObject(TokenReader src)

{

src.AssertAndAdvance(TokenId.LCurly);

ObjectExpression o = new ObjectExpression(src.CurTok);

string name = string.Empty;

while (src.CurTok.TokenId != TokenId.RCurly && !src.Eof)

{

switch (src.CurTok.TokenId)

{

case TokenId.Ident:

case TokenId.String:

{

name = src.CurTok.Data;

src.Advance();

break;

}

case TokenId.Colon:

{

src.Advance();

o.Add(name, ParseValue(src));

if (src.CurTok.TokenId == TokenId.Comma)

src.Advance();

break;

}

default:

{

throw new JSONException("Illegal JSON object.");

}

}

}

return o;

}

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

下一篇:

谈谈编译原理和其在WEB开发中的应用3
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: