pr:(string -> unit) unit curry:(((#0! * #1!) -> #2!) -> (#0! -> (#1! -> #2!))) decurry:((#3! -> (#4! -> #5!)) -> ((#3! * #4!) -> #5!)) fact:(int -> int) liste:#6 list ref it_list:((#7! -> (#8! -> #7!)) -> (#7! -> (#8! list -> #7!))) map:((#9! -> #10!) -> (#9! list -> #10! list)) rev:(#11! list -> #11! list) build_list:((int -> #12!) -> (int -> (int -> #12! list))) list_length:(#13! list -> int) do_list:((#14! -> #15!) -> (#14! list -> unit)) print_int_list:(int list -> unit) unit unit fibo:(int -> int list) unit unit unit supprime:(int list -> (int -> int list)) build_seq:(int -> (int -> int list)) crible:(int -> int list) unit unit syrac:(int -> (int list -> int list)) list_max:(int list -> int) tri_fusion:((#16! -> (#16! -> bool)) -> (#16! list -> #16! list)) unit l:int list unit unit unit unit l:#17 list ref ajoute:(#17 -> unit) unit unit unit unit compteur:(int -> ((int -> unit) * ((#18! -> unit) * (#19! -> int)))) get:((#20! * (#21! * (unit -> #22!))) -> #22!) reinit:((#23! * ((unit -> #24!) * #25!)) -> #24!) add:((#26! * #27!) -> #26!) unit unit (#28 -> [#29,#28] Arbre) [#30,int] Arbre [#31,bool] Arbre ((([#32,#33] Arbre * [#32,#33] Arbre) * #32) -> [#32,#33] Arbre) xfeuille:(#34! -> [#35!,#34!] Arbre) fff:([#36!,int] Arbre -> [#36!,int] Arbre) infixe:((#37! -> #38!) -> ((#39! -> #40!) -> ([#37!,#39!] Arbre -> #40!))) aff_arbre:([string,int] Arbre -> unit) unit ar1:[string,int] Arbre ar2:[string,int] Arbre unit unit aff:([] Alt -> unit) unit arbre:[#41,[] Alt] Arbre arbre:[string,[] Alt] Arbre ((#42 -> #43) -> ((#44 -> #45) -> ([#42,#44] Arbre -> #45))) unit ([int] Option -> int) do:((#46! -> unit) -> ([#46!] Option -> unit)) ([string] Option -> unit) unit unit boucler:([#47!] Liste -> unit) decompter:([int] Liste -> (int -> int)) liste:[int] Liste unit unit unit Nombre d'instructions : 1488 0 Clos (0,1483) 1 Push 2 MakeStr Programme de test du compilateur ML 3 Push 4 GetGlobal 0 5 Call 6 MakeStr Alain FRISCH. Debut du projet : decembre 1998 7 Push 8 GetGlobal 0 9 Call 10 MakeStr 11 Push 12 GetGlobal 0 13 Call 14 Clos (0,1479) 15 Push 16 Clos (0,1462) 17 Push 18 Push 19 MakeVect 1 20 PMC 1435 21 Update (0,1) 22 MakeInt 0 23 MakeRef 24 Push 25 Push 26 MakeVect 1 27 PMC 1429 28 Update (0,1) 29 Push 30 MakeVect 1 31 PMC 1390 32 Update (0,1) 33 Clos (0,1357) 34 Push 35 Clos (0,1344) 36 Push 37 Clos (0,1279) 38 Push 39 Push 40 MakeVect 1 41 PMC 1249 42 Update (0,1) 43 Clos (0,1217) 44 Push 45 MakeStr I. Manipulations de listes 46 Push 47 GetGlobal 0 48 Call 49 MakeInt 10 50 Push 51 MakeInt 20 52 Push 53 MakeInt 30 54 Push 55 MakeInt 0 56 MakeCouple 57 MakeCouple 58 MakeCouple 59 Push 60 Clos (0,1210) 61 Push 62 Get 2 63 Push 64 MakeStr Voici une liste : 65 Push 66 Get 3 67 Call 68 Call 69 Get 2 70 Push 71 GetGlobal 7 72 Call 73 Push 74 MakeStr A l'envers : 75 Push 76 Get 3 77 Call 78 Call 79 Get 2 80 Push 81 Clos (0,1195) 82 Push 83 GetGlobal 6 84 Call 85 Call 86 Push 87 MakeStr Le carre : 88 Push 89 Get 3 90 Call 91 Call 92 MakeStr Somme : 93 PrintStr 94 Get 2 95 Push 96 MakeInt 0 97 Push 98 Clos (0,1191) 99 Push 100 GetGlobal 5 101 Call 102 Call 103 Call 104 PrintInt 105 MakeStr 106 Push 107 GetGlobal 0 108 Call 109 Drop 110 Drop 111 MakeStr 112 Push 113 GetGlobal 0 114 Call 115 Clos (0,1166) 116 Push 117 MakeStr II. Fibonnacci 118 Push 119 GetGlobal 0 120 Call 121 MakeInt 10 122 Push 123 GetGlobal 12 124 Call 125 Push 126 GetGlobal 7 127 Call 128 Push 129 GetGlobal 11 130 Call 131 MakeStr 132 Push 133 GetGlobal 0 134 Call 135 MakeStr 136 Push 137 GetGlobal 0 138 Call 139 Push 140 MakeVect 1 141 PMC 1112 142 Update (0,1) 143 Clos (0,1069) 144 Push 145 GetGlobal 8 146 Call 147 Push 148 Clos (0,1047) 149 Push 150 MakeStr III. Les nombres premier (crible) 151 Push 152 GetGlobal 0 153 Call 154 MakeInt 100 155 Push 156 GetGlobal 15 157 Call 158 Push 159 GetGlobal 11 160 Call 161 MakeStr 162 Push 163 GetGlobal 0 164 Call 165 MakeStr 166 Push 167 GetGlobal 0 168 Call 169 Push 170 MakeVect 1 171 PMC 1017 172 Update (0,1) 173 Clos (0,958) 174 Push 175 Push 176 MakeVect 1 177 PMC 916 178 Update (0,1) 179 MakeStr IV. Tri fusion 180 Push 181 GetGlobal 0 182 Call 183 MakeInt 0 184 Push 185 MakeInt 71 186 Push 187 GetGlobal 16 188 Call 189 Call 190 Push 191 MakeStr Une suite de Syracuse : 192 PrintStr 193 GetGlobal 19 194 Push 195 GetGlobal 11 196 Call 197 MakeStr 198 Push 199 GetGlobal 0 200 Call 201 MakeStr Triée : 202 PrintStr 203 GetGlobal 19 204 Push 205 Clos (0,759) 206 Push 207 GetGlobal 18 208 Call 209 Call 210 Push 211 GetGlobal 11 212 Call 213 MakeStr 214 Push 215 GetGlobal 0 216 Call 217 MakeStr 218 Push 219 GetGlobal 0 220 Call 221 MakeStr V. References et encapsulation 222 Push 223 GetGlobal 0 224 Call 225 MakeInt 0 226 MakeRef 227 Push 228 Clos (0,745) 229 Push 230 MakeInt 5 231 Push 232 GetGlobal 21 233 Call 234 MakeInt 10 235 Push 236 GetGlobal 21 237 Call 238 MakeInt 15 239 Push 240 GetGlobal 21 241 Call 242 GetGlobal 20 243 GetVect0 244 Push 245 GetGlobal 11 246 Call 247 MakeStr 248 Push 249 GetGlobal 0 250 Call 251 Clos (0,720) 252 Push 253 Clos (0,700) 254 Push 255 Clos (0,694) 256 Push 257 Clos (0,688) 258 Push 259 MakeInt 10 260 Push 261 GetGlobal 22 262 Call 263 Push 264 MakeInt 20 265 Push 266 GetGlobal 22 267 Call 268 Push 269 MakeInt 5 270 Push 271 Get 3 272 Push 273 GetGlobal 23 274 Call 275 Call 276 MakeInt 6 277 Push 278 Get 2 279 Push 280 GetGlobal 23 281 Call 282 Call 283 Get 2 284 Push 285 GetGlobal 24 286 Call 287 Get 2 288 Push 289 GetGlobal 25 290 Call 291 PrintInt 292 Get 1 293 Push 294 GetGlobal 25 295 Call 296 PrintInt 297 Drop 298 Drop 299 MakeStr VI. Types somme, arbres, listes bouclées 300 Push 301 GetGlobal 0 302 Call 303 Clos (0,685) 304 MakeInt 1 305 MakeConstr 0 306 MakeInt 1 307 MakeConstr 0 308 Clos (0,682) 309 Clos (0,685) 310 Push 311 Push 312 MakeVect 1 313 PMC 651 314 Update (0,1) 315 Clos (0,647) 316 Push 317 Clos (0,1214) 318 Push 319 Clos (0,606) 320 Push 321 GetGlobal 28 322 Call 323 Call 324 Push 325 MakeStr Arbres: 326 Push 327 GetGlobal 0 328 Call 329 MakeInt 10 330 MakeConstr 0 331 Push 332 MakeInt 20 333 MakeConstr 0 334 MakeCouple 335 Push 336 MakeStr A 337 MakeCouple 338 MakeConstr 1 339 Push 340 GetGlobal 30 341 Push 342 GetGlobal 30 343 MakeCouple 344 Push 345 MakeStr B 346 MakeCouple 347 MakeConstr 1 348 Push 349 GetGlobal 31 350 Push 351 GetGlobal 29 352 Call 353 MakeStr 354 Push 355 GetGlobal 0 356 Call 357 Clos (0,582) 358 Push 359 MakeStr Affichages divers: 360 Push 361 GetGlobal 0 362 Call 363 MakeInt 6 364 MakeConstr 0 365 Push 366 GetGlobal 32 367 Call 368 MakeInt 2 369 Push 370 GetGlobal 32 371 Call 372 MakeInt 3 373 Push 374 GetGlobal 32 375 Call 376 MakeStr Hello world !! 377 MakeConstr 1 378 Push 379 GetGlobal 32 380 Call 381 MakeInt 10 382 MakeConstr 0 383 MakeConstr 0 384 Push 385 MakeStr Alain 386 MakeConstr 1 387 MakeConstr 0 388 Push 389 MakeStr Frisch 390 MakeConstr 1 391 MakeConstr 0 392 MakeCouple 393 Push 394 MakeStr * 395 MakeCouple 396 MakeConstr 1 397 Push 398 GetGlobal 28 399 GetGlobal 34 400 Push 401 GetGlobal 32 402 Push 403 GetGlobal 0 404 Push 405 GetGlobal 28 406 Call 407 Call 408 Call 409 Clos (0,573) 410 Clos (0,569) 411 Push 412 Clos (0,555) 413 Push 414 GetGlobal 35 415 Call 416 MakeStr XYZ 417 MakeConstr 1 418 Push 419 Clos (0,555) 420 Push 421 GetGlobal 35 422 Call 423 Call 424 MakeInt 0 425 Push 426 Clos (0,555) 427 Push 428 GetGlobal 35 429 Call 430 Call 431 Clos (0,545) 432 Push 433 Push 434 MakeVect 1 435 PMC 513 436 Update (0,1) 437 MakeInt 10 438 Push 439 MakeInt 20 440 Push 441 MakeInt 0 442 MakeRef 443 MakeCouple 444 MakeConstr 1 445 MakeRef 446 MakeCouple 447 MakeConstr 1 448 Push 449 MakeStr Avant bouclage : 450 Push 451 GetGlobal 0 452 Call 453 MakeInt 10 454 Push 455 GetGlobal 38 456 Push 457 GetGlobal 37 458 Call 459 Call 460 MakeStr 461 Push 462 GetGlobal 0 463 Call 464 GetGlobal 38 465 Push 466 GetGlobal 36 467 Call 468 MakeStr Après bouclage : 469 Push 470 GetGlobal 0 471 Call 472 MakeInt 10 473 Push 474 GetGlobal 38 475 Push 476 GetGlobal 37 477 Call 478 Call 479 MakeStr 480 Push 481 GetGlobal 0 482 Call 483 Stop 0 484 EnvGet 0 485 TestConstConstr (0,488) 486 Get 3 487 DropReturn 0 488 TestConstr (1,511) 489 Get 1 490 First 491 PrintInt 492 Get 4 493 Push 494 MakeInt 0 495 TestEq 496 JumpTrue 509 497 Get 4 498 Push 499 MakeInt 1 500 Sub 501 Push 502 Get 2 503 Second 504 GetVect0 505 Push 506 EnvGet 1 507 Call 508 CallTerm 1 509 MakeInt 0 510 DropReturn 1 511 Stop -1 512 DropReturn 0 513 Get 3 514 Push 515 EnvGet 0 516 Push 517 Clos (2,484) 518 DropReturn 0 519 Get 3 520 TestConstConstr (0,523) 521 MakeInt 0 522 DropReturn 0 523 TestConstr (1,543) 524 Get 1 525 Second 526 Push 527 Get 1 528 GetVect0 529 Push 530 MakeInt 0 531 TestEq 532 JumpTrue 538 533 Get 1 534 GetVect0 535 Push 536 EnvGet 1 537 CallTerm 2 538 Get 1 539 Push 540 EnvGet 0 541 SetVect0 542 DropReturn 2 543 Stop -1 544 DropReturn 0 545 Get 3 546 Push 547 Push 548 MakeVect 2 549 PMC 519 550 Update (1,1) 551 Get 4 552 Push 553 Get 2 554 CallTerm 1 555 Get 3 556 PrintStr 557 DropReturn 0 558 Get 3 559 TestConstr (1,564) 560 Get 1 561 Push 562 EnvGet 0 563 CallTerm 1 564 TestConstConstr (0,567) 565 MakeInt 0 566 DropReturn 0 567 Stop -1 568 DropReturn 0 569 Get 3 570 Push 571 Clos (1,558) 572 DropReturn 0 573 Get 3 574 TestConstr (1,580) 575 Get 1 576 Push 577 MakeInt 1 578 Add 579 DropReturn 1 580 Stop -1 581 DropReturn 0 582 Get 3 583 TestConstr (0,589) 584 Get 1 585 PrintInt 586 MakeStr 587 PrintStr 588 DropReturn 1 589 TestConstr (1,595) 590 Get 1 591 PrintStr 592 MakeStr 593 PrintStr 594 DropReturn 1 595 TestConstConstr (2,599) 596 MakeStr C 597 PrintStr 598 DropReturn 0 599 Push 600 MakeStr ? 601 Push 602 GetGlobal 0 603 CallTerm 1 604 Stop -1 605 DropReturn 0 606 Get 3 607 PrintStr 608 MakeStr 609 PrintStr 610 DropReturn 0 611 Get 3 612 TestConstr (0,617) 613 Get 1 614 Push 615 EnvGet 1 616 CallTerm 1 617 TestConstr (1,635) 618 Get 1 619 First 620 First 621 Push 622 EnvGet 2 623 Call 624 Get 1 625 Second 626 Push 627 EnvGet 0 628 Call 629 Get 1 630 First 631 Second 632 Push 633 EnvGet 2 634 CallTerm 1 635 Stop -1 636 DropReturn 0 637 EnvGet 0 638 Push 639 Get 4 640 Push 641 Push 642 MakeVect 3 643 PMC 611 644 Update (2,1) 645 Get 1 646 DropReturn 1 647 Get 3 648 Push 649 Clos (1,637) 650 DropReturn 0 651 Get 3 652 TestConstr (0,659) 653 Get 1 654 Push 655 MakeInt 1 656 Add 657 MakeConstr 0 658 DropReturn 1 659 TestConstr (1,680) 660 Get 1 661 First 662 First 663 Push 664 EnvGet 0 665 Call 666 Push 667 Get 2 668 First 669 Second 670 Push 671 EnvGet 0 672 Call 673 MakeCouple 674 Push 675 Get 2 676 Second 677 MakeCouple 678 MakeConstr 1 679 DropReturn 1 680 Stop -1 681 DropReturn 0 682 Get 3 683 MakeConstr 1 684 DropReturn 0 685 Get 3 686 MakeConstr 0 687 DropReturn 0 688 MakeInt 0 689 Push 690 Get 4 691 Second 692 Second 693 CallTerm 0 694 MakeInt 0 695 Push 696 Get 4 697 Second 698 First 699 CallTerm 0 700 Get 3 701 First 702 DropReturn 0 703 EnvGet 0 704 GetVect0 705 DropReturn 0 706 EnvGet 0 707 Push 708 EnvGet 1 709 SetVect0 710 DropReturn 0 711 EnvGet 0 712 Push 713 EnvGet 0 714 GetVect0 715 Push 716 Get 5 717 Add 718 SetVect0 719 DropReturn 0 720 Get 3 721 MakeRef 722 Push 723 Get 1 724 Push 725 Clos (1,711) 726 Push 727 Get 2 728 Push 729 Get 6 730 Push 731 Clos (2,706) 732 Push 733 Get 3 734 Push 735 Clos (1,703) 736 Push 737 Get 3 738 Push 739 Get 3 740 Push 741 Get 3 742 MakeCouple 743 MakeCouple 744 DropReturn 4 745 GetGlobal 20 746 Push 747 Get 4 748 Push 749 GetGlobal 20 750 GetVect0 751 MakeCouple 752 SetVect0 753 DropReturn 0 754 Get 3 755 Push 756 EnvGet 0 757 TestLt 758 DropReturn 0 759 Get 3 760 Push 761 Clos (1,754) 762 DropReturn 0 763 EnvGet 0 764 Push 765 MakeInt 0 766 TestEq 767 JumpTrue 789 768 EnvGet 0 769 First 770 Push 771 EnvGet 0 772 Second 773 Push 774 Get 2 775 Push 776 Get 6 777 Second 778 MakeCouple 779 Push 780 Get 6 781 First 782 MakeCouple 783 Push 784 Get 2 785 Push 786 EnvGet 1 787 Call 788 CallTerm 2 789 Get 3 790 DropReturn 0 791 Get 3 792 Push 793 EnvGet 0 794 Push 795 Clos (2,763) 796 DropReturn 0 797 EnvGet 1 798 Push 799 MakeInt 0 800 TestEq 801 JumpTrue 845 802 Get 3 803 Push 804 MakeInt 0 805 TestEq 806 JumpTrue 843 807 Get 3 808 First 809 Push 810 EnvGet 1 811 First 812 Push 813 EnvGet 0 814 Call 815 Call 816 JumpTrue 830 817 Get 3 818 First 819 Push 820 Get 4 821 Second 822 Push 823 EnvGet 1 824 Push 825 EnvGet 2 826 Call 827 Call 828 MakeCouple 829 DropReturn 0 830 EnvGet 1 831 First 832 Push 833 Get 4 834 Push 835 EnvGet 1 836 Second 837 Push 838 EnvGet 2 839 Call 840 Call 841 MakeCouple 842 DropReturn 0 843 EnvGet 1 844 DropReturn 0 845 Get 3 846 DropReturn 0 847 EnvGet 0 848 Push 849 Get 4 850 Push 851 EnvGet 1 852 Push 853 Clos (3,797) 854 DropReturn 0 855 EnvGet 1 856 Push 857 Push 858 MakeVect 2 859 PMC 847 860 Update (1,1) 861 Push 862 MakeVect 1 863 PMC 791 864 Update (0,1) 865 Get 5 866 Push 867 MakeInt 0 868 TestEq 869 JumpTrue 914 870 Get 5 871 Second 872 Push 873 MakeInt 0 874 TestEq 875 JumpTrue 912 876 MakeInt 0 877 Push 878 MakeInt 0 879 MakeCouple 880 Push 881 Get 6 882 Push 883 Get 3 884 Call 885 Call 886 Push 887 Get 1 888 First 889 Push 890 EnvGet 1 891 Push 892 EnvGet 0 893 Call 894 Call 895 Push 896 Get 2 897 Second 898 Push 899 EnvGet 1 900 Push 901 EnvGet 0 902 Call 903 Call 904 Push 905 Get 1 906 Push 907 Get 3 908 Push 909 Get 7 910 Call 911 CallTerm 5 912 Get 5 913 DropReturn 2 914 Get 5 915 DropReturn 2 916 EnvGet 0 917 Push 918 Get 4 919 Push 920 Clos (2,855) 921 DropReturn 0 922 EnvGet 0 923 Push 924 MakeInt 0 925 TestEq 926 JumpTrue 950 927 Get 3 928 Push 929 EnvGet 0 930 First 931 TestLt 932 JumpTrue 941 933 Get 3 934 Push 935 EnvGet 0 936 Second 937 Push 938 EnvGet 1 939 Call 940 CallTerm 0 941 EnvGet 0 942 First 943 Push 944 EnvGet 0 945 Second 946 Push 947 EnvGet 1 948 Call 949 CallTerm 0 950 Get 3 951 DropReturn 0 952 Get 3 953 Push 954 EnvGet 0 955 Push 956 Clos (2,922) 957 DropReturn 0 958 Push 959 MakeVect 1 960 PMC 952 961 Update (0,1) 962 Get 4 963 First 964 Push 965 Get 5 966 Second 967 Push 968 Get 3 969 Call 970 CallTerm 1 971 EnvGet 0 972 Push 973 Get 4 974 MakeCouple 975 Push 976 EnvGet 0 977 Push 978 MakeInt 1 979 TestEq 980 JumpTrue 1015 981 EnvGet 0 982 Push 983 MakeInt 2 984 Div 985 Push 986 MakeInt 2 987 Mul 988 Push 989 EnvGet 0 990 TestEq 991 JumpTrue 1005 992 Get 1 993 Push 994 MakeInt 3 995 Push 996 EnvGet 0 997 Mul 998 Push 999 MakeInt 1 1000 Add 1001 Push 1002 EnvGet 1 1003 Call 1004 CallTerm 1 1005 Get 1 1006 Push 1007 EnvGet 0 1008 Push 1009 MakeInt 2 1010 Div 1011 Push 1012 EnvGet 1 1013 Call 1014 CallTerm 1 1015 Get 1 1016 DropReturn 1 1017 Get 3 1018 Push 1019 EnvGet 0 1020 Push 1021 Clos (2,971) 1022 DropReturn 0 1023 Get 3 1024 Push 1025 MakeInt 0 1026 TestEq 1027 JumpTrue 1045 1028 Get 3 1029 First 1030 Push 1031 Get 1 1032 Push 1033 Get 2 1034 Push 1035 Get 6 1036 Push 1037 GetGlobal 13 1038 Call 1039 Call 1040 Push 1041 EnvGet 0 1042 Call 1043 MakeCouple 1044 DropReturn 1 1045 MakeInt 0 1046 DropReturn 0 1047 Push 1048 MakeVect 1 1049 PMC 1023 1050 Update (0,1) 1051 MakeInt 500 1052 Push 1053 MakeInt 2 1054 Push 1055 GetGlobal 14 1056 Call 1057 Call 1058 Push 1059 Get 5 1060 Push 1061 MakeInt 2 1062 Push 1063 GetGlobal 14 1064 Call 1065 Call 1066 Push 1067 Get 3 1068 CallTerm 2 1069 Get 3 1070 DropReturn 0 1071 EnvGet 1 1072 Push 1073 MakeInt 0 1074 TestEq 1075 JumpTrue 1110 1076 EnvGet 1 1077 First 1078 Push 1079 Get 1 1080 Push 1081 Get 5 1082 Div 1083 Push 1084 Get 5 1085 Mul 1086 Push 1087 Get 2 1088 TestEq 1089 JumpTrue 1102 1090 Get 1 1091 Push 1092 Get 5 1093 Push 1094 EnvGet 1 1095 Second 1096 Push 1097 EnvGet 0 1098 Call 1099 Call 1100 MakeCouple 1101 DropReturn 1 1102 Get 4 1103 Push 1104 EnvGet 1 1105 Second 1106 Push 1107 EnvGet 0 1108 Call 1109 CallTerm 1 1110 MakeInt 0 1111 DropReturn 0 1112 EnvGet 0 1113 Push 1114 Get 4 1115 Push 1116 Clos (2,1071) 1117 DropReturn 0 1118 Get 3 1119 First 1120 Push 1121 Get 4 1122 Second 1123 First 1124 Add 1125 Push 1126 Get 4 1127 MakeCouple 1128 DropReturn 0 1129 EnvGet 0 1130 Push 1131 MakeInt 0 1132 TestEq 1133 JumpTrue 1150 1134 Get 3 1135 Push 1136 EnvGet 2 1137 Call 1138 Push 1139 EnvGet 2 1140 Push 1141 EnvGet 0 1142 Push 1143 MakeInt 1 1144 Sub 1145 Push 1146 EnvGet 1 1147 Call 1148 Call 1149 CallTerm 0 1150 Get 3 1151 DropReturn 0 1152 EnvGet 0 1153 Push 1154 EnvGet 1 1155 Push 1156 Get 5 1157 Push 1158 Clos (3,1129) 1159 DropReturn 0 1160 Get 3 1161 Push 1162 EnvGet 0 1163 Push 1164 Clos (2,1152) 1165 DropReturn 0 1166 Push 1167 MakeVect 1 1168 PMC 1160 1169 Update (0,1) 1170 MakeInt 1 1171 Push 1172 MakeInt 0 1173 Push 1174 MakeInt 0 1175 MakeCouple 1176 MakeCouple 1177 Push 1178 Clos (0,1118) 1179 Push 1180 Get 6 1181 Push 1182 Get 4 1183 Call 1184 Call 1185 CallTerm 1 1186 EnvGet 0 1187 Push 1188 Get 4 1189 Add 1190 DropReturn 0 1191 Get 3 1192 Push 1193 Clos (1,1186) 1194 DropReturn 0 1195 Get 3 1196 Push 1197 Get 4 1198 Mul 1199 DropReturn 0 1200 EnvGet 0 1201 PrintStr 1202 Get 3 1203 Push 1204 GetGlobal 11 1205 Call 1206 MakeStr 1207 Push 1208 GetGlobal 0 1209 CallTerm 0 1210 Get 3 1211 Push 1212 Clos (1,1200) 1213 DropReturn 0 1214 Get 3 1215 PrintInt 1216 DropReturn 0 1217 MakeStr [ 1218 PrintStr 1219 Get 3 1220 Push 1221 Clos (0,1214) 1222 Push 1223 GetGlobal 10 1224 Call 1225 Call 1226 MakeStr ] 1227 PrintStr 1228 DropReturn 0 1229 Get 3 1230 Push 1231 MakeInt 0 1232 TestEq 1233 JumpTrue 1247 1234 Get 3 1235 First 1236 Push 1237 EnvGet 0 1238 Call 1239 Get 3 1240 Second 1241 Push 1242 EnvGet 0 1243 Push 1244 EnvGet 1 1245 Call 1246 CallTerm 0 1247 MakeInt 0 1248 DropReturn 0 1249 Get 3 1250 Push 1251 EnvGet 0 1252 Push 1253 Clos (2,1229) 1254 DropReturn 0 1255 EnvGet 0 1256 Push 1257 MakeInt 0 1258 TestEq 1259 JumpTrue 1271 1260 Get 3 1261 Push 1262 MakeInt 1 1263 Add 1264 Push 1265 EnvGet 0 1266 Second 1267 Push 1268 EnvGet 1 1269 Call 1270 CallTerm 0 1271 Get 3 1272 DropReturn 0 1273 Get 3 1274 Push 1275 EnvGet 0 1276 Push 1277 Clos (2,1255) 1278 DropReturn 0 1279 Push 1280 MakeVect 1 1281 PMC 1273 1282 Update (0,1) 1283 MakeInt 0 1284 Push 1285 Get 5 1286 Push 1287 Get 3 1288 Call 1289 CallTerm 1 1290 EnvGet 1 1291 Push 1292 EnvGet 3 1293 TestLt 1294 JumpTrue 1311 1295 EnvGet 1 1296 Push 1297 EnvGet 2 1298 Call 1299 Push 1300 Get 4 1301 MakeCouple 1302 Push 1303 EnvGet 1 1304 Push 1305 MakeInt 1 1306 Sub 1307 Push 1308 EnvGet 0 1309 Call 1310 CallTerm 0 1311 Get 3 1312 DropReturn 0 1313 EnvGet 0 1314 Push 1315 Get 4 1316 Push 1317 EnvGet 1 1318 Push 1319 EnvGet 2 1320 Push 1321 Clos (4,1290) 1322 DropReturn 0 1323 Push 1324 EnvGet 0 1325 Push 1326 EnvGet 1 1327 Push 1328 MakeVect 3 1329 PMC 1313 1330 Update (0,1) 1331 MakeInt 0 1332 Push 1333 Get 5 1334 Push 1335 Get 3 1336 Call 1337 CallTerm 1 1338 EnvGet 0 1339 Push 1340 Get 4 1341 Push 1342 Clos (2,1323) 1343 DropReturn 0 1344 Get 3 1345 Push 1346 Clos (1,1338) 1347 DropReturn 0 1348 Get 3 1349 Push 1350 EnvGet 0 1351 MakeCouple 1352 DropReturn 0 1353 Get 3 1354 Push 1355 Clos (1,1348) 1356 DropReturn 0 1357 Get 3 1358 Push 1359 MakeInt 0 1360 Push 1361 Clos (0,1353) 1362 Push 1363 GetGlobal 5 1364 Call 1365 Call 1366 CallTerm 0 1367 Get 3 1368 Push 1369 MakeInt 0 1370 TestEq 1371 JumpTrue 1388 1372 Get 3 1373 First 1374 Push 1375 EnvGet 1 1376 Call 1377 Push 1378 Get 4 1379 Second 1380 Push 1381 EnvGet 1 1382 Push 1383 EnvGet 0 1384 Call 1385 Call 1386 MakeCouple 1387 DropReturn 0 1388 MakeInt 0 1389 DropReturn 0 1390 EnvGet 0 1391 Push 1392 Get 4 1393 Push 1394 Clos (2,1367) 1395 DropReturn 0 1396 Get 3 1397 Push 1398 MakeInt 0 1399 TestEq 1400 JumpTrue 1419 1401 Get 3 1402 Second 1403 Push 1404 Get 4 1405 First 1406 Push 1407 EnvGet 0 1408 Push 1409 EnvGet 2 1410 Call 1411 Call 1412 Push 1413 EnvGet 2 1414 Push 1415 EnvGet 1 1416 Call 1417 Call 1418 CallTerm 0 1419 EnvGet 0 1420 DropReturn 0 1421 Get 3 1422 Push 1423 EnvGet 0 1424 Push 1425 EnvGet 1 1426 Push 1427 Clos (3,1396) 1428 DropReturn 0 1429 EnvGet 0 1430 Push 1431 Get 4 1432 Push 1433 Clos (2,1421) 1434 DropReturn 0 1435 Get 3 1436 Push 1437 MakeInt 0 1438 TestEq 1439 JumpTrue 1451 1440 Get 3 1441 Push 1442 Get 4 1443 Push 1444 MakeInt 1 1445 Sub 1446 Push 1447 EnvGet 0 1448 Call 1449 Mul 1450 DropReturn 0 1451 MakeInt 1 1452 DropReturn 0 1453 Get 3 1454 Second 1455 Push 1456 Get 4 1457 First 1458 Push 1459 EnvGet 0 1460 Call 1461 CallTerm 0 1462 Get 3 1463 Push 1464 Clos (1,1453) 1465 DropReturn 0 1466 EnvGet 0 1467 Push 1468 Get 4 1469 MakeCouple 1470 Push 1471 EnvGet 1 1472 CallTerm 0 1473 Get 3 1474 Push 1475 EnvGet 0 1476 Push 1477 Clos (2,1466) 1478 DropReturn 0 1479 Get 3 1480 Push 1481 Clos (1,1473) 1482 DropReturn 0 1483 Get 3 1484 PrintStr 1485 MakeStr 1486 PrintStr 1487 DropReturn 0 ========== Execution ========== Programme de test du compilateur ML Alain FRISCH. Debut du projet : decembre 1998 I. Manipulations de listes Voici une liste :[10 20 30 ] A l'envers :[30 20 10 ] Le carre :[100 400 900 ] Somme :60 II. Fibonnacci [0 1 1 2 3 5 8 13 21 34 55 89 ] III. Les nombres premier (crible) [2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 ] IV. Tri fusion Une suite de Syracuse :[1 2 4 8 16 5 10 20 40 80 160 53 106 35 70 23 46 92 184 61 122 244 488 976 325 650 1300 433 866 1732 577 1154 2308 4616 9232 3077 6154 2051 4102 1367 2734 911 1822 3644 7288 2429 4858 1619 3238 1079 2158 719 1438 479 958 319 638 1276 425 850 283 566 1132 377 754 251 502 167 334 668 1336 445 890 1780 593 1186 395 790 263 526 175 350 700 233 466 155 310 103 206 412 137 274 91 182 364 121 242 484 161 322 107 214 71 ] Triée :[9232 7288 6154 4858 4616 4102 3644 3238 3077 2734 2429 2308 2158 2051 1822 1780 1732 1619 1438 1367 1336 1300 1276 1186 1154 1132 1079 976 958 911 890 866 850 790 754 719 700 668 650 638 593 577 566 526 502 488 484 479 466 445 433 425 412 395 377 364 350 334 325 322 319 310 283 274 263 251 244 242 233 214 206 184 182 175 167 161 160 155 137 122 121 107 106 103 92 91 80 71 70 61 53 46 40 35 23 20 16 10 8 5 4 2 1 ] V. References et encapsulation [15 10 5 ] 10 26 VI. Types somme, arbres, listes bouclées Arbres: 10 A 20 B 10 A 20 Affichages divers: 6 C ? Hello world !! Alain * Frisch XYZAvant bouclage : 10 20 Après bouclage : 10 20 10 20 10 20 10 20 10 20 10 Stop (code:0)