动手实现Expression翻译器 – Part I   伴随.Net3.5到来的Expression,围绕着它产生了各种各样有趣的技术与应用,Linq to object.Linq to sql.Linq to sqllite.Linq to Anything啊~~各种舒爽不侧漏.当然Expression的应用肯定不会狭隘到只能在Linq查询里,只是它本身的性质很适合作为查询表达.不过本系列的目的只是实现自己的Expression翻译器,其他不做探讨. 一. 明确需求 a) 翻译什么(Expr…
伴随.Net3.5到来的Expression,围绕着它产生了各种各样有趣的技术与应用,Linq to object.Linq to sql.Linq to sqllite.Linq to Anything啊~~各种舒爽不侧漏.当然Expression的应用肯定不会狭隘到只能在Linq查询里,只是它本身的性质很适合作为查询表达.不过本系列的目的只是实现自己的Expression翻译器,其他不做探讨. 一. 明确需求 a) 翻译什么(Expression) b) 翻译成什么(What?) c) 怎么…
上一节我们了解了Linq查询大体上是如何运转的,并针对SQL表达式进行建模(DbExpression),这一节的重点在于如何将表达式转换为DbExpression. 可以说只要能生成结构清晰的DbExpression,我们的翻译器就已经成功了一半了.为了将表达式转换为DbExpression,我们需要遍历它们,分解它们,在这个过程中拿出我们需要的信息,去构建一个个符合逻辑的DbExpression对象,最终将这些DbExpression组合起来,就形成了一个结构清晰的查询. 一.表达式遍历器(E…
上一节实现了对TableExpression的解析,通过反射创建实例以及构建该实例的成员访问表达式生成了一个TableExpression,并将其遍历格式化为”Select * From TableName ”之类的SQL语句,本节继续对其他QueryExpression进行解析. 先回顾一下几个类的作用 ExpressionVisitor -- 用于遍历Expression DbExpressionVisitor -- 继承自ExpressionVisitor,并提供DbExpression的…
文章里的代码粘过来的时候格式有点问题,原因是一开始文章是在订阅号上写的(gamedev101,文末有二维码),不知道为啥贴过来就没了格式,还要手动删行号,就没搞了. 介绍下问题背景: 小说君正在参与的项目,服务端逻辑以C#为主. 之前的一篇文章,<公式计算机>也有提到,这个项目的服务端需要提供让策划写游戏业务的能力. 不过跟文章里的方案不同,最后策划用来写业务的语言是C#. 实践下来,策划写的业务分为两大类: 战斗相关的流程性质的逻辑.例如技能结算的流程性逻辑. 各模块中经常变动的运算逻辑.例…
之前看到奋斗前辈和时不我待前辈的自己动手写ORM系列博客,感觉讲解的通俗易懂,清晰透彻.作为一个菜鸟,闲来也想着自己写一个ORM,一来加深自己对 ORM的理解,以求对EF,NHibernate等ROM框架的使用能更加轻车熟路.二来也可在写ORM之时熟悉反射的应用场景,反射的优缺点,优化方 法,Lambda表达式,表达式树等.,对自己也是一个不错的锻炼. ORM的原理也就表映射,反射,拼接sql,缓存,Lambda进行方法调用.网上有很多源码参考和原理讲解,对着敲一敲完成一个简易的ORM并不是什么…
动手实验 实验 8: Windows应用商店API 2012年9月 简介 编写Windows应用商店应用最令人瞩目的理由之一是您可以方便地将它们发布到Windows应用商店.考虑到世界范围内目前有超过7亿台PC运行Windows 7,并且每台PC代表一个潜在的Windows 8升级,市场和收入潜力是巨大和多样的.鉴于收入分享计划将高达80%的销售收益分配给作者,开发者具有编写优秀应用并将它们提供给用户的充分动机. 应用商店具有灵活的盈利选项:您可以提供试用,一次性购买,应用内购买,第三方电子商务…
说起Lambda表达式,大家基本都很熟悉了,而表达式树(Expression Trees),则属于80%的工作中往往都用不到的那种技术,所以即便不是什么新技术,很多人对其理解都并不透彻.此文意图从表达式树基本技术点结合实际应用,逐步来看表达式树究竟是怎么一回事,希望能帮助读者彻底学会表达式树^_^ 一.初见表达式树Expression<TDelegate> 不妨回想一下,你第一次使用表达式树是在哪里呢,比如Expression<TDelegate>? 比如在linq查询中,常常用到…
Regular Expression Matching 看到正则就感觉头大,因为正则用好了就很强大.有挑战的才有意思. 其实没有一点思路.循环的话,不能一一对比,匹配模式解释的是之前的字符.那就先遍历模式把. ... 中间 n 次失败的提交 感觉代码逻辑很乱.重新捋一下再动手写. 找几个重点分析一下: Wrong Answer: Input: "aaa" "ab*a*c*a" Output: false Expected: true 调试 aaa ab*a*c*a…
atitit.自己动手开发编译器and解释器(2) ------语法分析,语义分析,代码生成--attilax总结 1. 建立AST 抽象语法树 Abstract Syntax Tree,AST) 1 2. 建立AST 语法树----递归下降(recursive descent)法 2 3. 语法分析概念 2 3.1. 上下文无关语言,非终结符(nonterminal symbol),终结符(terminal symbol).注 2 3.2. 最左推导.当然也有最右推导 3 3.3. 分支预测的…