转:谈谈编译原理和其在WEB开发中的应用2
2009-10-19 16:30
323 查看
上一篇谈到了词法分析,并且给了一小段词法分析上的代码。如果大家对着代码看,可能就会发现我构造了一个对象来对字符串进行读取。
具体代码是: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比较简单才可以用这样的方式来实现,其实不是,目前比较流行的编译器我们也可以用这样的方式来实现了,只是其结构会相对来说比较复杂一些而已。
具体代码是: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开发中的应用1
- 谈谈编译原理和其在WEB开发中的应用2
- 转:谈谈编译原理和其在WEB开发中的应用1 http://www.cnblogs.com/afxcn
- 转:谈谈编译原理和其在WEB开发中的应用3
- 谈谈编译原理和其在WEB开发中的应用3
- 用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解
- 用WEB技术栈开发NATIVE应用(二):WEEX 前端SDK原理详解
- web开发 php之 socket(TCP/IP)原理 学习、理解和应用
- 用WEB技术栈开发NATIVE应用:WEEX 前端SDK原理详解
- ZedGraph图形控件在Web开发中的应用
- 【斗医】【1】Web应用开发20天
- 【JavaWeb开发】初步实现网站应用钉钉扫码登录
- HTML5开发移动web应用—JQuery Mobile(2)-导航栏和页脚
- MyEclipse应用:WEB项目的开发
- 使用 IDEA + Maven + Git 快速开发 Java Web 应用
- Web表格应用系统开发套件
- iOS开发 -- KVO的实现原理与具体应用
- HTML5开发移动web应用—JQuery Mobile(1)
- Portal-Basic Java Web 应用开发框架(Portal-Basic v3.1.1 beta-1 示例工程发布)
- 理清 Web 应用的登录状态 | Web 应用开发实践