OR-1 dataflow CPU sketch
at main 1002 lines 20 kB view raw
1{ 2 "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json", 3 "name": "dfasm", 4 "word": "identifier", 5 "rules": { 6 "program": { 7 "type": "REPEAT", 8 "content": { 9 "type": "SYMBOL", 10 "name": "_statement" 11 } 12 }, 13 "_statement": { 14 "type": "CHOICE", 15 "members": [ 16 { 17 "type": "SYMBOL", 18 "name": "func_def" 19 }, 20 { 21 "type": "SYMBOL", 22 "name": "inst_def" 23 }, 24 { 25 "type": "SYMBOL", 26 "name": "strong_edge" 27 }, 28 { 29 "type": "SYMBOL", 30 "name": "weak_edge" 31 }, 32 { 33 "type": "SYMBOL", 34 "name": "plain_edge" 35 }, 36 { 37 "type": "SYMBOL", 38 "name": "data_def" 39 }, 40 { 41 "type": "SYMBOL", 42 "name": "pragma" 43 }, 44 { 45 "type": "SYMBOL", 46 "name": "location_dir" 47 } 48 ] 49 }, 50 "func_def": { 51 "type": "PREC", 52 "value": 2, 53 "content": { 54 "type": "SEQ", 55 "members": [ 56 { 57 "type": "SYMBOL", 58 "name": "func_ref" 59 }, 60 { 61 "type": "SYMBOL", 62 "name": "flow_out" 63 }, 64 { 65 "type": "STRING", 66 "value": "{" 67 }, 68 { 69 "type": "REPEAT", 70 "content": { 71 "type": "SYMBOL", 72 "name": "_statement" 73 } 74 }, 75 { 76 "type": "STRING", 77 "value": "}" 78 } 79 ] 80 } 81 }, 82 "inst_def": { 83 "type": "PREC", 84 "value": 2, 85 "content": { 86 "type": "SEQ", 87 "members": [ 88 { 89 "type": "SYMBOL", 90 "name": "qualified_ref" 91 }, 92 { 93 "type": "SYMBOL", 94 "name": "flow_in" 95 }, 96 { 97 "type": "SYMBOL", 98 "name": "opcode" 99 }, 100 { 101 "type": "REPEAT", 102 "content": { 103 "type": "SEQ", 104 "members": [ 105 { 106 "type": "STRING", 107 "value": "," 108 }, 109 { 110 "type": "SYMBOL", 111 "name": "_argument" 112 } 113 ] 114 } 115 } 116 ] 117 } 118 }, 119 "strong_edge": { 120 "type": "PREC", 121 "value": 2, 122 "content": { 123 "type": "SEQ", 124 "members": [ 125 { 126 "type": "SYMBOL", 127 "name": "opcode" 128 }, 129 { 130 "type": "SYMBOL", 131 "name": "_argument" 132 }, 133 { 134 "type": "REPEAT", 135 "content": { 136 "type": "SEQ", 137 "members": [ 138 { 139 "type": "STRING", 140 "value": "," 141 }, 142 { 143 "type": "SYMBOL", 144 "name": "_argument" 145 } 146 ] 147 } 148 }, 149 { 150 "type": "SYMBOL", 151 "name": "flow_out" 152 }, 153 { 154 "type": "SYMBOL", 155 "name": "ref_list" 156 } 157 ] 158 } 159 }, 160 "weak_edge": { 161 "type": "PREC", 162 "value": 2, 163 "content": { 164 "type": "SEQ", 165 "members": [ 166 { 167 "type": "SYMBOL", 168 "name": "ref_list" 169 }, 170 { 171 "type": "SYMBOL", 172 "name": "opcode" 173 }, 174 { 175 "type": "SYMBOL", 176 "name": "flow_in" 177 }, 178 { 179 "type": "SYMBOL", 180 "name": "_argument" 181 }, 182 { 183 "type": "REPEAT", 184 "content": { 185 "type": "SEQ", 186 "members": [ 187 { 188 "type": "STRING", 189 "value": "," 190 }, 191 { 192 "type": "SYMBOL", 193 "name": "_argument" 194 } 195 ] 196 } 197 } 198 ] 199 } 200 }, 201 "plain_edge": { 202 "type": "PREC", 203 "value": 2, 204 "content": { 205 "type": "SEQ", 206 "members": [ 207 { 208 "type": "SYMBOL", 209 "name": "qualified_ref" 210 }, 211 { 212 "type": "SYMBOL", 213 "name": "flow_out" 214 }, 215 { 216 "type": "SYMBOL", 217 "name": "ref_list" 218 } 219 ] 220 } 221 }, 222 "data_def": { 223 "type": "PREC", 224 "value": 2, 225 "content": { 226 "type": "SEQ", 227 "members": [ 228 { 229 "type": "SYMBOL", 230 "name": "qualified_ref" 231 }, 232 { 233 "type": "STRING", 234 "value": "=" 235 }, 236 { 237 "type": "CHOICE", 238 "members": [ 239 { 240 "type": "SYMBOL", 241 "name": "macro_call" 242 }, 243 { 244 "type": "SYMBOL", 245 "name": "value_list" 246 } 247 ] 248 } 249 ] 250 } 251 }, 252 "pragma": { 253 "type": "PREC", 254 "value": 2, 255 "content": { 256 "type": "SEQ", 257 "members": [ 258 { 259 "type": "STRING", 260 "value": "@system" 261 }, 262 { 263 "type": "SYMBOL", 264 "name": "system_param" 265 }, 266 { 267 "type": "REPEAT", 268 "content": { 269 "type": "SEQ", 270 "members": [ 271 { 272 "type": "STRING", 273 "value": "," 274 }, 275 { 276 "type": "SYMBOL", 277 "name": "system_param" 278 } 279 ] 280 } 281 } 282 ] 283 } 284 }, 285 "system_param": { 286 "type": "SEQ", 287 "members": [ 288 { 289 "type": "FIELD", 290 "name": "name", 291 "content": { 292 "type": "SYMBOL", 293 "name": "identifier" 294 } 295 }, 296 { 297 "type": "STRING", 298 "value": "=" 299 }, 300 { 301 "type": "FIELD", 302 "name": "value", 303 "content": { 304 "type": "SYMBOL", 305 "name": "number_literal" 306 } 307 } 308 ] 309 }, 310 "location_dir": { 311 "type": "PREC", 312 "value": -1, 313 "content": { 314 "type": "SYMBOL", 315 "name": "qualified_ref" 316 } 317 }, 318 "ref_list": { 319 "type": "SEQ", 320 "members": [ 321 { 322 "type": "SYMBOL", 323 "name": "qualified_ref" 324 }, 325 { 326 "type": "REPEAT", 327 "content": { 328 "type": "SEQ", 329 "members": [ 330 { 331 "type": "STRING", 332 "value": "," 333 }, 334 { 335 "type": "SYMBOL", 336 "name": "qualified_ref" 337 } 338 ] 339 } 340 } 341 ] 342 }, 343 "qualified_ref": { 344 "type": "SEQ", 345 "members": [ 346 { 347 "type": "FIELD", 348 "name": "ref", 349 "content": { 350 "type": "CHOICE", 351 "members": [ 352 { 353 "type": "SYMBOL", 354 "name": "node_ref" 355 }, 356 { 357 "type": "SYMBOL", 358 "name": "label_ref" 359 }, 360 { 361 "type": "SYMBOL", 362 "name": "func_ref" 363 } 364 ] 365 } 366 }, 367 { 368 "type": "FIELD", 369 "name": "placement", 370 "content": { 371 "type": "CHOICE", 372 "members": [ 373 { 374 "type": "SYMBOL", 375 "name": "placement" 376 }, 377 { 378 "type": "BLANK" 379 } 380 ] 381 } 382 }, 383 { 384 "type": "FIELD", 385 "name": "port", 386 "content": { 387 "type": "CHOICE", 388 "members": [ 389 { 390 "type": "SYMBOL", 391 "name": "port" 392 }, 393 { 394 "type": "BLANK" 395 } 396 ] 397 } 398 } 399 ] 400 }, 401 "node_ref": { 402 "type": "SEQ", 403 "members": [ 404 { 405 "type": "STRING", 406 "value": "@" 407 }, 408 { 409 "type": "FIELD", 410 "name": "name", 411 "content": { 412 "type": "SYMBOL", 413 "name": "identifier" 414 } 415 } 416 ] 417 }, 418 "label_ref": { 419 "type": "SEQ", 420 "members": [ 421 { 422 "type": "STRING", 423 "value": "&" 424 }, 425 { 426 "type": "FIELD", 427 "name": "name", 428 "content": { 429 "type": "SYMBOL", 430 "name": "identifier" 431 } 432 } 433 ] 434 }, 435 "func_ref": { 436 "type": "SEQ", 437 "members": [ 438 { 439 "type": "STRING", 440 "value": "$" 441 }, 442 { 443 "type": "FIELD", 444 "name": "name", 445 "content": { 446 "type": "SYMBOL", 447 "name": "identifier" 448 } 449 } 450 ] 451 }, 452 "placement": { 453 "type": "SEQ", 454 "members": [ 455 { 456 "type": "FIELD", 457 "name": "separator", 458 "content": { 459 "type": "IMMEDIATE_TOKEN", 460 "content": { 461 "type": "STRING", 462 "value": "|" 463 } 464 } 465 }, 466 { 467 "type": "FIELD", 468 "name": "name", 469 "content": { 470 "type": "SYMBOL", 471 "name": "identifier" 472 } 473 } 474 ] 475 }, 476 "port": { 477 "type": "SEQ", 478 "members": [ 479 { 480 "type": "FIELD", 481 "name": "separator", 482 "content": { 483 "type": "IMMEDIATE_TOKEN", 484 "content": { 485 "type": "STRING", 486 "value": ":" 487 } 488 } 489 }, 490 { 491 "type": "FIELD", 492 "name": "name", 493 "content": { 494 "type": "CHOICE", 495 "members": [ 496 { 497 "type": "SYMBOL", 498 "name": "identifier" 499 }, 500 { 501 "type": "SYMBOL", 502 "name": "number_literal" 503 } 504 ] 505 } 506 } 507 ] 508 }, 509 "_argument": { 510 "type": "CHOICE", 511 "members": [ 512 { 513 "type": "SYMBOL", 514 "name": "named_arg" 515 }, 516 { 517 "type": "SYMBOL", 518 "name": "_positional_arg" 519 } 520 ] 521 }, 522 "named_arg": { 523 "type": "SEQ", 524 "members": [ 525 { 526 "type": "FIELD", 527 "name": "key", 528 "content": { 529 "type": "SYMBOL", 530 "name": "identifier" 531 } 532 }, 533 { 534 "type": "STRING", 535 "value": "=" 536 }, 537 { 538 "type": "FIELD", 539 "name": "value", 540 "content": { 541 "type": "SYMBOL", 542 "name": "_positional_arg" 543 } 544 } 545 ] 546 }, 547 "_positional_arg": { 548 "type": "CHOICE", 549 "members": [ 550 { 551 "type": "SYMBOL", 552 "name": "_value" 553 }, 554 { 555 "type": "SYMBOL", 556 "name": "qualified_ref" 557 } 558 ] 559 }, 560 "_value": { 561 "type": "CHOICE", 562 "members": [ 563 { 564 "type": "SYMBOL", 565 "name": "number_literal" 566 }, 567 { 568 "type": "SYMBOL", 569 "name": "char_literal" 570 }, 571 { 572 "type": "SYMBOL", 573 "name": "string_literal" 574 }, 575 { 576 "type": "SYMBOL", 577 "name": "raw_string_literal" 578 }, 579 { 580 "type": "SYMBOL", 581 "name": "byte_string_literal" 582 } 583 ] 584 }, 585 "value_list": { 586 "type": "SEQ", 587 "members": [ 588 { 589 "type": "SYMBOL", 590 "name": "_value" 591 }, 592 { 593 "type": "REPEAT", 594 "content": { 595 "type": "SEQ", 596 "members": [ 597 { 598 "type": "STRING", 599 "value": "," 600 }, 601 { 602 "type": "SYMBOL", 603 "name": "_value" 604 } 605 ] 606 } 607 } 608 ] 609 }, 610 "number_literal": { 611 "type": "CHOICE", 612 "members": [ 613 { 614 "type": "SYMBOL", 615 "name": "hex_literal" 616 }, 617 { 618 "type": "SYMBOL", 619 "name": "dec_literal" 620 } 621 ] 622 }, 623 "hex_literal": { 624 "type": "TOKEN", 625 "content": { 626 "type": "SEQ", 627 "members": [ 628 { 629 "type": "STRING", 630 "value": "0x" 631 }, 632 { 633 "type": "PATTERN", 634 "value": "[0-9a-fA-F]+" 635 } 636 ] 637 } 638 }, 639 "dec_literal": { 640 "type": "PATTERN", 641 "value": "[0-9]+" 642 }, 643 "char_literal": { 644 "type": "SEQ", 645 "members": [ 646 { 647 "type": "STRING", 648 "value": "'" 649 }, 650 { 651 "type": "CHOICE", 652 "members": [ 653 { 654 "type": "SYMBOL", 655 "name": "escape_sequence" 656 }, 657 { 658 "type": "PATTERN", 659 "value": "[^'\\\\]" 660 } 661 ] 662 }, 663 { 664 "type": "STRING", 665 "value": "'" 666 } 667 ] 668 }, 669 "string_literal": { 670 "type": "SEQ", 671 "members": [ 672 { 673 "type": "STRING", 674 "value": "\"" 675 }, 676 { 677 "type": "REPEAT", 678 "content": { 679 "type": "CHOICE", 680 "members": [ 681 { 682 "type": "SYMBOL", 683 "name": "escape_sequence" 684 }, 685 { 686 "type": "PATTERN", 687 "value": "[^\"\\\\]+" 688 } 689 ] 690 } 691 }, 692 { 693 "type": "STRING", 694 "value": "\"" 695 } 696 ] 697 }, 698 "raw_string_literal": { 699 "type": "SEQ", 700 "members": [ 701 { 702 "type": "STRING", 703 "value": "r\"" 704 }, 705 { 706 "type": "PATTERN", 707 "value": "[^\"]*" 708 }, 709 { 710 "type": "STRING", 711 "value": "\"" 712 } 713 ] 714 }, 715 "byte_string_literal": { 716 "type": "SEQ", 717 "members": [ 718 { 719 "type": "STRING", 720 "value": "b\"" 721 }, 722 { 723 "type": "REPEAT", 724 "content": { 725 "type": "CHOICE", 726 "members": [ 727 { 728 "type": "SYMBOL", 729 "name": "escape_sequence" 730 }, 731 { 732 "type": "PATTERN", 733 "value": "[^\"\\\\]+" 734 } 735 ] 736 } 737 }, 738 { 739 "type": "STRING", 740 "value": "\"" 741 } 742 ] 743 }, 744 "escape_sequence": { 745 "type": "PATTERN", 746 "value": "\\\\([ntr0\\\\'\"]|x[0-9a-fA-F]{2})" 747 }, 748 "macro_call": { 749 "type": "PREC_RIGHT", 750 "value": 0, 751 "content": { 752 "type": "SEQ", 753 "members": [ 754 { 755 "type": "STRING", 756 "value": "#" 757 }, 758 { 759 "type": "FIELD", 760 "name": "name", 761 "content": { 762 "type": "SYMBOL", 763 "name": "identifier" 764 } 765 }, 766 { 767 "type": "REPEAT", 768 "content": { 769 "type": "SYMBOL", 770 "name": "_value" 771 } 772 } 773 ] 774 } 775 }, 776 "opcode": { 777 "type": "CHOICE", 778 "members": [ 779 { 780 "type": "STRING", 781 "value": "add" 782 }, 783 { 784 "type": "STRING", 785 "value": "sub" 786 }, 787 { 788 "type": "STRING", 789 "value": "inc" 790 }, 791 { 792 "type": "STRING", 793 "value": "dec" 794 }, 795 { 796 "type": "STRING", 797 "value": "shiftl" 798 }, 799 { 800 "type": "STRING", 801 "value": "shiftr" 802 }, 803 { 804 "type": "STRING", 805 "value": "ashiftr" 806 }, 807 { 808 "type": "STRING", 809 "value": "and" 810 }, 811 { 812 "type": "STRING", 813 "value": "or" 814 }, 815 { 816 "type": "STRING", 817 "value": "xor" 818 }, 819 { 820 "type": "STRING", 821 "value": "not" 822 }, 823 { 824 "type": "STRING", 825 "value": "eq" 826 }, 827 { 828 "type": "STRING", 829 "value": "lt" 830 }, 831 { 832 "type": "STRING", 833 "value": "lte" 834 }, 835 { 836 "type": "STRING", 837 "value": "gt" 838 }, 839 { 840 "type": "STRING", 841 "value": "gte" 842 }, 843 { 844 "type": "STRING", 845 "value": "breq" 846 }, 847 { 848 "type": "STRING", 849 "value": "brgt" 850 }, 851 { 852 "type": "STRING", 853 "value": "brge" 854 }, 855 { 856 "type": "STRING", 857 "value": "brof" 858 }, 859 { 860 "type": "STRING", 861 "value": "brty" 862 }, 863 { 864 "type": "STRING", 865 "value": "sweq" 866 }, 867 { 868 "type": "STRING", 869 "value": "swgt" 870 }, 871 { 872 "type": "STRING", 873 "value": "swge" 874 }, 875 { 876 "type": "STRING", 877 "value": "swof" 878 }, 879 { 880 "type": "STRING", 881 "value": "swty" 882 }, 883 { 884 "type": "STRING", 885 "value": "gate" 886 }, 887 { 888 "type": "STRING", 889 "value": "sel" 890 }, 891 { 892 "type": "STRING", 893 "value": "merge" 894 }, 895 { 896 "type": "STRING", 897 "value": "pass" 898 }, 899 { 900 "type": "STRING", 901 "value": "const" 902 }, 903 { 904 "type": "STRING", 905 "value": "free_ctx" 906 }, 907 { 908 "type": "STRING", 909 "value": "change_tag" 910 }, 911 { 912 "type": "STRING", 913 "value": "extract_tag" 914 }, 915 { 916 "type": "STRING", 917 "value": "read" 918 }, 919 { 920 "type": "STRING", 921 "value": "write" 922 }, 923 { 924 "type": "STRING", 925 "value": "clear" 926 }, 927 { 928 "type": "STRING", 929 "value": "alloc" 930 }, 931 { 932 "type": "STRING", 933 "value": "exec" 934 }, 935 { 936 "type": "STRING", 937 "value": "free" 938 }, 939 { 940 "type": "STRING", 941 "value": "rd_inc" 942 }, 943 { 944 "type": "STRING", 945 "value": "rd_dec" 946 }, 947 { 948 "type": "STRING", 949 "value": "cmp_sw" 950 }, 951 { 952 "type": "STRING", 953 "value": "load_inst" 954 } 955 ] 956 }, 957 "flow_in": { 958 "type": "STRING", 959 "value": "<|" 960 }, 961 "flow_out": { 962 "type": "STRING", 963 "value": "|>" 964 }, 965 "identifier": { 966 "type": "PATTERN", 967 "value": "[a-zA-Z_][a-zA-Z0-9_]*" 968 }, 969 "comment": { 970 "type": "TOKEN", 971 "content": { 972 "type": "SEQ", 973 "members": [ 974 { 975 "type": "STRING", 976 "value": ";" 977 }, 978 { 979 "type": "PATTERN", 980 "value": "[^\\n]*" 981 } 982 ] 983 } 984 } 985 }, 986 "extras": [ 987 { 988 "type": "PATTERN", 989 "value": "\\s" 990 }, 991 { 992 "type": "SYMBOL", 993 "name": "comment" 994 } 995 ], 996 "conflicts": [], 997 "precedences": [], 998 "externals": [], 999 "inline": [], 1000 "supertypes": [], 1001 "reserved": {} 1002}