hqchart 1.1.12693 → 1.1.12708

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/package.json +15 -47
  2. package/src/jscommon/readmo.txt +2 -2
  3. package/src/jscommon/umychart.resource/js/codemirror/javascript.js +1 -1
  4. package/.babelrc +0 -6
  5. package/.vscode/settings.json +0 -4
  6. package/Makefile +0 -9
  7. package/README.md +0 -452
  8. package/index.js +0 -17
  9. package/postcss.config.js +0 -5
  10. package/src/index.html +0 -18
  11. package/src/jscommon/backup/announcement.png +0 -0
  12. package/src/jscommon/backup/announcement2.png +0 -0
  13. package/src/jscommon/backup/blocktrading.png +0 -0
  14. package/src/jscommon/backup/investor.png +0 -0
  15. package/src/jscommon/backup/pforecast.png +0 -0
  16. package/src/jscommon/backup/research.png +0 -0
  17. package/src/jscommon/backup/tradedetail.png +0 -0
  18. package/src/jscommon/backup/umychart - backup.js +0 -17631
  19. package/src/jscommon/backup/umychart.macro.js +0 -4
  20. package/src/jscommon/backup/umychart.macro.vue.js +0 -3
  21. package/src/jscommon/commonindextree.json +0 -92
  22. package/src/jscommon/index.html +0 -13
  23. package/src/jscommon/jschinamapdata.js +0 -3
  24. package/src/jscommon/phoneHorizontal/hengping.css +0 -283
  25. package/src/jscommon/phoneHorizontal/phone.html +0 -448
  26. package/src/jscommon/phoneHorizontal/rem.js +0 -28
  27. package/src/jscommon/umychart.NetworkFilterTest.js +0 -48803
  28. package/src/jscommon/umychart.aliYunnetwork.js +0 -47
  29. package/src/jscommon/umychart.cninfo.components/readme.txt +0 -1
  30. package/src/jscommon/umychart.complier.js +0 -25293
  31. package/src/jscommon/umychart.complier.node/umychart.complier.controller.js +0 -559
  32. package/src/jscommon/umychart.complier.node/umychart.complier.node.js +0 -7043
  33. package/src/jscommon/umychart.complier.node/umychart.data.node.js +0 -816
  34. package/src/jscommon/umychart.console.js +0 -12
  35. package/src/jscommon/umychart.deal.js +0 -1452
  36. package/src/jscommon/umychart.dragdiv.js +0 -48
  37. package/src/jscommon/umychart.index.data.js +0 -4132
  38. package/src/jscommon/umychart.js +0 -90542
  39. package/src/jscommon/umychart.keyboard.js +0 -1659
  40. package/src/jscommon/umychart.listctrl.js +0 -690
  41. package/src/jscommon/umychart.mind.js +0 -2203
  42. package/src/jscommon/umychart.network.js +0 -44
  43. package/src/jscommon/umychart.news.js +0 -823
  44. package/src/jscommon/umychart.node.build/buildall.bat +0 -1
  45. package/src/jscommon/umychart.node.build/umychart.node.bat +0 -1
  46. package/src/jscommon/umychart.node.build/umychart.node.export.js +0 -40
  47. package/src/jscommon/umychart.regressiontest.js +0 -400
  48. package/src/jscommon/umychart.report.js +0 -5803
  49. package/src/jscommon/umychart.scrollbar.js +0 -1345
  50. package/src/jscommon/umychart.stock.js +0 -4218
  51. package/src/jscommon/umychart.style.js +0 -625
  52. package/src/jscommon/umychart.testdata.js +0 -150
  53. package/src/jscommon/umychart.uniapp.build/buildall.bat +0 -1
  54. package/src/jscommon/umychart.uniapp.build/umychart.bat +0 -1
  55. package/src/jscommon/umychart.uniapp.build/umychart.export.js +0 -70
  56. package/src/jscommon/umychart.user.js +0 -137
  57. package/src/jscommon/umychart.version.js +0 -30
  58. package/src/jscommon/umychart.vue/umychart.aliYunnetwork.vue.js +0 -56
  59. package/src/jscommon/umychart.vue.build/buildall.bat +0 -4
  60. package/src/jscommon/umychart.vue.build/copy_codemirror.bat +0 -2
  61. package/src/jscommon/umychart.vue.build/umychart.aliYunnetwork.vue.export.js +0 -9
  62. package/src/jscommon/umychart.vue.build/umychart.dragdiv.bat +0 -1
  63. package/src/jscommon/umychart.vue.build/umychart.dragdiv.export.js +0 -6
  64. package/src/jscommon/umychart.vue.build/umychart.index.data.bat +0 -1
  65. package/src/jscommon/umychart.vue.build/umychart.index.data.export.js +0 -4
  66. package/src/jscommon/umychart.vue.build/umychart.listctrl.vue.export.js +0 -15
  67. package/src/jscommon/umychart.vue.build/umychart.regressiontest.vue.export.js +0 -7
  68. package/src/jscommon/umychart.vue.build/umychart.regressiontest.wechat.export.js +0 -12
  69. package/src/jscommon/umychart.vue.build/umychart.stock.bat +0 -1
  70. package/src/jscommon/umychart.vue.build/umychart.stock.vue.export.js +0 -16
  71. package/src/jscommon/umychart.vue.build/umychart.testdata.bat +0 -3
  72. package/src/jscommon/umychart.vue.build/umychart.testdata.vue.export.js +0 -7
  73. package/src/jscommon/umychart.vue.build/umychart.vue.bat +0 -8
  74. package/src/jscommon/umychart.vue.build/umychart.vue.export.js +0 -112
  75. package/src/jscommon/umychart.vue.components/empyt.vue +0 -51
  76. package/src/jscommon/umychart.vue.components/historydayline.vue +0 -240
  77. package/src/jscommon/umychart.vue.components/jsloader.adddialog.vue +0 -315
  78. package/src/jscommon/umychart.vue.components/jsloader.vue +0 -93
  79. package/src/jscommon/umychart.vue.components/jsvuecontainer.vue +0 -160
  80. package/src/jscommon/umychart.vue.components/jsvuecontainer2.0.vue +0 -391
  81. package/src/jscommon/umychart.vue.components/login.vue +0 -178
  82. package/src/jscommon/umychart.vue.components/queryContent.vue +0 -750
  83. package/src/jscommon/umychart.vue.components/readme.txt +0 -8
  84. package/src/jscommon/umychart.vue.components/searchsymbol.vue +0 -299
  85. package/src/jscommon/umychart.vue.components/simulatetrade.vue +0 -1471
  86. package/src/jscommon/umychart.vue.components/stockchart.vue +0 -343
  87. package/src/jscommon/umychart.vue.components/stockchartV2.vue +0 -195
  88. package/src/jscommon/umychart.vue.components/stockdeal.vue +0 -358
  89. package/src/jscommon/umychart.vue.components/stockdealcount.vue +0 -262
  90. package/src/jscommon/umychart.vue.components/stockdeallastest.vue +0 -316
  91. package/src/jscommon/umychart.vue.components/stockdrawtool.vue +0 -343
  92. package/src/jscommon/umychart.vue.components/stockfull.vue +0 -355
  93. package/src/jscommon/umychart.vue.components/stockinfo.demo.vue +0 -153
  94. package/src/jscommon/umychart.vue.components/stockinfo.vue +0 -685
  95. package/src/jscommon/umychart.vue.components/stockkline.demo.vue +0 -1904
  96. package/src/jscommon/umychart.vue.components/stockmultiorder.vue +0 -174
  97. package/src/jscommon/umychart.vue.components/stockmultiperiod.vue +0 -222
  98. package/src/jscommon/umychart.vue.components/stockorder.vue +0 -320
  99. package/src/jscommon/umychart.vue.components/stocktradeinfo.demo.vue +0 -250
  100. package/src/jscommon/umychart.vue.components/stocktradeinfo.vue +0 -1907
  101. package/src/jscommon/umychart.vue.components/test.vue +0 -0
  102. package/src/jscommon/umychart.wechat/getDate.wechat.js +0 -91
  103. package/src/jscommon/umychart.wechat/lighter.news.wechat.js +0 -262
  104. package/src/jscommon/umychart.wechat/readme.txt +0 -3
  105. package/src/jscommon/umychart.wechat/umychart.analyze.wechat.js +0 -551
  106. package/src/jscommon/umychart.wechat/umychart.apidraw.wechat.js +0 -126
  107. package/src/jscommon/umychart.wechat/umychart.bigV.wechat.js +0 -2510
  108. package/src/jscommon/umychart.wechat/umychart.chartframe.wechat.js +0 -2942
  109. package/src/jscommon/umychart.wechat/umychart.chartpaint.wechat.js +0 -9752
  110. package/src/jscommon/umychart.wechat/umychart.charttitle.wechat.js +0 -2023
  111. package/src/jscommon/umychart.wechat/umychart.complier.wechat.js +0 -14726
  112. package/src/jscommon/umychart.wechat/umychart.console.wechat.js +0 -8
  113. package/src/jscommon/umychart.wechat/umychart.coordinatedata.wechat.js +0 -3654
  114. package/src/jscommon/umychart.wechat/umychart.data.wechat.js +0 -2243
  115. package/src/jscommon/umychart.wechat/umychart.element.wechart.js +0 -132
  116. package/src/jscommon/umychart.wechat/umychart.explainer.wechat.js +0 -1077
  117. package/src/jscommon/umychart.wechat/umychart.extendchart.wechat.js +0 -1140
  118. package/src/jscommon/umychart.wechat/umychart.framesplit.wechat.js +0 -2247
  119. package/src/jscommon/umychart.wechat/umychart.hqIndexformula.wechat.js +0 -941
  120. package/src/jscommon/umychart.wechat/umychart.index.data.wechat.js +0 -3628
  121. package/src/jscommon/umychart.wechat/umychart.index.wechat.js +0 -4074
  122. package/src/jscommon/umychart.wechat/umychart.klineinfo.wechat.js +0 -836
  123. package/src/jscommon/umychart.wechat/umychart.markethot.js +0 -50
  124. package/src/jscommon/umychart.wechat/umychart.network.wechart.js +0 -62
  125. package/src/jscommon/umychart.wechat/umychart.news.wechat.js +0 -3568
  126. package/src/jscommon/umychart.wechat/umychart.regressiontest.wechat.js +0 -412
  127. package/src/jscommon/umychart.wechat/umychart.report.wechat.js +0 -3983
  128. package/src/jscommon/umychart.wechat/umychart.resource.wechat.js +0 -919
  129. package/src/jscommon/umychart.wechat/umychart.shareimage.wechat.js +0 -681
  130. package/src/jscommon/umychart.wechat/umychart.simulatetrade.wechat.js +0 -238
  131. package/src/jscommon/umychart.wechat/umychart.stock.wechat.js +0 -4035
  132. package/src/jscommon/umychart.wechat/umychart.style.wechat.js +0 -419
  133. package/src/jscommon/umychart.wechat/umychart.uniapp.canvas.helper.js +0 -99
  134. package/src/jscommon/umychart.wechat/umychart.user.wechat.js +0 -588
  135. package/src/jscommon/umychart.wechat/umychart.userlog.wechat.js +0 -240
  136. package/src/jscommon/umychart.wechat/umychart.vedio.wechat.js +0 -112
  137. package/src/jscommon/umychart.wechat/umychart.version.wechat.js +0 -36
  138. package/src/jscommon/umychart.wechat/umychart.wechat.3.0.js +0 -12055
  139. package/src/jscommon/umychart.wechat/umychart.wechat.js +0 -15460
  140. package/src/jscommon/umychart.worker.js +0 -114
  141. package/src/jscommon/umychart.ws.stock.js +0 -110
  142. package/src/jscommon/umychart_python/.vscode/launch.json +0 -15
  143. package/src/jscommon/umychart_python/__init__.py +0 -4
  144. package/src/jscommon/umychart_python/build.cmd +0 -2
  145. package/src/jscommon/umychart_python/setup.py +0 -25
  146. package/src/jscommon/umychart_python/umychart_cache_testcase.py +0 -165
  147. package/src/jscommon/umychart_python/umychart_complier_data.py +0 -781
  148. package/src/jscommon/umychart_python/umychart_complier_help.py +0 -175
  149. package/src/jscommon/umychart_python/umychart_complier_job.py +0 -193
  150. package/src/jscommon/umychart_python/umychart_complier_jsalgorithm.py +0 -4144
  151. package/src/jscommon/umychart_python/umychart_complier_jscomplier.py +0 -177
  152. package/src/jscommon/umychart_python/umychart_complier_jsexecute.py +0 -517
  153. package/src/jscommon/umychart_python/umychart_complier_jsparser.py +0 -864
  154. package/src/jscommon/umychart_python/umychart_complier_jssymboldata.py +0 -1238
  155. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_cache.py +0 -146
  156. package/src/jscommon/umychart_python/umychart_complier_jssymboldata_json.py +0 -106
  157. package/src/jscommon/umychart_python/umychart_complier_pandas_help.py +0 -80
  158. package/src/jscommon/umychart_python/umychart_complier_scanner.py +0 -554
  159. package/src/jscommon/umychart_python/umychart_complier_testcase.py +0 -362
  160. package/src/jscommon/umychart_python/umychart_complier_util.py +0 -30
  161. package/src/jscommon/umychart_python/umychart_webtemplate.py +0 -131
  162. package/src/jscommon/umychart_python/updatehqchartweb.bat +0 -5
  163. package/src/jscommon/vendor.js +0 -2
  164. package/src/pages/block.list.demo.page/App.vue +0 -117
  165. package/src/pages/block.list.demo.page/index.js +0 -12
  166. package/src/pages/brushTool.demo.page/App.vue +0 -19
  167. package/src/pages/brushTool.demo.page/index.js +0 -12
  168. package/src/pages/container.demo.page/App.vue +0 -118
  169. package/src/pages/container.demo.page/index.js +0 -18
  170. package/src/pages/dataZoom.demo.page/App.vue +0 -265
  171. package/src/pages/dataZoom.demo.page/components/dataZoom.vue +0 -303
  172. package/src/pages/dataZoom.demo.page/index.js +0 -12
  173. package/src/pages/historydayline.demo.page/App.vue +0 -57
  174. package/src/pages/historydayline.demo.page/index.js +0 -12
  175. package/src/pages/hq.demo.page/App.vue +0 -163
  176. package/src/pages/hq.demo.page/index.js +0 -12
  177. package/src/pages/hqchart.black/App.vue +0 -90
  178. package/src/pages/hqchart.black/components/searchsymbol.vue +0 -299
  179. package/src/pages/hqchart.black/components/stockdrawtool.vue +0 -300
  180. package/src/pages/hqchart.black/components/stockfull.vue +0 -313
  181. package/src/pages/hqchart.black/components/stockinfo.vue +0 -428
  182. package/src/pages/hqchart.black/components/stockkline.demo.vue +0 -1652
  183. package/src/pages/hqchart.black/components/stocktradeinfo.vue +0 -1337
  184. package/src/pages/hqchart.black/index.js +0 -30
  185. package/src/pages/hqchart.black/router/candlestickChart.vue +0 -108
  186. package/src/pages/hqchart.black/router/pricePointsTable.vue +0 -294
  187. package/src/pages/hqchart.black/router/stockDeallas.vue +0 -417
  188. package/src/pages/hqchart.black/router/timeShareChart.vue +0 -108
  189. package/src/pages/hqchart.page/App.vue +0 -101
  190. package/src/pages/hqchart.page/index.js +0 -18
  191. package/src/pages/index/App.vue +0 -1408
  192. package/src/pages/index/index.js +0 -7
  193. package/src/pages/indexHq/App.vue +0 -110
  194. package/src/pages/indexHq/index.js +0 -18
  195. package/src/pages/login.demo.page/App.vue +0 -22
  196. package/src/pages/login.demo.page/index.js +0 -12
  197. package/src/pages/queryContent.demo.page/App.vue +0 -29
  198. package/src/pages/queryContent.demo.page/index.js +0 -18
  199. package/src/pages/ranking.black/App.vue +0 -199
  200. package/src/pages/ranking.black/index.js +0 -18
  201. package/src/pages/search.demo.page/App.vue +0 -28
  202. package/src/pages/search.demo.page/index.js +0 -12
  203. package/src/pages/simulatetrade.demo.page/app.vue +0 -121
  204. package/src/pages/simulatetrade.demo.page/index.js +0 -17
  205. package/src/pages/stockdeal.demo.page/App.vue +0 -63
  206. package/src/pages/stockdeal.demo.page/index.js +0 -19
  207. package/src/pages/stockdealcount.demo.page/App.vue +0 -37
  208. package/src/pages/stockdealcount.demo.page/index.js +0 -12
  209. package/src/pages/stockdeallastest.demo.page/App.vue +0 -74
  210. package/src/pages/stockdeallastest.demo.page/index.js +0 -18
  211. package/src/pages/stockinfo.demo.page/App.vue +0 -92
  212. package/src/pages/stockinfo.demo.page/index.html +0 -13
  213. package/src/pages/stockinfo.demo.page/index.js +0 -19
  214. package/src/pages/stockkline.demo.page/App.vue +0 -55
  215. package/src/pages/stockkline.demo.page/index.js +0 -18
  216. package/src/pages/stockmultiorder.demo.page/App.vue +0 -149
  217. package/src/pages/stockmultiorder.demo.page/index.js +0 -18
  218. package/src/pages/stockmultiperiod.demo.page/App.vue +0 -87
  219. package/src/pages/stockmultiperiod.demo.page/index.js +0 -18
  220. package/src/pages/stockorder.demo.page/App.vue +0 -69
  221. package/src/pages/stockorder.demo.page/index.js +0 -18
  222. package/src/pages/test/App.vue +0 -22
  223. package/src/pages/test/index.js +0 -7
  224. package/src/pages/tradeinfopage/app.vue +0 -40
  225. package/src/pages/tradeinfopage/index.js +0 -7
  226. package/src/pages/tradeinfopage/tradeinfo.html +0 -12
  227. package/src/utils/urlObj.js +0 -81
  228. package/src/vendor.js +0 -2
  229. package/webpack.config.js +0 -104
@@ -1,1077 +0,0 @@
1
- /*
2
- copyright (c) 2018 jones
3
-
4
- http://www.apache.org/licenses/LICENSE-2.0
5
-
6
- 开源项目 https://github.com/jones2000/HQChart
7
-
8
- jones_2000@163.com
9
-
10
- 分析家脚本翻译器
11
- */
12
-
13
- import { JSConsole } from "./umychart.console.wechat.js"
14
-
15
- import {
16
- ErrorHandler,
17
- JSComplier,
18
- JSParser,
19
- Syntax,
20
- JS_EXECUTE_JOB_ID,
21
- g_JSComplierResource,
22
- } from "./umychart.complier.wechat";
23
-
24
- import
25
- {
26
- IFrameSplitOperator,
27
- } from './umychart.framesplit.wechat.js'
28
-
29
-
30
- //脚本说明
31
- function JSExplainer(ast,option)
32
- {
33
- this.AST=ast;
34
- this.ErrorHandler=new ErrorHandler();
35
- this.ErrorCallback; //执行错误回调
36
- this.UpdateUICallback;
37
- this.CallbackParam;
38
- this.JobList=[]; //执行的任务队列
39
- this.VarTable=new Map(); //变量表
40
- this.OutVarTable=[]; //输出变量
41
-
42
- //脚本自动变量表, 只读
43
- this.ConstVarTable=new Map(
44
- [
45
- //个股数据
46
- ['CLOSE',"收盘价"],['VOL',"成交量"],['OPEN',"开盘价"],['HIGH',"最高价"],['LOW',"最低价"],['AMOUNT',"成交量"],
47
- ['C',"收盘价"],['V',"成交量"],['O',"开盘价"],['H',"最高价"],['L',"最低价"],['AMO',"成交量"],
48
- ['VOLR',"量比"], ['VOLINSTK',"持仓量"], ["OPI","持仓量"], ["ZSTJJ","均价"], ["QHJSJ","结算价"], ["SETTLE", "结算价"],
49
-
50
- //日期类
51
- ['DATE',"日期"],['YEAR',"年份"],['MONTH',"月份"],['PERIOD', "周期"],['WEEK',"星期"],["TIME","时间"],
52
-
53
- //大盘数据
54
- ['INDEXA',"大盘成交额"],['INDEXC',"大盘收盘价"],['INDEXH',"大盘最高价"],['INDEXL',"大盘最低价"],['INDEXO',"大盘开盘价"],['INDEXV',"大盘成交量"],
55
- ['INDEXADV',"大盘上涨家数"],['INDEXDEC',"´大盘下跌家数"],
56
-
57
- ["ADVANCE","上涨家数"], ['DECLINE', "下跌家数"],
58
-
59
- ['FROMOPEN',"当前离开盘分钟数"],
60
- ['TOTALFZNUM', "总分钟数"],
61
-
62
- ['CURRBARSCOUNT',"到最后交易的周期"], //到最后交易日的周期数
63
- ['TOTALBARSCOUNT',"总的周期数"],
64
- ['ISLASTBAR',"是否是最后一个周期"], //判断是否为最后一个周期
65
- ['BARSTATUS',"数据位置状态"], //BARSTATUS返回数据位置信息,1表示第一根K线,2表示最后一个数据,0表示中间位置.
66
-
67
- ['CAPITAL',"当前流通股本(手)"], ["TOTALCAPITAL","当前总股本(手)"],
68
- ['EXCHANGE',"换手率"], //换手率
69
- ['SETCODE', "市场类型"], //市场类型
70
- ['CODE',"品种代码"], //品种代码
71
- ['STKNAME',"品种名称"], //品种名称
72
- ["TQFLAG","当前复权状态"], //TQFLAG 当前的复权状态,0:无复权 1:前复权 2:后复权
73
-
74
- ['HYBLOCK',"所属行业"], //所属行业板块
75
- ['DYBLOCK',"所属地域"], //所属地域板块
76
- ['GNBLOCK',"所属概念"], //所属概念
77
- ["FGBLOCK","所属风格板块"],
78
- ["ZSBLOCK","所属指数板块"],
79
- ["ZHBLOCK",'所属组合板块'],
80
- ["ZDBLOCK",'所属自定义板块'],
81
- ["HYZSCODE","所属行业的板块指数代码"],
82
-
83
- ["GNBLOCKNUM","所属概念板块的个数"],
84
- ["FGBLOCKNUM","所属风格板块的个数"],
85
- ["ZSBLOCKNUM","所属指数板块的个数"],
86
- ["ZHBLOCKNUM","所属组合板块的个数"],
87
- ["ZDBLOCKNUM","所属自定义板块的个数"],
88
-
89
- ["HYSYL","指数市盈率或个股所属行业的市盈率"],
90
- ["HYSJL","指数市净率或个股所属行业的市净率"],
91
-
92
- ['DRAWNULL',"无效数据"]
93
-
94
- ]);
95
-
96
- if (option)
97
- {
98
- if (option.Callback) this.UpdateUICallback=option.Callback;
99
- if (option.CallbackParam) this.CallbackParam=option.CallbackParam;
100
- if (option.Arguments) this.Arguments=option.Arguments;
101
- }
102
-
103
- this.Run=function()
104
- {
105
- try
106
- {
107
- this.OutVarTable=[];
108
- this.VarTable=new Map();
109
- JSConsole.Complier.Log('[JSExecute::JSExplainer] Load Arguments', this.Arguments);
110
- for(let i in this.Arguments) //预定义的变量
111
- {
112
- let item =this.Arguments[i];
113
- this.VarTable.set(item.Name,item.Value);
114
- }
115
-
116
- let data=this.RunAST();//执行脚本
117
- JSConsole.Complier.Log('[JSExplainer.Run] explain finish', data);
118
- if (this.UpdateUICallback) //回调发送结果, 可以支持异步
119
- {
120
- JSConsole.Complier.Log('[JSExplainer.Run] invoke UpdateUICallback.');
121
- this.UpdateUICallback(data);
122
- }
123
- }
124
- catch(error)
125
- {
126
- JSConsole.Complier.Log('[JSExplainer.Run] throw error ', error);
127
- if (this.ErrorCallback)
128
- {
129
- this.ErrorCallback(error, this.OutVarTable);
130
- }
131
- }
132
- }
133
-
134
-
135
- this.RunAST=function()
136
- {
137
- if (!this.AST) this.ThrowError();
138
- if (!this.AST.Body) this.ThrowError();
139
-
140
- for(let i in this.AST.Body)
141
- {
142
- let item =this.AST.Body[i];
143
- this.VisitNode(item);
144
-
145
- //输出变量
146
- if (item.Type==Syntax.ExpressionStatement && item.Expression)
147
- {
148
- if (item.Expression.Type==Syntax.AssignmentExpression)
149
- {
150
- if (item.Expression.Operator==':' && item.Expression.Left)
151
- {
152
- let assignmentItem=item.Expression;
153
- let varName=assignmentItem.Left.Name;
154
- let outVar=`输出${varName}: ${this.VarTable.get(varName)}`;
155
- this.OutVarTable.push({ Name:varName, Data:outVar,Type:0});
156
- }
157
- else if (item.Expression.Operator==':=' && item.Expression.Left)
158
- {
159
- let assignmentItem=item.Expression;
160
- let varName=assignmentItem.Left.Name;
161
- let outVar=`赋值${varName}: ${this.VarTable.get(varName)}`;
162
- this.OutVarTable.push({ Name:varName, Data:outVar,Type:0, IsOut:false });
163
- }
164
- }
165
- else if (item.Expression.Type==Syntax.CallExpression)
166
- {
167
- let callItem=item.Expression;
168
- if (this.IsDrawFunction(callItem.Callee.Name))
169
- {
170
- let outVar=callItem.Out;
171
- var drawName=callItem.Callee.Name;
172
- this.OutVarTable.push({Name:drawName, Draw:`输出: ${outVar}`, Type:1});
173
- }
174
- else
175
- {
176
- let outVar=callItem.Out;
177
- varName=`__temp_c_${callItem.Callee.Name}_${i}__`;
178
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`,Type:0, NoneName:true});
179
- }
180
- }
181
- else if (item.Expression.Type==Syntax.Identifier)
182
- {
183
- let varName=item.Expression.Name;
184
- let outVar=this.ReadVariable(varName,item.Expression);
185
- varName="__temp_i_"+i+"__";
186
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`, Type:0, NoneName:true});
187
- }
188
- else if (item.Expression.Type==Syntax.Literal) //常量
189
- {
190
- let outVar=item.Expression.Value;
191
- if (IFrameSplitOperator.IsString(outVar) && outVar.indexOf("$")>0)
192
- outVar=this.GetOtherSymbolExplain({ Literal:outVar }, item);
193
- varName="__temp_li_"+i+"__";
194
- var type=0;
195
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`, Type:0, NoneName:true});
196
- }
197
- else if (item.Expression.Type==Syntax.BinaryExpression) // CLOSE+OPEN;
198
- {
199
- var varName="__temp_b_"+i+"__";
200
- let outVar=item.Expression.Out;
201
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`,Type:0, NoneName:true});
202
- }
203
- else if (item.Expression.Type==Syntax.LogicalExpression) //逻辑语句 如 T1 AND T2
204
- {
205
- var varName="__temp_l_"+i+"__";
206
- let outVar=item.Expression.Out;
207
- this.OutVarTable.push({Name:varName, Data:`输出: ${outVar}`,Type:0, NoneName:true});
208
- }
209
- else if (item.Expression.Type==Syntax.SequenceExpression)
210
- {
211
- let varName;
212
- let drawName;
213
- let draw;
214
- let color;
215
- let lineWidth;
216
- let colorStick=false;
217
- let pointDot=false;
218
- let circleDot=false;
219
- let lineStick=false;
220
- let stick=false;
221
- let volStick=false;
222
- let isShow=true;
223
- let isExData=false;
224
- let isDotLine=false;
225
- let isOverlayLine=false; //叠加线
226
- var isNoneName=false;
227
- //显示在位置之上,对于DRAWTEXT和DRAWNUMBER等函数有用,放在语句的最后面(不能与LINETHICK等函数共用),比如:
228
- //DRAWNUMBER(CLOSE>OPEN,HIGH,CLOSE),DRAWABOVE;
229
- var isDrawAbove=false;
230
- for(let j in item.Expression.Expression)
231
- {
232
- let itemExpression=item.Expression.Expression[j];
233
- if (itemExpression.Type==Syntax.AssignmentExpression && itemExpression.Operator==':' && itemExpression.Left)
234
- {
235
- varName=itemExpression.Left.Name;
236
- let varValue=this.VarTable.get(varName);
237
- this.VarTable.set(varName,varValue); //把常量放到变量表里
238
- }
239
- else if (itemExpression.Type==Syntax.Identifier)
240
- {
241
- let value=itemExpression.Name;
242
- if (value==='COLORSTICK') colorStick=true;
243
- else if (value==='POINTDOT') pointDot=true;
244
- else if (value==='CIRCLEDOT') circleDot=true;
245
- else if (value==='DOTLINE') isDotLine=true;
246
- else if (value==='LINESTICK') lineStick=true;
247
- else if (value==='STICK') stick=true;
248
- else if (value==='VOLSTICK') volStick=true;
249
- else if (value==="DRAWABOVE") isDrawAbove=true;
250
- else if (value.indexOf('COLOR')==0) color=value;
251
- else if (value.indexOf('LINETHICK')==0) lineWidth=value;
252
- else if (value.indexOf('NODRAW')==0) isShow=false;
253
- else if (value.indexOf('EXDATA')==0) isExData=true; //扩展数据, 不显示再图形里面
254
- else if (value.indexOf('LINEOVERLAY')==0) isOverlayLine=true;
255
- else
256
- {
257
- varName=itemExpression.Name;
258
- let varValue=this.ReadVariable(varName,itemExpression);
259
- varName="__temp_si_"+i+"__";
260
- isNoneName=true;
261
- this.VarTable.set(varName,varValue); //放到变量表里
262
- }
263
- }
264
- else if(itemExpression.Type==Syntax.Literal) //常量
265
- {
266
- let aryValue=itemExpression.Value;
267
- varName=itemExpression.Value.toString();
268
- isNoneName=true;
269
- this.VarTable.set(varName,aryValue); //把常量放到变量表里
270
- }
271
- else if (itemExpression.Type==Syntax.CallExpression)
272
- {
273
- if (this.IsDrawFunction(itemExpression.Callee.Name))
274
- {
275
- draw=itemExpression.Out;
276
- drawName=itemExpression.Callee.Name;
277
- }
278
- else
279
- {
280
- let varValue=itemExpression.Out;
281
- varName=`__temp_sc_${itemExpression.Callee.Name}_${i}__`;
282
- isNoneName=true;
283
- this.VarTable.set(varName,varValue);
284
- }
285
- }
286
- else if (itemExpression.Type==Syntax.BinaryExpression)
287
- {
288
- varName="__temp_sb_"+i+"__";
289
- let aryValue=itemExpression.Out;
290
- isNoneName=true;
291
- this.VarTable.set(varName,aryValue);
292
- }
293
- }
294
-
295
- var outValue;
296
- if (draw) outValue=`输出: ${draw}`;
297
- else if (isNoneName) outValue=`输出: ${this.VarTable.get(varName)}`;
298
- else outValue=`输出${varName}: ${this.VarTable.get(varName)}`;
299
-
300
- if (color) outValue+=`,颜色${this.GetColorExplain(color)}`;
301
- if (lineWidth) outValue+=`,线段粗细${this.GetLineWidthExplain(lineWidth)}`;
302
- if (isShow==false) outValue+=",不显示";
303
- if (isDotLine==true) outValue+=",画虚线";
304
- if (isDrawAbove==true) outValue+=',显示在位置之上';
305
-
306
- if (pointDot && varName) //圆点
307
- {
308
- outValue+=",画小圆点线";
309
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.POINTDOT.Radius, Type:3};
310
- this.OutVarTable.push(value);
311
- }
312
- else if (circleDot && varName) //圆点
313
- {
314
- outValue+=",画小圆圈线";
315
- let value={Name:varName, Data:outValue, Radius:g_JSChartResource.CIRCLEDOT.Radius, Type:3};
316
- this.OutVarTable.push(value);
317
- }
318
- else if (lineStick && varName) //LINESTICK 同时画出柱状线和指标线
319
- {
320
- outValue+=",画出柱状线和指标线";
321
- let value={Name:varName, Data:outValue, Type:4};
322
- this.OutVarTable.push(value);
323
- }
324
- else if (stick && varName) //STICK 画柱状线
325
- {
326
- outValue+=",画柱状线";
327
- let value={Name:varName, Data:outValue, Type:5};
328
- this.OutVarTable.push(value);
329
- }
330
- else if (volStick && varName) //VOLSTICK 画彩色柱状线
331
- {
332
- outValue+=",画成交量柱状线";
333
- let value={Name:varName, Data:outValue, Type:6};
334
- this.OutVarTable.push(value);
335
- }
336
- else if (varName && color)
337
- {
338
- let value={Name:varName, Data:outValue, Color:color, Type:0};
339
- this.OutVarTable.push(value);
340
- }
341
- else if (draw) //画图函数
342
- {
343
- var outVar={ Name:drawName, Data:outValue, Type:1 };
344
- this.OutVarTable.push(outVar);
345
- }
346
- else if (colorStick && varName) //CYW: SUM(VAR4,10)/10000, COLORSTICK; 画上下柱子
347
- {
348
- outValue+=",画彩色柱状线";
349
- let value={Name:varName, Data:outValue, Color:color, Type:2};
350
- this.OutVarTable.push(value);
351
- }
352
- else if (varName)
353
- {
354
- let value={Name:varName, Data:outValue,Type:0};
355
- this.OutVarTable.push(value);
356
- }
357
- }
358
- }
359
- }
360
-
361
- JSConsole.Complier.Log('[JSExplainer::Run]', this.VarTable);
362
- return this.OutVarTable;
363
- }
364
-
365
- this.VisitNode=function(node)
366
- {
367
- switch(node.Type)
368
- {
369
- case Syntax.SequenceExpression:
370
- this.VisitSequenceExpression(node);
371
- break;
372
- case Syntax.ExpressionStatement:
373
- this.VisitNode(node.Expression);
374
- break;
375
- case Syntax.AssignmentExpression:
376
- this.VisitAssignmentExpression(node);
377
- break;
378
- case Syntax.BinaryExpression:
379
- case Syntax.LogicalExpression:
380
- this.VisitBinaryExpression(node);
381
- break;
382
- case Syntax.CallExpression:
383
- this.VisitCallExpression(node);
384
- break;
385
- }
386
- }
387
-
388
- this.VisitSequenceExpression=function(node)
389
- {
390
- for(let i in node.Expression)
391
- {
392
- let item =node.Expression[i];
393
- this.VisitNode(item);
394
- }
395
- }
396
-
397
- //函数调用
398
- this.VisitCallExpression=function(node)
399
- {
400
- let funcName=node.Callee.Name;
401
- let args=[];
402
- for(let i in node.Arguments)
403
- {
404
- let item=node.Arguments[i];
405
- let value;
406
- if (item.Type==Syntax.BinaryExpression || item.Type==Syntax.LogicalExpression)
407
- value=this.VisitBinaryExpression(item);
408
- else if (item.Type==Syntax.CallExpression)
409
- value=this.VisitCallExpression(item);
410
- else
411
- value=this.GetNodeValue(item);
412
- args.push(value);
413
- }
414
-
415
- JSConsole.Complier.Log('[JSExplainer::VisitCallExpression]' , funcName, '(', args.toString() ,')');
416
-
417
- if (g_JSComplierResource.IsCustomFunction(funcName))
418
- {
419
- var data=this.Algorithm.CallCustomFunction(funcName, args, this.SymbolData, node);
420
- node.Out=[];
421
- node.Draw=null;
422
-
423
- if (data)
424
- {
425
- if (data.Out) node.Out=data.Out;
426
- if (data.Draw) node.Draw=data.Draw;
427
- }
428
-
429
- return node.Out;
430
- }
431
-
432
- node.Out=this.CallFunctionExplain(funcName, args, node);
433
- return node.Out;
434
- }
435
-
436
- this.FUNCTION_INFO_LIST=new Map(
437
- [
438
- ["REF", { Name:"REF", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日前的${args[0]}`; } } ],
439
- ["REFX", { Name:"REFX", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日后的${args[0]}`; } } ],
440
- ["REFV", { Name:"REFV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日前的(未作平滑处理)${args[0]}`; } } ],
441
- ["REFXV", { Name:"REFXV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日后的(未作平滑处理)${args[0]}`; } } ],
442
-
443
- ["REFDATE", { Name:"REFDATE", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日${args[0]}`; } } ],
444
- ["COUNT", { Name:"COUNT", Param:{ Count:2 }, ToString:function(args) { return `统计${args[1]}日中满足${args[0]}的天数`; } } ],
445
- ["BARSLASTCOUNT", { Name:"BARSLASTCOUNT", Param:{ Count:1 }, ToString:function(args) { return `条件${args[0]}连续成立次数`; } } ],
446
- ["BARSCOUNT", { Name:"BARSCOUNT", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}有效数据周期数`; } } ],
447
- ["BARSLAST", { Name:"BARSLAST", Param:{ Count:1 }, ToString:function(args) { return `上次${args[0]}不为0距今天数`; } } ],
448
- ["BARSNEXT", { Name:"BARSNEXT", Param:{ Count:1 }, ToString:function(args) { return `下次${args[0]}不为0距今天数`; } } ],
449
- ["BARSSINCEN", { Name:"BARSSINCEN", Param:{ Count:2 }, ToString:function(args) { return `在${args[1]}周期内首次${args[0]}距今天数`; } } ],
450
- ["BARSSINCE", { Name:"BARSSINCE", Param:{ Count:1 }, ToString:function(args) { return `首次${args[0]}距今天数`; } } ],
451
- ["HHV", { Name:"HHV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的最高值`; } } ],
452
- ["LLV", { Name:"LLV", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的最低值`; } } ],
453
- ["ZTPRICE", { Name:"ZTPRICE", Param:{ Count:2 }, ToString:function(args) { return '计算涨停价'; } } ],
454
- ["DTPRICE", { Name:"DTPRICE", Param:{ Count:2 }, ToString:function(args) { return '计算跌停价'; } } ],
455
- ["BACKSET", { Name:"BACKSET", Param:{ Count:2 }, ToString:function(args) { return `若${args[0]}则将最近${args[1]}周期置为1`; } } ],
456
-
457
- ["HOD", { Name:"HOD", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的高值名次`; } } ],
458
- ["LOD", { Name:"LOD", Param:{ Count:2 }, ToString:function(args) { return `${args[1]}日内${args[0]}的低值名次`; } } ],
459
- ["REVERSE", { Name:"REVERSE", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的相反数`; } } ],
460
- ["FILTER", { Name:"FILTER", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日过滤`; } } ],
461
- ["FILTERX", { Name:"FILTERX", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日反向过滤`; } } ],
462
- ["TFILTER", { Name:"TFILTER", Param:{Count:3}, ToString:function(args) { return `信号过滤(多头)`; } }],
463
- ["SUMBARS", { Name:"SUMBARS", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}累加至${args[1]}的天数`; } } ],
464
- ["MA", { Name:"MA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日简单移动平均`; } } ],
465
- ["SMA", { Name:"SMA", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}的${args[1]}日[${args[2]}日权重]移动平均`; } } ],
466
- ["MEMA", { Name:"MEMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日平滑移动平均`; } } ],
467
- ["EMA", { Name:"EMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日指数移动平均`; } } ],
468
- ["EXPMA", { Name:"EXPMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日指数移动平均`; } } ],
469
- ["WMA", { Name:"WMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日加权移动平均`; } } ],
470
- ["DMA", { Name:"DMA", Param:{ Count:2 }, ToString:function(args) { return `以${args[1]}为权重${args[0]}的动态移动平均`; } } ],
471
- ["XMA", { Name:"XMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日偏移移动平均`; } } ],
472
-
473
- ["RANGE", { Name:"RANGE", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}位于${args[1]}和${args[2]}之间`; } } ],
474
- ["CONST", { Name:"CONST", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的最后一日值`; } } ],
475
- ["TOPRANGE", { Name:"TOPRANGE", Param:{ Count:1 }, ToString:function(args) { return `当前值是近${args[0]}周期的最大值`; } } ],
476
- ["LOWRANGE", { Name:"LOWRANGE", Param:{ Count:1 }, ToString:function(args) { return `当前值是近${args[0]}周期的最小值`; } } ],
477
- ["FINDHIGH", { Name:"FINDHIGH", Param:{ Count:4 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最高价`; } } ],
478
- ["FINDHIGHBARS", { Name:"FINDHIGHBARS", Param:{ Count:4 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最高价到当前周期的周期数`; } } ],
479
- ["FINDLOW", { Name:"FINDLOW", Param:{ Count:4 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最低价`; } } ],
480
- ["FINDLOWBARS", { Name:"FINDLOWBARS", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}在${args[1]}日前的${args[2]}天内第${args[3]}个最低价到当前周期的周期数`; } } ],
481
- ["SUM", { Name:"SUM", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}${args[1]}日累加`; } } ],
482
- ["MULAR", { Name:"MULAR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}日累乘`; } } ],
483
- ["AMA", { Name:"AMA", Param:{ Count:2 }, ToString:function(args) { return `以${args[1]}为权重${args[0]}的自适应均线`; } } ],
484
- ["TMA", { Name:"TMA", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}的${args[1]}日[${args[2]}日权重]移动平均`; } } ],
485
- ["CROSS", { Name:"CROSS", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}上穿${args[1]}`; } } ],
486
- ["LONGCROSS", { Name:"LONGCROSS", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}小于${args[1]}保持${args[2]}个交易日后交叉上穿`; } } ],
487
- ["UPNDAY", { Name:"UPNDAY", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日${args[0]}连涨`; } } ],
488
- ["DOWNNDAY", { Name:"DOWNNDAY", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日${args[0]}连跌`; } } ],
489
- ["NDAY", { Name:"NDAY", Param:{ Count:3 }, ToString:function(args) { return `最近${args[2]}日${args[0]}一直大于${args[1]}`; } } ],
490
- ["EXIST", { Name:"EXIST", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日存在${args[0]}`; } } ],
491
- ["EXISTR", { Name:"EXISTR", Param:{ Count:3 }, ToString:function(args) { return `从前${args[1]}日到前${args[2]}日存在${args[0]}`; } } ],
492
- ["EVERY", { Name:"EVERY", Param:{ Count:2 }, ToString:function(args) { return `最近${args[1]}日一直存在${args[0]}`; } } ],
493
- ["LAST", { Name:"LAST", Param:{ Count:3 }, ToString:function(args) { return `从前${args[1]}日到前${args[2]}日持续${args[0]}`; } } ],
494
- ["NOT", { Name:"NOT", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}取反`; } } ],
495
- ["IF", { Name:"IF", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
496
- ["IFF", { Name:"IFF", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
497
- ["IFN", { Name:"IFN", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
498
- ["IFC", { Name:"IFC", Param:{ Count:3 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回${args[2]}`; } } ],
499
- ["TESTSKIP", { Name:"TESTSKIP", Param:{ Count:1 }, ToString:function(args) { return `如果满足条件${args[0]},公式返回`; } } ],
500
- ["VALUEWHEN", { Name:"VALUEWHEN", Param:{ Count:2 }, ToString:function(args) { return `如果${args[0]},返回${args[1]},否则返回上个输出值 `; } } ],
501
-
502
- ["MAX", { Name:"MAX", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}的较大值`; } } ],
503
- ["MIN", { Name:"MIN", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}和${args[1]}的较小值`; } } ],
504
- ["ACOS", { Name:"ACOS", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的反余弦`; } } ],
505
- ["ASIN", { Name:"ASIN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的反正弦`; } } ],
506
- ["ATAN", { Name:"ATAN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的反正切`; } } ],
507
- ["COS", { Name:"COS", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的余弦`; } } ],
508
- ["SIN", { Name:"SIN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的正弦`; } } ],
509
- ["TAN", { Name:"TAN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的正切`; } } ],
510
- ["EXP", { Name:"EXP", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的指数`; } } ],
511
- ["LN", { Name:"LN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的自然对数`; } } ],
512
- ["LOG", { Name:"LOG", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的对数`; } } ],
513
- ["SQRT", { Name:"SQRT", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的开方`; } } ],
514
- ["ABS", { Name:"ABS", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的绝对值`; } } ],
515
- ["POW", { Name:"POW", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}乘幂`; } } ],
516
- ["CEILING", { Name:"CEILING", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的向上舍入`; } } ],
517
- ["FLOOR", { Name:"FLOOR", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的向上舍入`; } } ],
518
- ["INTPART", { Name:"INTPART", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的整数部分`; } } ],
519
- ["BETWEEN", { Name:"BETWEEN", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}位于${args[1]}和${args[2]}之间`; } } ],
520
- ["FRACPART", { Name:"FRACPART", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的小数部分`; } } ],
521
- ["ROUND", { Name:"ROUND", Param:{ Count:1 }, ToString:function(args) { return `对${args[0]}(进行)四舍五入`; } } ],
522
- ["ROUND2", { Name:"ROUND2", Param:{ Count:2 }, ToString:function(args) { return `对${args[0]}(进行)四舍五入`; } } ],
523
- ["SIGN", { Name:"SIGN", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}的符号`; } } ],
524
- ["MOD", { Name:"MOD", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}关于${args[1]}的模`; } } ],
525
- ["RAND", { Name:"RAND", Param:{ Count:1 }, ToString:function(args) { return `随机正整数`; } } ],
526
-
527
- ["AVEDEV", { Name:"AVEDEV", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日平均绝对偏差`; } } ],
528
- ["DEVSQ", { Name:"DEVSQ", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日数据偏差平方和`; } } ],
529
- ["FORCAST", { Name:"FORCAST", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日线性回归预测值`; } } ],
530
- ["TSMA", { Name:"TSMA", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}在${args[1]}个周期内的时间序列三角移动平均`; } } ],
531
- ["SLOPE", { Name:"SLOPE", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日线性回归斜率`; } } ],
532
- ["STD", { Name:"STD", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日估算标准差`; } } ],
533
- ["STDP", { Name:"STDP", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日总体标准差`; } } ],
534
- ["STDDEV", { Name:"STDDEV", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日标准偏差`; } } ],
535
- ["VAR", { Name:"VAR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日估算样本方差`; } } ],
536
- ["VARP", { Name:"VARP", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}的${args[1]}日总体样本方差`; } } ],
537
- ["COVAR", { Name:"COVAR", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}和${args[1]}的${args[2]}周期的协方差`; } } ],
538
- ["RELATE", { Name:"RELATE", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}和${args[1]}的${args[0]}周期的相关系数`; } } ],
539
- ["BETA", { Name:"BETA", Param:{ Count:1 }, ToString:function(args) { return `β(Beta)系数`; } } ],
540
- ["BETAEX", { Name:"BETAEX", Param:{ Count:3 }, ToString:function(args) { return `${args[0]}和${args[1]}的${args[2]}周期的相关放大系数`; } } ],
541
-
542
- ["COST", { Name:"COST", Param:{ Count:1 }, ToString:function(args) { return `获利盘为${args[0]}%的成本分布`; } } ],
543
- ["WINNER", { Name:"WINNER", Param:{ Count:1 }, ToString:function(args) { return `以${args[0]}计算的获利盘比例`; } } ],
544
- ["LWINNER", { Name:"LWINNER", Param:{ Count:2 }, ToString:function(args) { return `最近${args[0]}日那部分成本以${args[1]}价格卖出的获利盘比例`; } } ],
545
- ["PWINNER", { Name:"PWINNER", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}日前那部分成本以${args[1]}价格卖出的获利盘比例`; } } ],
546
- ["COSTEX", { Name:"COSTEX", Param:{ Count:2 }, ToString:function(args) { return `位于价格${args[0]}和${args[1]}间的成本`; } } ],
547
- ["PPART", { Name:"PPART", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}日前那部分成本占总成本的比例`; } } ],
548
-
549
- ["SAR", { Name:"SAR", Param:{ Count:3 }, ToString:function(args) { return `步长为${args[1]}极限值为${args[0]}的${args[2]}日抛物转向`; } } ],
550
- ["SARTURN", { Name:"SARTURN", Param:{ Count:3 }, ToString:function(args) { return `步长为${args[1]}极限值为${args[0]}的${args[2]}日抛物转向点`; } } ],
551
-
552
- //字符串函数
553
- ["CON2STR", { Name:"CON2STR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}转为字符串`; } } ],
554
- ["VAR2STR", { Name:"VAR2STR", Param:{ Count:2 }, ToString:function(args) { return `${args[0]}转为字符串`; } } ],
555
- ["STR2CON", { Name:"STR2CON", Param:{ Count:1 }, ToString:function(args) { return `${args[0]}转为数字`; } } ],
556
- ["STRLEN", { Name:"STRLEN", Param:{ Count:1 }, ToString:function(args) { return `得到${args[0]}字符串长度`; } } ],
557
- ["STRCAT", { Name:"STRCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
558
- ["VARCAT", { Name:"VARCAT", Param:{ Count:2 }, ToString:function(args) { return `字符串相加`; } } ],
559
- ["STRSPACE", { Name:"STRSPACE", Param:{ Count:1 }, ToString:function(args) { return `字符串${args[0]}加一空格`; } } ],
560
- ["SUBSTR", { Name:"SUBSTR", Param:{ Count:3 }, ToString:function(args) { return `字符串${args[0]}中取一部分`; } } ],
561
- ["STRCMP", { Name:"STRCMP", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}和字符串${args[1]}比较`; } } ],
562
- ["FINDSTR", { Name:"FINDSTR", Param:{ Count:2 }, ToString:function(args) { return `字符串${args[0]}中查找字符串${args[1]}`; } } ],
563
- ["NAMEINCLUD", { Name:"NAMEINCLUD", Param:{ Count:1 }, ToString:function(args) { return `查找品种名称中包含${args[0]}`; } } ],
564
- ["CODELIKE", { Name:"CODELIKE", Param:{ Count:1 }, ToString:function(args) { return `查找品种名称中包含${args[0]}`; } } ],
565
- ["INBLOCK", { Name:"AVEDEV", Param:{ Count:1 }, ToString:function(args) { return `属于${args[0]}板块`; } } ],
566
-
567
- ["STKINDI",{ Name:"STKINDI", Param:{ Dynamic:true }, ToString:function(args) { return "指标引用"; } }],
568
-
569
-
570
- [
571
- "HHVBARS",
572
- {
573
- Name:"HHVBARS", Param:{ Count:2 },
574
- ToString:function(args)
575
- {
576
- if (args[1]==0) return `历史${args[0]}新高距今天数`;
577
- return `${args[1]}日内${args[0]}新高距今天数`;
578
- }
579
- }
580
- ],
581
-
582
- [
583
- "LLVBARS",
584
- {
585
- Name:"LLVBARS", Param:{ Count:2 },
586
- ToString:function(args)
587
- {
588
- if (args[1]==0) return `历史${args[0]}新低距今天数`;
589
- return `${args[1]}日内${args[0]}新低距今天数`;
590
- }
591
- }
592
- ]
593
- ]
594
- );
595
-
596
- this.CallFunctionExplain=function(funcName, args, node)
597
- {
598
- if (this.FUNCTION_INFO_LIST.has(funcName))
599
- {
600
- var item=this.FUNCTION_INFO_LIST.get(funcName);
601
- if (item.Param.Dynamic===true) //动态参数
602
- {
603
-
604
- }
605
- else
606
- {
607
- if (item.Param.Count!=args.length)
608
- this.ThrowUnexpectedNode(node,`函数${funcName}参数个数不正确. 需要${item.Param.Count}个参数`);
609
- }
610
- return item.ToString(args);
611
- }
612
-
613
- switch(funcName)
614
- {
615
- case "CALCSTOCKINDEX":
616
- return `引用${args[0]}的${args[1]}指标第${args[2]}个输出值`;
617
-
618
- case "PEAK":
619
- case "PEAKBARS":
620
- case "ZIG":
621
- case "ZIGA":
622
- case "TROUGH":
623
- case "TROUGHBARS":
624
- return this.GetZIGExplain(funcName,args);
625
-
626
- case "FINANCE":
627
- return this.GetFinanceExplain(args);
628
- case "DYNAINFO":
629
- return this.GetDynainfoExplain(args);
630
-
631
- case 'CLOSE':
632
- case 'C':
633
- case 'VOL':
634
- case 'V':
635
- case 'OPEN':
636
- case 'O':
637
- case 'HIGH':
638
- case 'H':
639
- case 'LOW':
640
- case 'L':
641
- case 'AMOUNT':
642
- case 'AMO':
643
- return this.GetOtherSymbolExplain( {FunctionName:funcName, Args:args} ,node);
644
-
645
- //绘图函数
646
- case "PLOYLINE":
647
- return `当满足条件${args[0]}时以${args[1]}位置为顶点画折线连接`;
648
- case "DRAWLINE":
649
- return `当满足条件${args[0]}时,在${args[1]}位置画直线起点,当满足条件${args[2]}时,在${args[3]}位置画直线终点,${args[4]}表示是否延长`;
650
- case "DRAWSL":
651
- return `当满足条件${args[0]}时,在${args[1]}位置画斜线线性回归,${args[2]}斜率,${args[3]}长度,${args[4]}方向`;
652
- case "DRAWKLINE":
653
- return 'K线';
654
- case "DRAWICON":
655
- return `当满足条件${args[0]}时,在${args[1]}位置画${args[2]}号图标`;
656
- case "DRAWTEXT":
657
- return `当满足条件${args[0]}时,在${args[1]}位置书写文字`;
658
- case "DRAWTEXT_FIX":
659
- return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写文字`;
660
- case "DRAWNUMBER":
661
- return `当满足条件${args[0]}时,在${args[1]}位置书写数字`;
662
- case "DRAWNUMBER_FIX":
663
- return `当满足条件${args[0]}时,在横轴${args[1]}纵轴${args[2]}位置书写数字`;
664
- case "RGB":
665
- return `自定色[${args[0]},${args[1]},${args[2]}]`;
666
- case "DRAWBAND":
667
- return '画带状线';
668
- case "DRAWRECTREL":
669
- return "相对位置上画矩形.";
670
- case "DRAWGBK":
671
- return "填充背景";
672
- case "STICKLINE":
673
- var barType="";
674
- if (args[4]==-1) barType="虚线空心柱";
675
- else if (args[4]==0) barType="实心柱";
676
- else barType="实线空心柱";
677
- return `当满足条件${args[0]}时, 在${args[1]}和${args[2]}位置之间画柱状线,宽度为${args[3]},${barType}`;
678
-
679
- default:
680
- this.ThrowUnexpectedNode(node,`函数${funcName}不存在`);
681
- }
682
- }
683
-
684
- this.GetDynainfoExplain=function(args)
685
- {
686
- const DATA_NAME_MAP=new Map(
687
- [
688
- [3,"前收盘价"], [4,"开盘价"], [5,"最高价"], [6,"最低价"], [7,"现价"], [8,'总量'], [9,"现量"],
689
- [10,"总金额"], [11,"均价"], [12,"日涨跌"], [13,"振幅"], [14,"涨幅"], [15,"开盘时的成交金额"],
690
- [16,"前5日每分钟均量"], [17,"量比"], [18,"上涨家数"], [19,"下跌家数"]
691
- ]);
692
-
693
- var id=args[0];
694
- if (DATA_NAME_MAP.has(id)) return DATA_NAME_MAP.get(id);
695
-
696
- return `即时行情[${id}]`;
697
- }
698
-
699
- this.GetFinanceExplain=function(args)
700
- {
701
- const DATA_NAME_MAP=new Map(
702
- [
703
- [1,"总股本"], [2,"市场类型"], [3,"沪深品种类型"], [4,"沪深行业代码"], [5,"B股"], [6,"H股"], [7,"流通股本[股]"], [8,"股东人数[户]"], [9,"资产负债率%"],
704
- [10,"总资产"], [11,"流动资产"], [12,"固定资产"], [13,"无形资产"], [15,"流动负债"], [16,"少数股东权益"]
705
-
706
- ]);
707
- var id=args[0];
708
-
709
- if (DATA_NAME_MAP.has(id)) return DATA_NAME_MAP.get(id);
710
-
711
- return `财务数据[${id}]`;
712
- }
713
-
714
- this.GetZIGExplain=function(funcName,args)
715
- {
716
- var value=args[0];
717
- if (value==0) value="开盘价";
718
- else if (value==1) value="最高价";
719
- else if (value==2) value="最低价";
720
- else if (value==3) value="收盘价";
721
-
722
- switch(funcName)
723
- {
724
- case "PEAK":
725
- return `${value}的${args[1]}%之字转向的前${args[2]}个波峰值`;
726
- case "PEAKBARS":
727
- return `${value}的${args[1]}5%之字转向的前${args[2]}个波峰位置`;
728
- case "ZIG":
729
- return `${value}的${args[1]}的之字转向`;
730
- case "ZIGA":
731
- return `${value}变化${args[1]}的之字转向`;
732
- case "TROUGH":
733
- return `${value}的${args[1]}%之字转向的前${args[2]}个波谷值`;
734
- case "TROUGHBARS":
735
- return `${value}的${args[1]}%之字转向的前${args[2]}个波谷位置`;
736
- }
737
- }
738
-
739
- this.GetColorExplain=function(colorName)
740
- {
741
- const COLOR_MAP=new Map(
742
- [
743
- ['COLORBLACK','黑色'],['COLORBLUE','蓝色'],['COLORGREEN','绿色'],['COLORCYAN','青色'],['COLORRED','红色'],
744
- ['COLORMAGENTA','洋红色'],['COLORBROWN','棕色'],['COLORLIGRAY','淡灰色'],['COLORGRAY','深灰色'],['COLORLIBLUE','淡蓝色'],
745
- ['COLORLIGREEN','淡绿色'],['COLORLICYAN','淡青色'],['COLORLIRED','淡红色'],['COLORLIMAGENTA','淡洋红色'],['COLORWHITE','白色'],['COLORYELLOW','黄色']
746
- ]);
747
-
748
- if (COLOR_MAP.has(colorName)) return COLOR_MAP.get(colorName);
749
-
750
- //COLOR 自定义色
751
- //格式为COLOR+“RRGGBB”:RR、GG、BB表示红色、绿色和蓝色的分量,每种颜色的取值范围是00-FF,采用了16进制。
752
- //例如:MA5:MA(CLOSE,5),COLOR00FFFF 表示纯红色与纯绿色的混合色:COLOR808000表示淡蓝色和淡绿色的混合色。
753
- if (colorName.indexOf('COLOR')==0) return '#'+colorName.substr(5);
754
-
755
- return 'rgb(30,144,255)';
756
- }
757
-
758
- this.GetLineWidthExplain=function(lineWidth)
759
- {
760
- var width=parseInt(lineWidth.replace("LINETHICK",""));
761
- if (IFrameSplitOperator.IsPlusNumber(width)) return width;
762
- return 1;
763
- }
764
-
765
- this.SymbolPeriodExplain=function(valueName,period)
766
- {
767
- const mapStockDataName=new Map(
768
- [
769
- ['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"], ['OPEN',"开盘价"], ['O',"开盘价"],
770
- ['HIGH',"最高价"],['H',"最高价"], ['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],
771
- ['VOLINSTK',"持仓量"]
772
- ]);
773
- //MIN1,MIN5,MIN15,MIN30,MIN60,DAY,WEEK,MONTH,SEASON,YEAR
774
- const mapPeriodName=new Map(
775
- [
776
- ["MIN1","1分钟"], ["MIN5", "5分钟"], ["MIN15", "15分钟"], ["MIN30","30分钟"],["MIN60","60分钟"],
777
- ["DAY","日"],["WEEK","周"], ["MONTH", "月"], ['SEASON',"季"], ["YEAR", "年"],["WEEK2","双周"], ["HALFYEAR", "半年"]
778
- ]);
779
-
780
- var dataName=valueName;
781
- if (mapStockDataName.has(valueName)) dataName=mapStockDataName.get(valueName);
782
-
783
- var periodName=period;
784
- if (mapPeriodName.has(period)) periodName=mapPeriodName.get(period);
785
-
786
- return `${dataName}[取${periodName}数据]`;
787
- }
788
-
789
- this.GetOtherSymbolExplain=function(obj, node)
790
- {
791
- const mapStockDataName=new Map(
792
- [
793
- ['CLOSE',"收盘价"],["C","收盘价"],['VOL',"成交量"],['V',"成交量"], ['OPEN',"开盘价"], ['O',"开盘价"],
794
- ['HIGH',"最高价"],['H',"最高价"], ['LOW',"最低价"],['L',"最低价"],['AMOUNT',"成交金额"],['AMO',"成交金额"],
795
- ['VOLINSTK',"持仓量"]
796
- ]);
797
-
798
- if (obj.FunctionName)
799
- {
800
- var args=obj.Args;
801
- var dataName=mapStockDataName.get(obj.FunctionName);
802
- return `[${args[0]}]${dataName}`;
803
- }
804
- else if (obj.Literal)
805
- {
806
- var value=obj.Literal.toUpperCase();
807
- var args=value.split("$");
808
- if (!mapStockDataName.has(args[1])) return "";
809
- var symbol=args[0];
810
- var dataName=mapStockDataName.get(args[1]);
811
- return `[${symbol}]${dataName}`;
812
- }
813
- }
814
-
815
- this.IsDrawFunction=function(name)
816
- {
817
- let setFunctionName=new Set(
818
- [
819
- "STICKLINE","DRAWTEXT",'SUPERDRAWTEXT','DRAWLINE','DRAWBAND','DRAWKLINE','DRAWKLINE_IF','PLOYLINE',
820
- 'POLYLINE','DRAWNUMBER',"DRAWNUMBER_FIX",'DRAWICON','DRAWCHANNEL','PARTLINE','DRAWTEXT_FIX','DRAWGBK','DRAWTEXT_LINE','DRAWRECTREL',"DRAWTEXTABS",
821
- 'DRAWOVERLAYLINE',"FILLRGN", "FILLRGN2","FILLTOPRGN", "FILLBOTTOMRGN", "FILLVERTICALRGN","FLOATRGN","DRAWSL", "DRAWGBK2"
822
- ]);
823
- if (setFunctionName.has(name)) return true;
824
-
825
- return false;
826
- }
827
-
828
- //赋值
829
- this.VisitAssignmentExpression=function(node)
830
- {
831
- let left=node.Left;
832
- if (left.Type!=Syntax.Identifier) this.ThrowUnexpectedNode(node);
833
-
834
- let varName=left.Name;
835
-
836
- let right=node.Right;
837
- let value=null;
838
- if (right.Type==Syntax.BinaryExpression || right.Type==Syntax.LogicalExpression)
839
- value=this.VisitBinaryExpression(right);
840
- else if (right.Type==Syntax.CallExpression)
841
- value=this.VisitCallExpression(right);
842
- else if (right.Type==Syntax.Literal)
843
- {
844
- value=right.Value;
845
- if (IFrameSplitOperator.IsString(value) && right.Value.indexOf("$")>0)
846
- value=this.GetOtherSymbolExplain({ Literal:value }, node);
847
- }
848
- else if (right.Type==Syntax.Identifier) //右值是变量
849
- value=this.ReadVariable(right.Name,right);
850
- else if (right.Type==Syntax.MemberExpression)
851
- value=this.ReadMemberVariable(right);
852
- else if (right.Type==Syntax.UnaryExpression)
853
- {
854
- if (right.Operator=='-')
855
- {
856
- var tempValue=this.GetNodeValue(right.Argument);
857
- value='-'+tempValue;
858
- }
859
- else
860
- {
861
- value=right.Argument.Value;
862
- }
863
- }
864
-
865
- JSConsole.Complier.Log('[JSExplainer::VisitAssignmentExpression]' , varName, ' = ',value);
866
- this.VarTable.set(varName,value);
867
- }
868
-
869
- this.ReadMemberVariable=function(node)
870
- {
871
- var obj=node.Object;
872
- var member=node.Property;
873
-
874
- let maiObj;
875
- if (obj.Type==Syntax.BinaryExpression || obj.Type==Syntax.LogicalExpression )
876
- maiObj=this.VisitBinaryExpression(obj);
877
- else if (obj.Type==Syntax.CallExpression)
878
- maiObj=this.VisitCallExpression(obj);
879
- else
880
- {
881
- if (member.Name.indexOf('#')>0)
882
- {
883
- var aryValue=member.Name.split("#");
884
- var value=`${obj.Name}的${aryValue[0]}[周期${aryValue[1]}]`;
885
- }
886
- else
887
- {
888
- var value=`${obj.Name}的${member.Name}`;
889
- }
890
- return value;
891
- }
892
-
893
- if (!maiObj) return null;
894
- var value=maiObj[member.Name];
895
- if (value) return value;
896
-
897
- return null;
898
- }
899
-
900
- //逻辑运算
901
- this.VisitBinaryExpression=function(node)
902
- {
903
- let stack=[];
904
- stack.push(node);
905
- let temp=null;
906
-
907
- while(stack.length!=0)
908
- {
909
- temp=stack[stack.length-1];
910
- if (temp.Left && node!=temp.Left && node!=temp.Right)
911
- {
912
- stack.push(temp.Left);
913
- }
914
- else if (temp.Right && node!=temp.Right)
915
- {
916
- stack.push(temp.Right);
917
- }
918
- else
919
- {
920
- let value=stack.pop();
921
- if (value.Type==Syntax.BinaryExpression) //只遍历操作符就可以
922
- {
923
- let leftValue=this.GetNodeValue(value.Left);
924
- let rightValue=this.GetNodeValue(value.Right);
925
-
926
- JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] BinaryExpression',value , leftValue, rightValue);
927
- value.Out=null; //保存中间值
928
-
929
- value.Out=`(${leftValue} ${value.Operator} ${rightValue})`;
930
- if (leftValue=="收盘价" && rightValue=="开盘价")
931
- {
932
- if (value.Operator==">") value.Out='(收阳线)';
933
- else if (value.Operator=="<") value.Out='(收阴线)';
934
- else if (value.Operator=="=") value.Out='(平盘)';
935
- }
936
- else if (leftValue=="开盘价" && rightValue=="收盘价")
937
- {
938
- if (value.Operator=="<") value.Out='(收阳线)';
939
- else if (value.Operator==">") value.Out='(收阴线)';
940
- else if (value.Operator=="=") value.Out='(平盘)';
941
- }
942
-
943
- JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] BinaryExpression',value);
944
- }
945
- else if (value.Type==Syntax.LogicalExpression)
946
- {
947
- let leftValue=this.GetNodeValue(value.Left);
948
- let rightValue=this.GetNodeValue(value.Right);
949
-
950
- JSConsole.Complier.Log('[JSExecute::VisitBinaryExpression] LogicalExpression',value , leftValue, rightValue);
951
- value.Out=null; //保存中间值
952
-
953
- switch(value.Operator)
954
- {
955
- case '&&':
956
- case 'AND':
957
- value.Out=`(${leftValue} 并且 ${rightValue})`;
958
- break;
959
- case '||':
960
- case 'OR':
961
- value.Out=`(${leftValue} 或者 ${rightValue})`;
962
- break;
963
- }
964
-
965
- JSConsole.Complier.Log('[JSExplainer::VisitBinaryExpression] LogicalExpression',value);
966
- }
967
-
968
- node=temp;
969
- }
970
- }
971
-
972
- return node.Out;
973
-
974
- }
975
-
976
- this.GetNodeValue=function(node)
977
- {
978
- switch(node.Type)
979
- {
980
- case Syntax.Literal: //数字
981
- return node.Value;
982
- case Syntax.UnaryExpression:
983
- if (node.Operator=='-')
984
- {
985
- let value=this.GetNodeValue(node.Argument);
986
- return '-'+value;
987
- }
988
- return node.Argument.Value;
989
- case Syntax.Identifier:
990
- let value=this.ReadVariable(node.Name,node);
991
- return value;
992
- case Syntax.BinaryExpression:
993
- case Syntax.LogicalExpression:
994
- return node.Out;
995
- case Syntax.CallExpression:
996
- return this.VisitCallExpression(node);
997
- default:
998
- this.ThrowUnexpectedNode(node);
999
- }
1000
- }
1001
-
1002
- //读取变量
1003
- this.ReadVariable=function(name,node)
1004
- {
1005
- if (this.ConstVarTable.has(name))
1006
- {
1007
- let data=this.ConstVarTable.get(name);
1008
- return data;
1009
- }
1010
-
1011
- if (g_JSComplierResource.IsCustomVariant(name)) return this.ReadCustomVariant(name,node); //读取自定义变量
1012
-
1013
- if (this.VarTable.has(name)) return this.VarTable.get(name);
1014
-
1015
- if (name.indexOf('#')>0)
1016
- {
1017
- var aryPeriod=name.split('#');
1018
- return this.SymbolPeriodExplain(aryPeriod[0],aryPeriod[1]);
1019
- }
1020
-
1021
- this.ThrowUnexpectedNode(node, '变量'+name+'不存在');
1022
- return name;
1023
- }
1024
-
1025
- this.ThrowUnexpectedNode=function(node,message)
1026
- {
1027
- let marker=node.Marker;
1028
- let msg=message || "执行异常";
1029
-
1030
- return this.ErrorHandler.ThrowError(marker.Index,marker.Line,marker.Column,msg);
1031
-
1032
- }
1033
-
1034
- this.ThrowError=function()
1035
- {
1036
-
1037
- }
1038
- }
1039
-
1040
-
1041
- JSComplier.Explain=function(code,option, errorCallback)
1042
- {
1043
- //异步调用
1044
- //var asyncExecute= async function() es5不能执行 去掉异步
1045
- var asyncExplain= function()
1046
- {
1047
- try
1048
- {
1049
- JSConsole.Complier.Log('[JSComplier.Explain]',code,option);
1050
-
1051
- JSConsole.Complier.Log('[JSComplier.Explain] parser .....');
1052
- let parser=new JSParser(code);
1053
- parser.Initialize();
1054
- let program=parser.ParseScript();
1055
-
1056
- let ast=program;
1057
- JSConsole.Complier.Log('[JSComplier.Explain] parser finish.', ast);
1058
-
1059
- JSConsole.Complier.Log('[JSComplier.Explain] explain .....');
1060
- let execute=new JSExplainer(ast,option);
1061
- execute.ErrorCallback=errorCallback; //执行错误回调
1062
- execute.JobList=parser.Node.GetDataJobList();
1063
- execute.JobList.push({ID:JS_EXECUTE_JOB_ID.JOB_RUN_SCRIPT});
1064
- let result=execute.Run();
1065
-
1066
- }catch(error)
1067
- {
1068
- JSConsole.Complier.Log(error);
1069
-
1070
- if (errorCallback) errorCallback(error, option.CallbackParam);
1071
- }
1072
- }
1073
-
1074
- asyncExplain();
1075
-
1076
- JSConsole.Complier.Log('[JSComplier.Explain] async explain.');
1077
- }