首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

QLExpress脚本语言技术讲授(2) -QL的基本执行过程

2012-08-21 
QLExpress脚本语言技术讲解(2) -----QL的基本执行过程?安装好maven 执行eclipse命令,导入eclipse 之后,运

QLExpress脚本语言技术讲解(2) -----QL的基本执行过程

[2012-02-20 22:07:07,844] [main] (ExpressParse.java:486) DEBUG com.ql.util.express.parse.ExpressParse - 执行的表达式:10 * 10 + 1 + 2 * 3 + 5 * 2[2012-02-20 22:07:07,844] [main] (ExpressParse.java:487) DEBUG com.ql.util.express.parse.ExpressParse - 单词分解结果:{10},{*},{10},{+},{1},{+},{2},{*},{3},{+},{5},{*},{2}[2012-02-20 22:07:07,844] [main] (ExpressParse.java:491) DEBUG com.ql.util.express.parse.ExpressParse - 预处理后结果:{10},{*},{10},{+},{1},{+},{2},{*},{3},{+},{5},{*},{2}[2012-02-20 22:07:07,860] [main] (ExpressParse.java:502) DEBUG com.ql.util.express.parse.ExpressParse - 单词分析结果:10:CONST_INTEGER,*:*,10:CONST_INTEGER,+:+,1:CONST_INTEGER,+:+,2:CONST_INTEGER,*:*,3:CONST_INTEGER,+:+,5:CONST_INTEGER,*:*,2:CONST_INTEGER[2012-02-20 22:07:07,860] [main] (ExpressParse.java:506) DEBUG com.ql.util.express.parse.ExpressParse - Block拆分后的结果:1:   main:FUNCTION_DEFINE                                                         FUNCTION_DEFINE2:      10:CONST_INTEGER CONST2:      *:* *2:      10:CONST_INTEGER CONST2:      +:+ +2:      1:CONST_INTEGER CONST2:      +:+ +2:      2:CONST_INTEGER CONST2:      *:* *2:      3:CONST_INTEGER CONST2:      +:+ +2:      5:CONST_INTEGER CONST2:      *:* *2:      2:CONST_INTEGER CONST[2012-02-20 22:07:07,860] [main] (ExpressParse.java:511) DEBUG com.ql.util.express.parse.ExpressParse - 语句拆分后的结果:1:   main:FUNCTION_DEFINE                                                         FUNCTION_DEFINE2:      ;:; STAT_SEMICOLON_EOF3:         10:CONST_INTEGER CONST3:         *:* *3:         10:CONST_INTEGER CONST3:         +:+ +3:         1:CONST_INTEGER CONST3:         +:+ +3:         2:CONST_INTEGER CONST3:         *:* *3:         3:CONST_INTEGER CONST3:         +:+ +3:         5:CONST_INTEGER CONST3:         *:* *3:         2:CONST_INTEGER CONST[2012-02-20 22:07:07,860] [main] (ExpressParse.java:520) DEBUG com.ql.util.express.parse.ExpressParse - 最后的语法树:1:   main:FUNCTION_DEFINE                                     FUNCTION_DEFINE2:      ;:; STAT_SEMICOLON_EOF3:         +:+ EXPRESS_LEVEL54:            +:+ EXPRESS_LEVEL55:               +:+ EXPRESS_LEVEL56:                  *:* EXPRESS_LEVEL47:                     10:CONST_INTEGER CONST7:                     10:CONST_INTEGER CONST6:                  1:CONST_INTEGER CONST5:               *:* EXPRESS_LEVEL46:                  2:CONST_INTEGER CONST6:                  3:CONST_INTEGER CONST4:            *:* EXPRESS_LEVEL45:               5:CONST_INTEGER CONST5:               2:CONST_INTEGER CONST[2012-02-20 22:07:07,860] [main] (ExpressRunner.java:491) DEBUG com.ql.util.express.ExpressRunner - 1:LoadData 102:LoadData 103:OP : * OPNUMBER[2]4:LoadData 15:OP : + OPNUMBER[2]6:LoadData 27:LoadData 38:OP : * OPNUMBER[2]9:OP : + OPNUMBER[2]10:LoadData 511:LoadData 212:OP : * OPNUMBER[2]13:OP : + OPNUMBER[2][2012-02-20 22:15:36,090] [main] (InstructionConstData.java:25) DEBUG com.ql.util.express.instruction.detail.Instruction - LoadData 10[2012-02-20 22:15:36,090] [main] (InstructionConstData.java:25) DEBUG com.ql.util.express.instruction.detail.Instruction - LoadData 10[2012-02-20 22:15:36,090] [main] (InstructionOperator.java:40) DEBUG com.ql.util.express.instruction.detail.Instruction - *(10,10)[2012-02-20 22:15:36,105] [main] (InstructionConstData.java:25) DEBUG com.ql.util.express.instruction.detail.Instruction - LoadData 1[2012-02-20 22:15:36,105] [main] (InstructionOperator.java:40) DEBUG com.ql.util.express.instruction.detail.Instruction - +(100,1)[2012-02-20 22:15:36,105] [main] (InstructionConstData.java:25) DEBUG com.ql.util.express.instruction.detail.Instruction - LoadData 2[2012-02-20 22:15:36,105] [main] (InstructionConstData.java:25) DEBUG com.ql.util.express.instruction.detail.Instruction - LoadData 3[2012-02-20 22:15:36,105] [main] (InstructionOperator.java:40) DEBUG com.ql.util.express.instruction.detail.Instruction - *(2,3)[2012-02-20 22:15:36,105] [main] (InstructionOperator.java:40) DEBUG com.ql.util.express.instruction.detail.Instruction - +(101,6)[2012-02-20 22:15:36,105] [main] (InstructionConstData.java:25) DEBUG com.ql.util.express.instruction.detail.Instruction - LoadData 5[2012-02-20 22:15:36,105] [main] (InstructionConstData.java:25) DEBUG com.ql.util.express.instruction.detail.Instruction - LoadData 2[2012-02-20 22:15:36,105] [main] (InstructionOperator.java:40) DEBUG com.ql.util.express.instruction.detail.Instruction - *(5,2)[2012-02-20 22:15:36,105] [main] (InstructionOperator.java:40) DEBUG com.ql.util.express.instruction.detail.Instruction - +(107,10)表达式计算:10 * 10 + 1 + 2 * 3 + 5 * 2 = 117


由这个简单的例子,我们看到了整个QL的执行过程:

单词分解-->单词类型分析-->语法分析-->生成运行期指令集合-->执行生成的指令集合。


其中前4个过程涉及语法的匹配运算等非常耗时,所以我们看到了 execute方法的??isCache 是否使用Cache中的指令集参数,它可以缓存前四个过程
即把 expressString 本地缓存乘一段指令,第二次重复执行的时候直接执行指令,极大的提高了性能。

?

热点排行