当前位置: 首页 > news >正文

wordpress直接发送密码邯郸seo优化公司

wordpress直接发送密码,邯郸seo优化公司,七个2wordpress,广西住房和城乡建设厅网站证件简介#xff1a; 本文针对上图的功能详细图#xff0c;进行逐个的简单介绍#xff1a;代码入口、代码的主要逻辑和算法。 调用代码实例 //本文以helloworld案例,开启了两个打印日志的参数#xff0c;实际使用通常不建议打开。 boolean printParseLog true;//语法分析日志开…简介 本文针对上图的功能详细图进行逐个的简单介绍代码入口、代码的主要逻辑和算法。 调用代码实例 //本文以helloworld案例,开启了两个打印日志的参数实际使用通常不建议打开。 boolean printParseLog true;//语法分析日志开关 boolean printExecu… 本文针对上图的功能详细图进行逐个的简单介绍代码入口、代码的主要逻辑和算法。 调用代码实例 //本文以helloworld案例,开启了两个打印日志的参数实际使用通常不建议打开。 boolean printParseLog true;//语法分析日志开关 boolean printExecuteLog true;//每一条指令执行开关 ExpressRunner runner new ExpressRunner(false, printParseLog); IExpressContextString, Object context new DefaultContextString, Object(); String script sum0;for(i0;i10;ii1){sumsumi;};return sum;; Object result runner.execute(script, context, null,true, printExecuteLog); System.out.println(result); //结果输出45一、自上而下debug代码 1、整体调用代码入口 // ExpressRunner.java /*** 执行一段文本* param expressString 程序文本* param context 执行上下文* param errorList 输出的错误信息List* param isCache 是否使用Cache中的指令集* param isTrace 是否输出详细的执行指令信息* param aLog 输出的log* return* throws Exception*/ public Object execute(String expressString, IExpressContextString,Object context,ListString errorList, boolean isCache, boolean isTrace, Log aLog)throws Exception {InstructionSet parseResult null;if (isCache true) {parseResult expressInstructionSetCache.get(expressString);if (parseResult null) {synchronized (expressInstructionSetCache) {parseResult expressInstructionSetCache.get(expressString);if (parseResult null) {parseResult this.parseInstructionSet(expressString);expressInstructionSetCache.put(expressString,parseResult);}}}} else {parseResult this.parseInstructionSet(expressString);}return InstructionSetRunner.executeOuter(this,parseResult,this.loader,context, errorList,isTrace,false,aLog,false); } 1两个步骤 综上所述ExpressRunner.execute()实质分成两个步骤 //1编译成指令集过程string - InstructionSet parseResult this.parseInstructionSet(expressString);//2指令集执行过程InstructionSet context -Object InstructionSetRunner.executeOuter(this,parseResult,this.loader,context, errorList,isTrace,false,aLog,false)2指令集缓存 只要调用 ExpressRunner.execute() 的isCache的入参 parseInstructionSet调用完的结果就会被缓存在ExpressRunner实例的内部对象里 private Map expressInstructionSetCache 2、脚本编译过程compile //ExpressRunner.java /*** 解析一段文本生成指令集合* param text* return* throws Exception*/public InstructionSet parseInstructionSet(String text){//1token分解Word[] words WordSplit.parse(this.nodeTypeManager.splitWord,express);//2token解析ListExpressNode tempList this.transferWord2ExpressNode(rootExpressPackage,words,selfDefineClass,true);//3匹配AST语法树QLMatchResult result QLPattern.findMatchStatement(this.nodeTypeManager, this.nodeTypeManager.findNodeType(PROGRAM).getPatternNode(), tempList,0);result.getMatchs().get(0).buildExpressNodeTree();ExpressNode root (ExpressNode)result.getMatchs().get(0).getRef();resetParent(root,null);//4生成指令集合InstructionSet result createInstructionSet(root, main);}0输入文本 sum0;for(i0;i10;ii1){sumsumi;};return sum; 1token分解 分解为Word[]“sum””“”0“”;“,“for”,“(”,“i”,… 2token解析 Word[]转化为List《ExpressNode》:每一个word变得有意义常量、变量、符号、分割符号 3匹配AST语法树 根据KeyWordDefine4Java.java定义的推导文法匹配成一棵AST抽象语法树ExpressNode 4生成指令集合 1:LoadAttr:sum 2:LoadData 0 3:OP : OPNUMBER[2] 4:openNewArea 5:clearDataStack 6:LoadAttr:i 7:LoadData 0 8:OP : OPNUMBER[2] 9:clearDataStack 10:LoadAttr:i 11:LoadData 10 12:OP : OPNUMBER[2] 13:GoToIf[false,isPoptrue] 13 ...... 29:return [value]3、脚本执行过程execute //ExpressRunner.java /*** 批量执行指令集合指令集间可以共享 变量和函数 */public static Object execute(ExpressRunner runner,InstructionSet sets,ExpressLoader loader,IExpressContextString,Object aContext, ListString errorList,boolean isTrace,boolean isCatchException,boolean isReturnLastData,Log aLog,boolean isSupportDynamicFieldName)throws Exception {//缓存池中创建context对象InstructionSetContext context OperateDataCacheManager.fetchInstructionSetContext (true,runner,aContext,loader,isSupportDynamicFieldName);//缓存池中获取RunEnvironment对象RunEnvironment environmen OperateDataCacheManager.fetRunEnvironment(set,(InstructionSetContext) context, isTrace);try {//执行每一条指令CallResult tempResult set.excute(environmen, context, errorList,isReturnLastData, aLog);if (tempResult.isExit() true) {result tempResult.getReturnValue();}} catch (Exception e) {//...}return result;} }二、使用归纳总结 QLExpress属于弱类型脚本语言一般不推荐声明局部变量的类型。语法编译阶段不会做类型校验也不会做方法的参数校验所以很灵活。 QLExpress的这套自定义的指令集属于解析执行RunEnvironment中通过programPoint函数指针的跳转来实现每条指令的逐个计算通过dataContainer作为栈来存储中间计算结果。 QLExpress定义的指令类型比较少粒度比较粗但是足够完成所有的语法功能。 QLExpress整个运算过程是通过threadLocal来保证线程安全的。 QLExpress的脚本编译过程比较耗时但是是上下文无关的所以同一个脚本运行缓存之后性能提升非常明显。 QLExpress指令计算运算过程中基本不会new新对象是通过缓存池技术来尽量减少资源的消耗。 QLExpress的宏functionOperator变量是非常开放的名字可以为中文字符也可以随意扩展还可以通过脚本静态分析出包含哪些变量、函数很方便的进行二次业务开发。 脚本调用classLoader资源的时候可以import也可以使用类的全路径构造函数、静态方法、对象方法、类的字段、函数的不定参数调用统统搞定。 本文来自 https://developer.aliyun.com/article/700198
http://www.hkea.cn/news/14365834/

相关文章:

  • 深圳微商城网站设计网站音乐播放代码
  • 长沙网站优化技巧老鹰画室网站哪家做的
  • 企业网站建设营销建设景区网站要有的内容
  • 建设职业技术学院官网宁波网站推广网站优化
  • 做的好的地方网站打电话沟通做网站
  • asp企业网站自助建站系统免费版超漂亮版阿里云服务器 放多个网站
  • diy网站网络推广专员
  • 网站开发的教学网站网站模板前台后台
  • 郑州企业网站开发做网站教程pdf
  • 华为云建站官网网站颜色编号
  • 自己在本地建的网站 别人怎么访问教程免费下载现成ppt网站
  • 国内企业建站模板泉州公司网页制作
  • 贵州省兴义市专做网站公司网站建设模拟软件
  • 建设银行征信中心个人信用查询官方网站伍佰亿网站怎么样
  • 电子商务网站建设实习网站建设需要多少钱小江
  • 东莞做网站要多少钱网站需求分析文档
  • 医疗网站建设计划书建设通银行官方网站
  • 一级a做爰片手机电影网站手机网页设计app
  • wordpress新站不收录河源做网站的客户
  • 杭州网站建设电话定制网站的价格低
  • 个人博客网站怎么赚钱网页游戏平台有哪些
  • 低价网站建设费用预算有园林案例的网站
  • 宝德科技专业嘉兴网站建设网站开发维护计入什么费用
  • 大连外贸网站建设郑州网站高端网站设计
  • 国外最炫酷网站旅游网站的首页怎么做
  • 做钓鱼网站要具备什么提供佛山顺德网站建设
  • 企业网站空间买虚拟主机竞价网站建设
  • 冀州网站建设价格婚纱网站设计目标
  • 单招网是哪个网站制作公司做的网络推广客户渠道
  • 遵义公司网站搭建多少钱wordpress 4