MvK_rules.mvc 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743
  1. Rule Access_Eval_N1 {
  2. Root N1_root {}
  3. Match N1_userroot {
  4. match = True
  5. }
  6. Match N1_frame {
  7. match = True
  8. }
  9. Delete N1_phase_D {
  10. value = "'eval'"
  11. match = True
  12. }
  13. Match N1_IP {
  14. value = "!access"
  15. match = True
  16. }
  17. Create N1_phase_C {
  18. value = "'finish'"
  19. }
  20. Delete N1_RV_D {}
  21. Create N1_RV_C {}
  22. Match N1_val {}
  23. MatchEdge (N1_root, N1_userroot) {
  24. value = "username"
  25. }
  26. MatchEdge (N1_userroot, N1_frame) {
  27. value = "'frame'"
  28. }
  29. MatchEdge (N1_frame, N1_IP) {
  30. value = "'IP'"
  31. }
  32. DeleteEdge (N1_frame, N1_phase_D) {
  33. value = "'phase'"
  34. }
  35. CreateEdge (N1_frame, N1_phase_C) {
  36. value = "'phase'"
  37. }
  38. CreateEdge (N1_frame, N1_RV_C) {
  39. value = "'returnvalue'"
  40. }
  41. DeleteEdge (N1_frame, N1_RV_D) {
  42. value = "'returnvalue'"
  43. }
  44. MatchEdge (N1_RV_D, N1_RV_C) {
  45. value = "'value'"
  46. }
  47. }
  48. Rule Access_Init_N2 {
  49. Root N2_root {}
  50. Match N2_userroot {
  51. match = True
  52. }
  53. Match N2_frame {
  54. match = True
  55. }
  56. Match N2_phase {
  57. match = True
  58. value = "'init'"
  59. }
  60. Match N2_IP_old {
  61. match = True
  62. value = "!access"
  63. }
  64. Create N2_evalstack_C {}
  65. Match N2_evalstack_M {}
  66. Match N2_IP_new {}
  67. Create N2_phase_new {
  68. value = "'eval'"
  69. }
  70. MatchEdge (N2_root, N2_userroot) {
  71. value = "username"
  72. }
  73. MatchEdge (N2_userroot, N2_frame) {
  74. value = "'frame'"
  75. }
  76. MatchEdge (N2_frame, N2_phase) {
  77. value = "'phase'"
  78. }
  79. DeleteEdge (N2_frame, N2_IP_old) {
  80. value = "'IP'"
  81. }
  82. CreateEdge (N2_frame, N2_evalstack_C) {
  83. value = "'evalstack'"
  84. }
  85. DeleteEdge (N2_frame, N2_evalstack_M) {
  86. value = "'evalstack'"
  87. }
  88. CreateEdge (N2_frame, N2_IP_new) {
  89. value = "'IP'"
  90. }
  91. CreateEdge (N2_evalstack_C, N2_evalstack_M) {
  92. value = "'prev'"
  93. }
  94. CreateEdge (N2_evalstack_M, N2_phase_new) {
  95. value = "'phase'"
  96. }
  97. CreateEdge (N2_evalstack_M, N2_IP) {
  98. value = "'inst'"
  99. }
  100. MatchEdge (N2_IP, N2_IP_new) {
  101. value = "'var'"
  102. }
  103. }
  104. Rule Assign_Assign_N3 {
  105. Root N3_0 {}
  106. Match N3_1 {
  107. match = True
  108. }
  109. Match N3_2 {
  110. match = True
  111. }
  112. Match N3_3 {
  113. match = True
  114. value = "!assign"
  115. }
  116. Delete N3_4 {
  117. match = True
  118. value = "'assign'"
  119. }
  120. Create N3_5 {
  121. value = "'finish'"
  122. }
  123. Match N3_6 {}
  124. Match N3_7 {}
  125. Match N3_8 {}
  126. MatchEdge (N3_0, N3_1) {
  127. value = "username"
  128. }
  129. MatchEdge (N3_1, N3_2) {
  130. value = "'frame'"
  131. }
  132. MatchEdge (N3_2, N3_3) {
  133. value = "'IP'"
  134. }
  135. DeleteEdge (N3_2, N3_4) {
  136. value = "'phase'"
  137. }
  138. CreateEdge (N3_2, N3_5) {
  139. value = "'phase'"
  140. }
  141. MatchEdge (N3_2, N3_6) {
  142. value = "'returnvalue'"
  143. }
  144. DeleteEdge (N3_2, N3_7) {
  145. value = "'variable'"
  146. }
  147. CreateEdge (N3_7, N3_6) {
  148. value = "'value'"
  149. }
  150. DeleteEdge (N3_7, N3_8) {
  151. value = "'value'"
  152. }
  153. }
  154. Rule Assign_Init_N4 {
  155. Root N4_0 {}
  156. Match N4_1 {
  157. match = True
  158. }
  159. Match N4_2 {
  160. match = True
  161. }
  162. Match N4_3 {
  163. match = True
  164. value = "'init'"
  165. }
  166. Create N4_4 {}
  167. Match N4_5 {}
  168. Match N4_6 {
  169. match = True
  170. value = "!assign"
  171. }
  172. Create N4_7 {
  173. value = "'value'"
  174. }
  175. Match N4_8 {}
  176. MatchEdge (N4_0, N4_1) {
  177. value = "username"
  178. }
  179. MatchEdge (N4_1, N4_2) {
  180. value = "'frame'"
  181. }
  182. MatchEdge (N4_2, N4_3) {
  183. value = "'phase'"
  184. }
  185. DeleteEdge (N4_2, N4_6) {
  186. value = "'IP'"
  187. }
  188. CreateEdge (N4_2, N4_4) {
  189. value = "'evalstack'"
  190. }
  191. DeleteEdge (N4_2, N4_5) {
  192. value = "'evalstack'"
  193. }
  194. CreateEdge (N4_2, N4_8) {
  195. value = "'IP'"
  196. }
  197. CreateEdge (N4_5, N4_6) {
  198. value = "'inst'"
  199. }
  200. CreateEdge (N4_5, N4_7) {
  201. value = "'phase'"
  202. }
  203. MatchEdge (N4_6, N4_8) {
  204. value = "'var'"
  205. }
  206. }
  207. Rule Assign_Value_N5 {
  208. Root N5_0 {}
  209. Match N5_1 {
  210. match = True
  211. }
  212. Match N5_2 {
  213. match = True
  214. }
  215. Match N5_3 {
  216. match = True
  217. value = "'value'"
  218. }
  219. Match N5_4 {
  220. match = True
  221. value = "!assign"
  222. }
  223. Create N5_5 {
  224. match = True
  225. }
  226. Create N5_6 {
  227. value = "'init'"
  228. }
  229. Match N5_7 {}
  230. Match N5_8 {}
  231. Match N5_9 {}
  232. Create N5_10 {
  233. value = "'assign'"
  234. }
  235. MatchEdge (N5_0, N5_1) {
  236. value = "username"
  237. }
  238. MatchEdge (N5_1, N5_2) {
  239. value = "'frame'"
  240. }
  241. DeleteEdge (N5_2, N5_3) {
  242. value = "'phase'"
  243. }
  244. DeleteEdge (N5_2, N5_4) {
  245. value = "'IP'"
  246. }
  247. CreateEdge (N5_2, N5_5) {
  248. value = "'evalstack'"
  249. }
  250. CreateEdge (N5_2, N5_6) {
  251. value = "'phase'"
  252. }
  253. DeleteEdge (N5_2, N5_9) {
  254. value = "'evalstack'"
  255. }
  256. CreateEdge (N5_2, N5_7) {
  257. value = "'IP'"
  258. }
  259. MatchEdge (N5_2, N5_8) {
  260. value = "'returnvalue'"
  261. }
  262. CreateEdge (N5_2, N5_8) {
  263. value = "'variable'"
  264. }
  265. CreateEdge (N5_5, N5_9) {
  266. value = "'prev'"
  267. }
  268. DeleteEdge (N5_5, N5_9) {
  269. value = "'evalstack'"
  270. }
  271. CreateEdge (N5_9, N5_4) {
  272. value = "'inst'"
  273. }
  274. CreateEdge (N5_9, N5_10) {
  275. value = "'phase'"
  276. }
  277. MatchEdge (N5_4, N5_7) {
  278. value = "'value'"
  279. }
  280. }
  281. Rule Break_N6 {
  282. Root N6_0 {}
  283. Match N6_1 {
  284. match = True
  285. }
  286. Match N6_2 {
  287. match = True
  288. }
  289. Delete N6_3 {
  290. value = "'init'"
  291. match = True
  292. }
  293. Create N6_4 {
  294. value = "'finish'"
  295. }
  296. Match N6_5 {
  297. value = "!break"
  298. match = True
  299. }
  300. Match N6_6 {}
  301. MatchEdge (N6_0, N6_1) {
  302. value = "username"
  303. }
  304. MatchEdge (N6_1, N6_2) {
  305. value = "'frame'"
  306. }
  307. DeleteEdge (N6_2, N6_3) {
  308. value = "'phase'"
  309. }
  310. CreateEdge (N6_2, N6_4) {
  311. value = "'phase'"
  312. }
  313. DeleteEdge (N6_2, N6_5) {
  314. value = "'IP'"
  315. }
  316. CreateEdge (N6_2, N6_6) {
  317. value = "'IP'"
  318. }
  319. MatchEdge (N6_5, N6_6) {
  320. value = "'while'"
  321. }
  322. }
  323. Rule Call_Call_None_N7 {
  324. Root N7_0 {}
  325. Match N7_1 {
  326. match = True
  327. }
  328. Create N7_2 {}
  329. Match N7_3 {
  330. match = True
  331. }
  332. Create N7_4 {}
  333. Create N7_5 {}
  334. Create N7_6 {
  335. value = "!call"
  336. }
  337. Create N7_7 {}
  338. Match N7_8 {}
  339. Create N7_9 {
  340. value = "'finish'"
  341. }
  342. Delete N7_10 {
  343. value = "'call'"
  344. match = True
  345. }
  346. NAC N7_11 {}
  347. Match N7_12 {}
  348. Create N7_13 {
  349. value = "'init'"
  350. }
  351. MatchEdge (N7_0, N7_1) {
  352. value = "username"
  353. }
  354. CreateEdge (N7_1, N7_2) {
  355. value = "'frame'"
  356. }
  357. DeleteEdge (N7_1, N7_3) {
  358. value = "'frame'"
  359. }
  360. CreateEdge (N7_2, N7_4) {
  361. value = "'evalstack'"
  362. }
  363. CreateEdge (N7_2, N7_5) {
  364. value = "'symbols'"
  365. }
  366. CreateEdge (N7_2, N7_6) {
  367. value = "'caller'"
  368. }
  369. CreateEdge (N7_2, N7_7) {
  370. value = "'returnvalue'"
  371. }
  372. CreateEdge (N7_2, N7_12) {
  373. value = "'IP'"
  374. }
  375. CreateEdge (N7_2, N7_13) {
  376. value = "'phase'"
  377. }
  378. NACEdge (N7_6, N7_11) {
  379. value = "'last_param'"
  380. }
  381. CreateEdge (N7_2, N7_3) {
  382. value = "'prev'"
  383. }
  384. MatchEdge (N7_3, N7_6) {
  385. value = "'IP'"
  386. }
  387. MatchEdge (N7_3, N7_8) {
  388. value = "'returnvalue'"
  389. }
  390. CreateEdge (N7_3, N7_9) {
  391. value = "'phase'"
  392. }
  393. DeleteEdge (N7_3, N7_10) {
  394. value = "'phase'"
  395. }
  396. MatchEdge (N7_8, N7_12) {
  397. value = "'body'"
  398. }
  399. }
  400. Rule Call_Call_Params_N8 {
  401. Root N8_0 {}
  402. Match N8_1 {
  403. match = True
  404. }
  405. Match N8_2 {}
  406. Match N8_3 {}
  407. Match N8_4 {
  408. value = "!call"
  409. }
  410. Match N8_5 {}
  411. Match N8_6 {
  412. value = "a"
  413. match = True
  414. }
  415. Create N8_7 {
  416. value = "'finish'"
  417. }
  418. Match N8_8 {}
  419. Match N8_9 {}
  420. Create N8_10 {}
  421. Match N8_11 {}
  422. Match N8_12 {}
  423. Match N8_13 {}
  424. Delete N8_14 {
  425. value = "'call'"
  426. }
  427. Match N8_15 {}
  428. Create N8_16 {}
  429. MatchEdge (N8_0, N8_1) {
  430. value = "username"
  431. }
  432. CreateEdge (N8_1, N8_2) {
  433. value = "'frame'"
  434. }
  435. DeleteEdge (N8_1, N8_3) {
  436. value = "'frame'"
  437. }
  438. MatchEdge (N8_2, N8_4) {
  439. value = "'caller'"
  440. }
  441. MatchEdge (N8_2, N8_3) {
  442. value = "'prev'"
  443. }
  444. MatchEdge (N8_2, N8_15) {
  445. value = "'symbols'"
  446. }
  447. MatchEdge (N8_2, N8_13) {
  448. value = "'IP'"
  449. }
  450. MatchEdge (N8_3, N8_4) {
  451. value = "!call"
  452. }
  453. CreateEdge (N8_3, N8_7) {
  454. value = "'finish'"
  455. }
  456. MatchEdge (N8_3, N8_8) {
  457. value = "'returnvalue'"
  458. }
  459. DeleteEdge (N8_3, N8_14) {
  460. value = "'phase'"
  461. }
  462. MatchEdge (N8_4, N8_5) {
  463. value = "'last_param'"
  464. }
  465. MatchEdge (N8_5, N8_6) {
  466. value = "'name'"
  467. }
  468. CreateEdge (N8_10, N8_8) {
  469. value = "'value'"
  470. }
  471. MatchEdge (N8_11, N8_9) {
  472. value = "a"
  473. }
  474. MatchEdge (N8_12, N8_13) {
  475. value = "'body'"
  476. }
  477. MatchEdge (N8_12, N8_11) {
  478. value = "'params'"
  479. }
  480. CreateEdge (N8_15, N8_16) {}
  481. CreateEdge (N8_16, N8_9) {}
  482. CreateEdge (N8_16, N8_10) {}
  483. }
  484. Rule Call_Params_First_Multi_N9 {
  485. Root N9_0 {}
  486. Match N9_1 {
  487. match = True
  488. }
  489. Match N9_2 {
  490. match = True
  491. ]
  492. Create N9_3 {}
  493. Create N9_4 {
  494. value = "'init'"
  495. }
  496. Create N9_5 {}
  497. Create N9_6 {}
  498. Create N9_7 {}
  499. Match N9_8 {}
  500. Match N9_9 {}
  501. Match N9_10 {}
  502. Create N9_11 {
  503. value = "'init'"
  504. }
  505. Create N9_12 {}
  506. Match N9_13 {}
  507. Match N9_14 {
  508. value = "!call"
  509. match = True
  510. }
  511. Match N9_15 {}
  512. Match N9_16 {}
  513. Match N9_17 {}
  514. MatchEdge (N9_0, N9_1) {
  515. value = "username"
  516. }
  517. MatchEdge (N9_1, N9_2) {
  518. value = "'frame'"
  519. }
  520. DeleteEdge (N9_2, N9_13) {
  521. value = "'evalstack'"
  522. }
  523. DeleteEdge (N9_2, N9_14) {
  524. value = "'IP'"
  525. }
  526. CreateEdge (N9_2, N9_11) {
  527. value = "'init'"
  528. }
  529. DeleteEdge (N9_2, N9_15) {
  530. value = "'phase'"
  531. }
  532. MatchEdge (N9_2, N9_10) {
  533. value = "'returnvalue'"
  534. }
  535. CreateEdge (N9_2, N9_17) {
  536. value = "'IP'"
  537. }
  538. CreateEdge (N9_3, N9_14) {
  539. value = "'caller'"
  540. }
  541. CreateEdge (N9_3, N9_2) {
  542. value = "'prev'"
  543. }
  544. CreateEdge (N9_3, N9_4) {
  545. value = "'phase'"
  546. }
  547. CreateEdge (N9_3, N9_5) {
  548. value = "'evalstack'"
  549. }
  550. CreateEdge (N9_3, N9_6) {
  551. value = "'symbols'"
  552. }
  553. CreateEdge (N9_3, N9_7) {
  554. value = "'returnvalue'"
  555. }
  556. CreateEdge (N9_3, N9_8) {
  557. value = "'IP'"
  558. }
  559. MatchEdge (N9_10, N9_9) {
  560. value = "'params'"
  561. }
  562. MatchEdge (N9_10, N9_8) {
  563. value = "'body'"
  564. }
  565. CreateEdge (N9_12, N9_13) {
  566. value = "'prev'"
  567. }
  568. CreateEdge (N9_13, N9_14) {
  569. value = "'inst'"
  570. }
  571. MatchEdge (N9_14, N9_15) {
  572. value = "'params'"
  573. }
  574. MatchEdge (N9_15, N9_16) {
  575. value = "'next_param'"
  576. }
  577. MatchEdge (N9_15, N9_17) {
  578. value = "'value'"
  579. }
  580. }
  581. Rule Call_Params_First_Single_N10 {
  582. Root N10_0 {}
  583. Match N10_1 {
  584. match = True
  585. }
  586. Match N10_2 {
  587. match = True
  588. }
  589. Create N10_3 {}
  590. Create N10_4 {
  591. value = "'init'"
  592. }
  593. Create N10_5 {}
  594. Create N10_6 {}
  595. Create N10_7 {}
  596. Match N10_8 {}
  597. Create N10_9 {
  598. value = "'init'"
  599. }
  600. Match N10_10 {}
  601. Match N10_11 {}
  602. Match N10_12 {}
  603. Create N10_13 {
  604. value = "'call'"
  605. }
  606. Match N10_14 {
  607. value = "!call"
  608. }
  609. Match N10_15 {}
  610. Match N10_16 {}
  611. Create N10_17 {}
  612. MatchEdge (N10_0, N10_1) {
  613. value = "username"
  614. }
  615. MatchEdge (N10_1, N10_2) {
  616. value = "'frame'"
  617. }
  618. CreateEdge (N10_2, N10_16) {
  619. value = "'IP'"
  620. }
  621. CreateEdge (N10_2, N10_9) {
  622. value = "'phase'"
  623. }
  624. MatchEdge (N10_2, N10_10) {
  625. value = "'returnvalue'"
  626. }
  627. DeleteEdge (N10_2, N10_12) {
  628. value = "'evalstack'"
  629. }
  630. CreateEdge (N10_2, N10_17) {
  631. value = "'evalstack'"
  632. }
  633. DeleteEdge (N10_2, N10_14) {
  634. value = "'IP'"
  635. }
  636. DeleteEdge (N10_2, N10_15) {
  637. value = "'phase'"
  638. }
  639. CreateEdge (N10_3, N10_4) {
  640. value = "'phase'"
  641. }
  642. CreateEdge (N10_3, N10_5) {
  643. value = "'evalstack'"
  644. }
  645. CreateEdge (N10_3, N10_6) {
  646. value = "'symbols'"
  647. }
  648. CreateEdge (N10_3, N10_7) {
  649. value = "'returnvalue'"
  650. }
  651. MatchEdge (N10_10, N10_8) {
  652. value = "'body'"
  653. }
  654. MatchEdge (N10_10, N10_11) {
  655. value = "'params'"
  656. }
  657. CreateEdge (N10_12, N10_13) {
  658. value = "'phase'"
  659. }
  660. CreateEdge (N10_12, N10_14) {
  661. value = "'inst'"
  662. }
  663. MatchEdge (N10_14, N10_15) {
  664. value = "'params'"
  665. }
  666. MatchEdge (N10_14, N10_15) {
  667. value = "'last_param'"
  668. }
  669. MatchEdge (N10_15, N10_16) {
  670. value = "'value'"
  671. }
  672. CreateEdge (N10_17, N10_12) {
  673. value = "'prev'"
  674. }
  675. }
  676. Rule If_False_N21 {
  677. Root N21_root {}
  678. Match N21_userroot {
  679. match = True
  680. }
  681. Match N21_frame {
  682. match = True
  683. }
  684. Delete N21_phase_D {
  685. value = "'cond'"
  686. match = True
  687. }
  688. Create N21_phase_C {
  689. value = "'finish'"
  690. }
  691. Match N21_IP {
  692. value = "!if"
  693. match = True
  694. }
  695. Match N21_RV {
  696. value = "False"
  697. match = True
  698. }
  699. NAC N21_else {}
  700. MatchEdge (N21_root, N21_userroot) {
  701. value = "username"
  702. }
  703. MatchEdge (N21_userroot, N21_frame) {
  704. value = "'frame'"
  705. }
  706. MatchEdge (N21_frame, N21_IP) {
  707. value = "'IP'"
  708. }
  709. MatchEdge (N21_frame, N21_RV) {
  710. value = "'returnvalue'"
  711. }
  712. DeleteEdge (N21_frame, N21_phase_D) {
  713. value = "'phase'"
  714. }
  715. CreateEdge (N21_frame, N21_phase_C) {
  716. value = "'phase'"
  717. }
  718. NACEdge (N21_IP, N21_else) {
  719. value = "'else'"
  720. }
  721. }