1{
   2  "$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
   3  "name": "odin",
   4  "word": "identifier",
   5  "rules": {
   6    "source_file": {
   7      "type": "SEQ",
   8      "members": [
   9        {
  10          "type": "REPEAT",
  11          "content": {
  12            "type": "SEQ",
  13            "members": [
  14              {
  15                "type": "SYMBOL",
  16                "name": "declaration"
  17              },
  18              {
  19                "type": "SYMBOL",
  20                "name": "_separator"
  21              }
  22            ]
  23          }
  24        },
  25        {
  26          "type": "CHOICE",
  27          "members": [
  28            {
  29              "type": "SYMBOL",
  30              "name": "declaration"
  31            },
  32            {
  33              "type": "BLANK"
  34            }
  35          ]
  36        }
  37      ]
  38    },
  39    "block": {
  40      "type": "PREC",
  41      "value": 2,
  42      "content": {
  43        "type": "SEQ",
  44        "members": [
  45          {
  46            "type": "STRING",
  47            "value": "{"
  48          },
  49          {
  50            "type": "CHOICE",
  51            "members": [
  52              {
  53                "type": "SEQ",
  54                "members": [
  55                  {
  56                    "type": "SEQ",
  57                    "members": [
  58                      {
  59                        "type": "CHOICE",
  60                        "members": [
  61                          {
  62                            "type": "SYMBOL",
  63                            "name": "tag"
  64                          },
  65                          {
  66                            "type": "BLANK"
  67                          }
  68                        ]
  69                      },
  70                      {
  71                        "type": "SYMBOL",
  72                        "name": "statement"
  73                      }
  74                    ]
  75                  },
  76                  {
  77                    "type": "REPEAT",
  78                    "content": {
  79                      "type": "SEQ",
  80                      "members": [
  81                        {
  82                          "type": "SYMBOL",
  83                          "name": "_separator"
  84                        },
  85                        {
  86                          "type": "CHOICE",
  87                          "members": [
  88                            {
  89                              "type": "SEQ",
  90                              "members": [
  91                                {
  92                                  "type": "CHOICE",
  93                                  "members": [
  94                                    {
  95                                      "type": "SYMBOL",
  96                                      "name": "tag"
  97                                    },
  98                                    {
  99                                      "type": "BLANK"
 100                                    }
 101                                  ]
 102                                },
 103                                {
 104                                  "type": "SYMBOL",
 105                                  "name": "statement"
 106                                }
 107                              ]
 108                            },
 109                            {
 110                              "type": "BLANK"
 111                            }
 112                          ]
 113                        }
 114                      ]
 115                    }
 116                  }
 117                ]
 118              },
 119              {
 120                "type": "BLANK"
 121              }
 122            ]
 123          },
 124          {
 125            "type": "STRING",
 126            "value": "}"
 127          }
 128        ]
 129      }
 130    },
 131    "tagged_block": {
 132      "type": "SEQ",
 133      "members": [
 134        {
 135          "type": "SYMBOL",
 136          "name": "tag"
 137        },
 138        {
 139          "type": "SYMBOL",
 140          "name": "block"
 141        }
 142      ]
 143    },
 144    "declaration": {
 145      "type": "CHOICE",
 146      "members": [
 147        {
 148          "type": "SYMBOL",
 149          "name": "build_tag"
 150        },
 151        {
 152          "type": "SYMBOL",
 153          "name": "package_declaration"
 154        },
 155        {
 156          "type": "SYMBOL",
 157          "name": "import_declaration"
 158        },
 159        {
 160          "type": "SYMBOL",
 161          "name": "procedure_declaration"
 162        },
 163        {
 164          "type": "SYMBOL",
 165          "name": "overloaded_procedure_declaration"
 166        },
 167        {
 168          "type": "SYMBOL",
 169          "name": "struct_declaration"
 170        },
 171        {
 172          "type": "SYMBOL",
 173          "name": "enum_declaration"
 174        },
 175        {
 176          "type": "SYMBOL",
 177          "name": "union_declaration"
 178        },
 179        {
 180          "type": "SYMBOL",
 181          "name": "bit_field_declaration"
 182        },
 183        {
 184          "type": "SYMBOL",
 185          "name": "variable_declaration"
 186        },
 187        {
 188          "type": "SYMBOL",
 189          "name": "var_declaration"
 190        },
 191        {
 192          "type": "SYMBOL",
 193          "name": "const_declaration"
 194        },
 195        {
 196          "type": "SYMBOL",
 197          "name": "const_type_declaration"
 198        },
 199        {
 200          "type": "SYMBOL",
 201          "name": "foreign_block"
 202        },
 203        {
 204          "type": "SYMBOL",
 205          "name": "when_statement"
 206        },
 207        {
 208          "type": "SYMBOL",
 209          "name": "_expression_no_tag"
 210        }
 211      ]
 212    },
 213    "build_tag": {
 214      "type": "SEQ",
 215      "members": [
 216        {
 217          "type": "STRING",
 218          "value": "#+"
 219        },
 220        {
 221          "type": "PATTERN",
 222          "value": ".+"
 223        }
 224      ]
 225    },
 226    "package_declaration": {
 227      "type": "SEQ",
 228      "members": [
 229        {
 230          "type": "STRING",
 231          "value": "package"
 232        },
 233        {
 234          "type": "SYMBOL",
 235          "name": "identifier"
 236        }
 237      ]
 238    },
 239    "import_declaration": {
 240      "type": "SEQ",
 241      "members": [
 242        {
 243          "type": "CHOICE",
 244          "members": [
 245            {
 246              "type": "SYMBOL",
 247              "name": "attributes"
 248            },
 249            {
 250              "type": "BLANK"
 251            }
 252          ]
 253        },
 254        {
 255          "type": "CHOICE",
 256          "members": [
 257            {
 258              "type": "STRING",
 259              "value": "foreign"
 260            },
 261            {
 262              "type": "BLANK"
 263            }
 264          ]
 265        },
 266        {
 267          "type": "STRING",
 268          "value": "import"
 269        },
 270        {
 271          "type": "CHOICE",
 272          "members": [
 273            {
 274              "type": "FIELD",
 275              "name": "alias",
 276              "content": {
 277                "type": "SYMBOL",
 278                "name": "identifier"
 279              }
 280            },
 281            {
 282              "type": "BLANK"
 283            }
 284          ]
 285        },
 286        {
 287          "type": "CHOICE",
 288          "members": [
 289            {
 290              "type": "SYMBOL",
 291              "name": "string"
 292            },
 293            {
 294              "type": "SEQ",
 295              "members": [
 296                {
 297                  "type": "STRING",
 298                  "value": "{"
 299                },
 300                {
 301                  "type": "SEQ",
 302                  "members": [
 303                    {
 304                      "type": "CHOICE",
 305                      "members": [
 306                        {
 307                          "type": "SYMBOL",
 308                          "name": "string"
 309                        },
 310                        {
 311                          "type": "SYMBOL",
 312                          "name": "identifier"
 313                        }
 314                      ]
 315                    },
 316                    {
 317                      "type": "REPEAT",
 318                      "content": {
 319                        "type": "SEQ",
 320                        "members": [
 321                          {
 322                            "type": "STRING",
 323                            "value": ","
 324                          },
 325                          {
 326                            "type": "CHOICE",
 327                            "members": [
 328                              {
 329                                "type": "SYMBOL",
 330                                "name": "string"
 331                              },
 332                              {
 333                                "type": "SYMBOL",
 334                                "name": "identifier"
 335                              }
 336                            ]
 337                          }
 338                        ]
 339                      }
 340                    }
 341                  ]
 342                },
 343                {
 344                  "type": "CHOICE",
 345                  "members": [
 346                    {
 347                      "type": "STRING",
 348                      "value": ","
 349                    },
 350                    {
 351                      "type": "BLANK"
 352                    }
 353                  ]
 354                },
 355                {
 356                  "type": "STRING",
 357                  "value": "}"
 358                }
 359              ]
 360            }
 361          ]
 362        }
 363      ]
 364    },
 365    "procedure_declaration": {
 366      "type": "SEQ",
 367      "members": [
 368        {
 369          "type": "CHOICE",
 370          "members": [
 371            {
 372              "type": "SYMBOL",
 373              "name": "attributes"
 374            },
 375            {
 376              "type": "BLANK"
 377            }
 378          ]
 379        },
 380        {
 381          "type": "SYMBOL",
 382          "name": "expression"
 383        },
 384        {
 385          "type": "STRING",
 386          "value": "::"
 387        },
 388        {
 389          "type": "CHOICE",
 390          "members": [
 391            {
 392              "type": "SYMBOL",
 393              "name": "tag"
 394            },
 395            {
 396              "type": "BLANK"
 397            }
 398          ]
 399        },
 400        {
 401          "type": "SYMBOL",
 402          "name": "procedure"
 403        }
 404      ]
 405    },
 406    "procedure": {
 407      "type": "PREC_RIGHT",
 408      "value": 0,
 409      "content": {
 410        "type": "SEQ",
 411        "members": [
 412          {
 413            "type": "STRING",
 414            "value": "proc"
 415          },
 416          {
 417            "type": "CHOICE",
 418            "members": [
 419              {
 420                "type": "SYMBOL",
 421                "name": "calling_convention"
 422              },
 423              {
 424                "type": "BLANK"
 425              }
 426            ]
 427          },
 428          {
 429            "type": "SYMBOL",
 430            "name": "parameters"
 431          },
 432          {
 433            "type": "CHOICE",
 434            "members": [
 435              {
 436                "type": "SEQ",
 437                "members": [
 438                  {
 439                    "type": "STRING",
 440                    "value": "->"
 441                  },
 442                  {
 443                    "type": "CHOICE",
 444                    "members": [
 445                      {
 446                        "type": "SYMBOL",
 447                        "name": "tag"
 448                      },
 449                      {
 450                        "type": "BLANK"
 451                      }
 452                    ]
 453                  },
 454                  {
 455                    "type": "CHOICE",
 456                    "members": [
 457                      {
 458                        "type": "SYMBOL",
 459                        "name": "type"
 460                      },
 461                      {
 462                        "type": "SYMBOL",
 463                        "name": "named_type"
 464                      }
 465                    ]
 466                  },
 467                  {
 468                    "type": "CHOICE",
 469                    "members": [
 470                      {
 471                        "type": "SYMBOL",
 472                        "name": "tag"
 473                      },
 474                      {
 475                        "type": "BLANK"
 476                      }
 477                    ]
 478                  }
 479                ]
 480              },
 481              {
 482                "type": "BLANK"
 483              }
 484            ]
 485          },
 486          {
 487            "type": "CHOICE",
 488            "members": [
 489              {
 490                "type": "SYMBOL",
 491                "name": "where_clause"
 492              },
 493              {
 494                "type": "BLANK"
 495              }
 496            ]
 497          },
 498          {
 499            "type": "CHOICE",
 500            "members": [
 501              {
 502                "type": "SYMBOL",
 503                "name": "tag"
 504              },
 505              {
 506                "type": "BLANK"
 507              }
 508            ]
 509          },
 510          {
 511            "type": "CHOICE",
 512            "members": [
 513              {
 514                "type": "CHOICE",
 515                "members": [
 516                  {
 517                    "type": "SYMBOL",
 518                    "name": "block"
 519                  },
 520                  {
 521                    "type": "SYMBOL",
 522                    "name": "uninitialized"
 523                  }
 524                ]
 525              },
 526              {
 527                "type": "BLANK"
 528              }
 529            ]
 530          }
 531        ]
 532      }
 533    },
 534    "where_clause": {
 535      "type": "PREC_RIGHT",
 536      "value": 0,
 537      "content": {
 538        "type": "SEQ",
 539        "members": [
 540          {
 541            "type": "STRING",
 542            "value": "where"
 543          },
 544          {
 545            "type": "SEQ",
 546            "members": [
 547              {
 548                "type": "PREC_RIGHT",
 549                "value": 0,
 550                "content": {
 551                  "type": "SYMBOL",
 552                  "name": "expression"
 553                }
 554              },
 555              {
 556                "type": "REPEAT",
 557                "content": {
 558                  "type": "SEQ",
 559                  "members": [
 560                    {
 561                      "type": "STRING",
 562                      "value": ","
 563                    },
 564                    {
 565                      "type": "PREC_RIGHT",
 566                      "value": 0,
 567                      "content": {
 568                        "type": "SYMBOL",
 569                        "name": "expression"
 570                      }
 571                    }
 572                  ]
 573                }
 574              }
 575            ]
 576          }
 577        ]
 578      }
 579    },
 580    "calling_convention": {
 581      "type": "CHOICE",
 582      "members": [
 583        {
 584          "type": "STRING",
 585          "value": "\"odin\""
 586        },
 587        {
 588          "type": "STRING",
 589          "value": "\"contextless\""
 590        },
 591        {
 592          "type": "STRING",
 593          "value": "\"stdcall\""
 594        },
 595        {
 596          "type": "STRING",
 597          "value": "\"std\""
 598        },
 599        {
 600          "type": "STRING",
 601          "value": "\"cdecl\""
 602        },
 603        {
 604          "type": "STRING",
 605          "value": "\"c\""
 606        },
 607        {
 608          "type": "STRING",
 609          "value": "\"fastcall\""
 610        },
 611        {
 612          "type": "STRING",
 613          "value": "\"fast\""
 614        },
 615        {
 616          "type": "STRING",
 617          "value": "\"none\""
 618        },
 619        {
 620          "type": "STRING",
 621          "value": "\"system\""
 622        }
 623      ]
 624    },
 625    "overloaded_procedure_declaration": {
 626      "type": "SEQ",
 627      "members": [
 628        {
 629          "type": "CHOICE",
 630          "members": [
 631            {
 632              "type": "SYMBOL",
 633              "name": "attributes"
 634            },
 635            {
 636              "type": "BLANK"
 637            }
 638          ]
 639        },
 640        {
 641          "type": "SYMBOL",
 642          "name": "expression"
 643        },
 644        {
 645          "type": "STRING",
 646          "value": "::"
 647        },
 648        {
 649          "type": "STRING",
 650          "value": "proc"
 651        },
 652        {
 653          "type": "STRING",
 654          "value": "{"
 655        },
 656        {
 657          "type": "CHOICE",
 658          "members": [
 659            {
 660              "type": "SEQ",
 661              "members": [
 662                {
 663                  "type": "SEQ",
 664                  "members": [
 665                    {
 666                      "type": "SYMBOL",
 667                      "name": "expression"
 668                    },
 669                    {
 670                      "type": "REPEAT",
 671                      "content": {
 672                        "type": "SEQ",
 673                        "members": [
 674                          {
 675                            "type": "STRING",
 676                            "value": ","
 677                          },
 678                          {
 679                            "type": "SYMBOL",
 680                            "name": "expression"
 681                          }
 682                        ]
 683                      }
 684                    }
 685                  ]
 686                },
 687                {
 688                  "type": "CHOICE",
 689                  "members": [
 690                    {
 691                      "type": "STRING",
 692                      "value": ","
 693                    },
 694                    {
 695                      "type": "BLANK"
 696                    }
 697                  ]
 698                }
 699              ]
 700            },
 701            {
 702              "type": "BLANK"
 703            }
 704          ]
 705        },
 706        {
 707          "type": "STRING",
 708          "value": "}"
 709        }
 710      ]
 711    },
 712    "struct_declaration": {
 713      "type": "SEQ",
 714      "members": [
 715        {
 716          "type": "CHOICE",
 717          "members": [
 718            {
 719              "type": "SYMBOL",
 720              "name": "attributes"
 721            },
 722            {
 723              "type": "BLANK"
 724            }
 725          ]
 726        },
 727        {
 728          "type": "SYMBOL",
 729          "name": "expression"
 730        },
 731        {
 732          "type": "STRING",
 733          "value": "::"
 734        },
 735        {
 736          "type": "STRING",
 737          "value": "struct"
 738        },
 739        {
 740          "type": "CHOICE",
 741          "members": [
 742            {
 743              "type": "SYMBOL",
 744              "name": "polymorphic_parameters"
 745            },
 746            {
 747              "type": "BLANK"
 748            }
 749          ]
 750        },
 751        {
 752          "type": "REPEAT",
 753          "content": {
 754            "type": "SEQ",
 755            "members": [
 756              {
 757                "type": "SYMBOL",
 758                "name": "tag"
 759              },
 760              {
 761                "type": "CHOICE",
 762                "members": [
 763                  {
 764                    "type": "CHOICE",
 765                    "members": [
 766                      {
 767                        "type": "SYMBOL",
 768                        "name": "identifier"
 769                      },
 770                      {
 771                        "type": "SYMBOL",
 772                        "name": "number"
 773                      }
 774                    ]
 775                  },
 776                  {
 777                    "type": "BLANK"
 778                  }
 779                ]
 780              }
 781            ]
 782          }
 783        },
 784        {
 785          "type": "CHOICE",
 786          "members": [
 787            {
 788              "type": "SYMBOL",
 789              "name": "where_clause"
 790            },
 791            {
 792              "type": "BLANK"
 793            }
 794          ]
 795        },
 796        {
 797          "type": "STRING",
 798          "value": "{"
 799        },
 800        {
 801          "type": "CHOICE",
 802          "members": [
 803            {
 804              "type": "SEQ",
 805              "members": [
 806                {
 807                  "type": "SEQ",
 808                  "members": [
 809                    {
 810                      "type": "SYMBOL",
 811                      "name": "field"
 812                    },
 813                    {
 814                      "type": "REPEAT",
 815                      "content": {
 816                        "type": "SEQ",
 817                        "members": [
 818                          {
 819                            "type": "STRING",
 820                            "value": ","
 821                          },
 822                          {
 823                            "type": "SYMBOL",
 824                            "name": "field"
 825                          }
 826                        ]
 827                      }
 828                    }
 829                  ]
 830                },
 831                {
 832                  "type": "CHOICE",
 833                  "members": [
 834                    {
 835                      "type": "STRING",
 836                      "value": ","
 837                    },
 838                    {
 839                      "type": "BLANK"
 840                    }
 841                  ]
 842                }
 843              ]
 844            },
 845            {
 846              "type": "BLANK"
 847            }
 848          ]
 849        },
 850        {
 851          "type": "STRING",
 852          "value": "}"
 853        }
 854      ]
 855    },
 856    "enum_declaration": {
 857      "type": "SEQ",
 858      "members": [
 859        {
 860          "type": "CHOICE",
 861          "members": [
 862            {
 863              "type": "SYMBOL",
 864              "name": "attributes"
 865            },
 866            {
 867              "type": "BLANK"
 868            }
 869          ]
 870        },
 871        {
 872          "type": "CHOICE",
 873          "members": [
 874            {
 875              "type": "STRING",
 876              "value": "using"
 877            },
 878            {
 879              "type": "BLANK"
 880            }
 881          ]
 882        },
 883        {
 884          "type": "SYMBOL",
 885          "name": "expression"
 886        },
 887        {
 888          "type": "STRING",
 889          "value": "::"
 890        },
 891        {
 892          "type": "STRING",
 893          "value": "enum"
 894        },
 895        {
 896          "type": "CHOICE",
 897          "members": [
 898            {
 899              "type": "SYMBOL",
 900              "name": "type"
 901            },
 902            {
 903              "type": "BLANK"
 904            }
 905          ]
 906        },
 907        {
 908          "type": "STRING",
 909          "value": "{"
 910        },
 911        {
 912          "type": "CHOICE",
 913          "members": [
 914            {
 915              "type": "SEQ",
 916              "members": [
 917                {
 918                  "type": "SEQ",
 919                  "members": [
 920                    {
 921                      "type": "SEQ",
 922                      "members": [
 923                        {
 924                          "type": "SYMBOL",
 925                          "name": "identifier"
 926                        },
 927                        {
 928                          "type": "CHOICE",
 929                          "members": [
 930                            {
 931                              "type": "SEQ",
 932                              "members": [
 933                                {
 934                                  "type": "STRING",
 935                                  "value": "="
 936                                },
 937                                {
 938                                  "type": "SYMBOL",
 939                                  "name": "expression"
 940                                }
 941                              ]
 942                            },
 943                            {
 944                              "type": "BLANK"
 945                            }
 946                          ]
 947                        }
 948                      ]
 949                    },
 950                    {
 951                      "type": "REPEAT",
 952                      "content": {
 953                        "type": "SEQ",
 954                        "members": [
 955                          {
 956                            "type": "STRING",
 957                            "value": ","
 958                          },
 959                          {
 960                            "type": "SEQ",
 961                            "members": [
 962                              {
 963                                "type": "SYMBOL",
 964                                "name": "identifier"
 965                              },
 966                              {
 967                                "type": "CHOICE",
 968                                "members": [
 969                                  {
 970                                    "type": "SEQ",
 971                                    "members": [
 972                                      {
 973                                        "type": "STRING",
 974                                        "value": "="
 975                                      },
 976                                      {
 977                                        "type": "SYMBOL",
 978                                        "name": "expression"
 979                                      }
 980                                    ]
 981                                  },
 982                                  {
 983                                    "type": "BLANK"
 984                                  }
 985                                ]
 986                              }
 987                            ]
 988                          }
 989                        ]
 990                      }
 991                    }
 992                  ]
 993                },
 994                {
 995                  "type": "CHOICE",
 996                  "members": [
 997                    {
 998                      "type": "STRING",
 999                      "value": ","
1000                    },
1001                    {
1002                      "type": "BLANK"
1003                    }
1004                  ]
1005                }
1006              ]
1007            },
1008            {
1009              "type": "BLANK"
1010            }
1011          ]
1012        },
1013        {
1014          "type": "STRING",
1015          "value": "}"
1016        }
1017      ]
1018    },
1019    "union_declaration": {
1020      "type": "SEQ",
1021      "members": [
1022        {
1023          "type": "CHOICE",
1024          "members": [
1025            {
1026              "type": "SYMBOL",
1027              "name": "attributes"
1028            },
1029            {
1030              "type": "BLANK"
1031            }
1032          ]
1033        },
1034        {
1035          "type": "SYMBOL",
1036          "name": "expression"
1037        },
1038        {
1039          "type": "STRING",
1040          "value": "::"
1041        },
1042        {
1043          "type": "STRING",
1044          "value": "union"
1045        },
1046        {
1047          "type": "CHOICE",
1048          "members": [
1049            {
1050              "type": "SYMBOL",
1051              "name": "polymorphic_parameters"
1052            },
1053            {
1054              "type": "BLANK"
1055            }
1056          ]
1057        },
1058        {
1059          "type": "CHOICE",
1060          "members": [
1061            {
1062              "type": "SYMBOL",
1063              "name": "tag"
1064            },
1065            {
1066              "type": "BLANK"
1067            }
1068          ]
1069        },
1070        {
1071          "type": "STRING",
1072          "value": "{"
1073        },
1074        {
1075          "type": "CHOICE",
1076          "members": [
1077            {
1078              "type": "SEQ",
1079              "members": [
1080                {
1081                  "type": "SEQ",
1082                  "members": [
1083                    {
1084                      "type": "SYMBOL",
1085                      "name": "type"
1086                    },
1087                    {
1088                      "type": "REPEAT",
1089                      "content": {
1090                        "type": "SEQ",
1091                        "members": [
1092                          {
1093                            "type": "STRING",
1094                            "value": ","
1095                          },
1096                          {
1097                            "type": "SYMBOL",
1098                            "name": "type"
1099                          }
1100                        ]
1101                      }
1102                    }
1103                  ]
1104                },
1105                {
1106                  "type": "CHOICE",
1107                  "members": [
1108                    {
1109                      "type": "STRING",
1110                      "value": ","
1111                    },
1112                    {
1113                      "type": "BLANK"
1114                    }
1115                  ]
1116                }
1117              ]
1118            },
1119            {
1120              "type": "BLANK"
1121            }
1122          ]
1123        },
1124        {
1125          "type": "STRING",
1126          "value": "}"
1127        }
1128      ]
1129    },
1130    "bit_field_declaration": {
1131      "type": "SEQ",
1132      "members": [
1133        {
1134          "type": "CHOICE",
1135          "members": [
1136            {
1137              "type": "SYMBOL",
1138              "name": "attributes"
1139            },
1140            {
1141              "type": "BLANK"
1142            }
1143          ]
1144        },
1145        {
1146          "type": "SYMBOL",
1147          "name": "expression"
1148        },
1149        {
1150          "type": "STRING",
1151          "value": "::"
1152        },
1153        {
1154          "type": "STRING",
1155          "value": "bit_field"
1156        },
1157        {
1158          "type": "SYMBOL",
1159          "name": "type"
1160        },
1161        {
1162          "type": "STRING",
1163          "value": "{"
1164        },
1165        {
1166          "type": "CHOICE",
1167          "members": [
1168            {
1169              "type": "SEQ",
1170              "members": [
1171                {
1172                  "type": "SEQ",
1173                  "members": [
1174                    {
1175                      "type": "SEQ",
1176                      "members": [
1177                        {
1178                          "type": "SYMBOL",
1179                          "name": "identifier"
1180                        },
1181                        {
1182                          "type": "STRING",
1183                          "value": ":"
1184                        },
1185                        {
1186                          "type": "SYMBOL",
1187                          "name": "type"
1188                        },
1189                        {
1190                          "type": "STRING",
1191                          "value": "|"
1192                        },
1193                        {
1194                          "type": "SYMBOL",
1195                          "name": "expression"
1196                        }
1197                      ]
1198                    },
1199                    {
1200                      "type": "REPEAT",
1201                      "content": {
1202                        "type": "SEQ",
1203                        "members": [
1204                          {
1205                            "type": "STRING",
1206                            "value": ","
1207                          },
1208                          {
1209                            "type": "SEQ",
1210                            "members": [
1211                              {
1212                                "type": "SYMBOL",
1213                                "name": "identifier"
1214                              },
1215                              {
1216                                "type": "STRING",
1217                                "value": ":"
1218                              },
1219                              {
1220                                "type": "SYMBOL",
1221                                "name": "type"
1222                              },
1223                              {
1224                                "type": "STRING",
1225                                "value": "|"
1226                              },
1227                              {
1228                                "type": "SYMBOL",
1229                                "name": "expression"
1230                              }
1231                            ]
1232                          }
1233                        ]
1234                      }
1235                    }
1236                  ]
1237                },
1238                {
1239                  "type": "CHOICE",
1240                  "members": [
1241                    {
1242                      "type": "STRING",
1243                      "value": ","
1244                    },
1245                    {
1246                      "type": "BLANK"
1247                    }
1248                  ]
1249                }
1250              ]
1251            },
1252            {
1253              "type": "BLANK"
1254            }
1255          ]
1256        },
1257        {
1258          "type": "STRING",
1259          "value": "}"
1260        }
1261      ]
1262    },
1263    "variable_declaration": {
1264      "type": "SEQ",
1265      "members": [
1266        {
1267          "type": "CHOICE",
1268          "members": [
1269            {
1270              "type": "SYMBOL",
1271              "name": "attributes"
1272            },
1273            {
1274              "type": "BLANK"
1275            }
1276          ]
1277        },
1278        {
1279          "type": "SEQ",
1280          "members": [
1281            {
1282              "type": "SYMBOL",
1283              "name": "expression"
1284            },
1285            {
1286              "type": "REPEAT",
1287              "content": {
1288                "type": "SEQ",
1289                "members": [
1290                  {
1291                    "type": "STRING",
1292                    "value": ","
1293                  },
1294                  {
1295                    "type": "SYMBOL",
1296                    "name": "expression"
1297                  }
1298                ]
1299              }
1300            }
1301          ]
1302        },
1303        {
1304          "type": "STRING",
1305          "value": ":="
1306        },
1307        {
1308          "type": "SEQ",
1309          "members": [
1310            {
1311              "type": "CHOICE",
1312              "members": [
1313                {
1314                  "type": "SYMBOL",
1315                  "name": "expression"
1316                },
1317                {
1318                  "type": "SYMBOL",
1319                  "name": "procedure"
1320                }
1321              ]
1322            },
1323            {
1324              "type": "REPEAT",
1325              "content": {
1326                "type": "SEQ",
1327                "members": [
1328                  {
1329                    "type": "STRING",
1330                    "value": ","
1331                  },
1332                  {
1333                    "type": "CHOICE",
1334                    "members": [
1335                      {
1336                        "type": "SYMBOL",
1337                        "name": "expression"
1338                      },
1339                      {
1340                        "type": "SYMBOL",
1341                        "name": "procedure"
1342                      }
1343                    ]
1344                  }
1345                ]
1346              }
1347            }
1348          ]
1349        },
1350        {
1351          "type": "CHOICE",
1352          "members": [
1353            {
1354              "type": "STRING",
1355              "value": ","
1356            },
1357            {
1358              "type": "BLANK"
1359            }
1360          ]
1361        }
1362      ]
1363    },
1364    "const_declaration": {
1365      "type": "SEQ",
1366      "members": [
1367        {
1368          "type": "CHOICE",
1369          "members": [
1370            {
1371              "type": "SYMBOL",
1372              "name": "attributes"
1373            },
1374            {
1375              "type": "BLANK"
1376            }
1377          ]
1378        },
1379        {
1380          "type": "SEQ",
1381          "members": [
1382            {
1383              "type": "SYMBOL",
1384              "name": "expression"
1385            },
1386            {
1387              "type": "REPEAT",
1388              "content": {
1389                "type": "SEQ",
1390                "members": [
1391                  {
1392                    "type": "STRING",
1393                    "value": ","
1394                  },
1395                  {
1396                    "type": "SYMBOL",
1397                    "name": "expression"
1398                  }
1399                ]
1400              }
1401            }
1402          ]
1403        },
1404        {
1405          "type": "STRING",
1406          "value": "::"
1407        },
1408        {
1409          "type": "CHOICE",
1410          "members": [
1411            {
1412              "type": "SYMBOL",
1413              "name": "tag"
1414            },
1415            {
1416              "type": "BLANK"
1417            }
1418          ]
1419        },
1420        {
1421          "type": "SEQ",
1422          "members": [
1423            {
1424              "type": "CHOICE",
1425              "members": [
1426                {
1427                  "type": "SYMBOL",
1428                  "name": "expression"
1429                },
1430                {
1431                  "type": "SEQ",
1432                  "members": [
1433                    {
1434                      "type": "ALIAS",
1435                      "content": {
1436                        "type": "STRING",
1437                        "value": "#type"
1438                      },
1439                      "named": true,
1440                      "value": "tag"
1441                    },
1442                    {
1443                      "type": "SYMBOL",
1444                      "name": "type"
1445                    }
1446                  ]
1447                },
1448                {
1449                  "type": "SYMBOL",
1450                  "name": "array_type"
1451                },
1452                {
1453                  "type": "SYMBOL",
1454                  "name": "bit_set_type"
1455                },
1456                {
1457                  "type": "SYMBOL",
1458                  "name": "pointer_type"
1459                }
1460              ]
1461            },
1462            {
1463              "type": "REPEAT",
1464              "content": {
1465                "type": "SEQ",
1466                "members": [
1467                  {
1468                    "type": "STRING",
1469                    "value": ","
1470                  },
1471                  {
1472                    "type": "CHOICE",
1473                    "members": [
1474                      {
1475                        "type": "SYMBOL",
1476                        "name": "expression"
1477                      },
1478                      {
1479                        "type": "SEQ",
1480                        "members": [
1481                          {
1482                            "type": "ALIAS",
1483                            "content": {
1484                              "type": "STRING",
1485                              "value": "#type"
1486                            },
1487                            "named": true,
1488                            "value": "tag"
1489                          },
1490                          {
1491                            "type": "SYMBOL",
1492                            "name": "type"
1493                          }
1494                        ]
1495                      },
1496                      {
1497                        "type": "SYMBOL",
1498                        "name": "array_type"
1499                      },
1500                      {
1501                        "type": "SYMBOL",
1502                        "name": "bit_set_type"
1503                      },
1504                      {
1505                        "type": "SYMBOL",
1506                        "name": "pointer_type"
1507                      }
1508                    ]
1509                  }
1510                ]
1511              }
1512            }
1513          ]
1514        }
1515      ]
1516    },
1517    "const_type_declaration": {
1518      "type": "PREC",
1519      "value": 1,
1520      "content": {
1521        "type": "SEQ",
1522        "members": [
1523          {
1524            "type": "CHOICE",
1525            "members": [
1526              {
1527                "type": "SYMBOL",
1528                "name": "attributes"
1529              },
1530              {
1531                "type": "BLANK"
1532              }
1533            ]
1534          },
1535          {
1536            "type": "SYMBOL",
1537            "name": "expression"
1538          },
1539          {
1540            "type": "STRING",
1541            "value": ":"
1542          },
1543          {
1544            "type": "SYMBOL",
1545            "name": "type"
1546          },
1547          {
1548            "type": "STRING",
1549            "value": ":"
1550          },
1551          {
1552            "type": "SYMBOL",
1553            "name": "expression"
1554          }
1555        ]
1556      }
1557    },
1558    "foreign_block": {
1559      "type": "SEQ",
1560      "members": [
1561        {
1562          "type": "CHOICE",
1563          "members": [
1564            {
1565              "type": "SYMBOL",
1566              "name": "attributes"
1567            },
1568            {
1569              "type": "BLANK"
1570            }
1571          ]
1572        },
1573        {
1574          "type": "STRING",
1575          "value": "foreign"
1576        },
1577        {
1578          "type": "CHOICE",
1579          "members": [
1580            {
1581              "type": "SYMBOL",
1582              "name": "identifier"
1583            },
1584            {
1585              "type": "BLANK"
1586            }
1587          ]
1588        },
1589        {
1590          "type": "SYMBOL",
1591          "name": "block"
1592        }
1593      ]
1594    },
1595    "attributes": {
1596      "type": "REPEAT1",
1597      "content": {
1598        "type": "SYMBOL",
1599        "name": "attribute"
1600      }
1601    },
1602    "attribute": {
1603      "type": "SEQ",
1604      "members": [
1605        {
1606          "type": "STRING",
1607          "value": "@"
1608        },
1609        {
1610          "type": "CHOICE",
1611          "members": [
1612            {
1613              "type": "SYMBOL",
1614              "name": "identifier"
1615            },
1616            {
1617              "type": "SEQ",
1618              "members": [
1619                {
1620                  "type": "STRING",
1621                  "value": "("
1622                },
1623                {
1624                  "type": "SEQ",
1625                  "members": [
1626                    {
1627                      "type": "SEQ",
1628                      "members": [
1629                        {
1630                          "type": "SYMBOL",
1631                          "name": "identifier"
1632                        },
1633                        {
1634                          "type": "CHOICE",
1635                          "members": [
1636                            {
1637                              "type": "SEQ",
1638                              "members": [
1639                                {
1640                                  "type": "STRING",
1641                                  "value": "="
1642                                },
1643                                {
1644                                  "type": "SYMBOL",
1645                                  "name": "expression"
1646                                }
1647                              ]
1648                            },
1649                            {
1650                              "type": "BLANK"
1651                            }
1652                          ]
1653                        }
1654                      ]
1655                    },
1656                    {
1657                      "type": "REPEAT",
1658                      "content": {
1659                        "type": "SEQ",
1660                        "members": [
1661                          {
1662                            "type": "STRING",
1663                            "value": ","
1664                          },
1665                          {
1666                            "type": "SEQ",
1667                            "members": [
1668                              {
1669                                "type": "SYMBOL",
1670                                "name": "identifier"
1671                              },
1672                              {
1673                                "type": "CHOICE",
1674                                "members": [
1675                                  {
1676                                    "type": "SEQ",
1677                                    "members": [
1678                                      {
1679                                        "type": "STRING",
1680                                        "value": "="
1681                                      },
1682                                      {
1683                                        "type": "SYMBOL",
1684                                        "name": "expression"
1685                                      }
1686                                    ]
1687                                  },
1688                                  {
1689                                    "type": "BLANK"
1690                                  }
1691                                ]
1692                              }
1693                            ]
1694                          }
1695                        ]
1696                      }
1697                    }
1698                  ]
1699                },
1700                {
1701                  "type": "STRING",
1702                  "value": ")"
1703                }
1704              ]
1705            }
1706          ]
1707        }
1708      ]
1709    },
1710    "parameters": {
1711      "type": "SEQ",
1712      "members": [
1713        {
1714          "type": "STRING",
1715          "value": "("
1716        },
1717        {
1718          "type": "CHOICE",
1719          "members": [
1720            {
1721              "type": "SEQ",
1722              "members": [
1723                {
1724                  "type": "SEQ",
1725                  "members": [
1726                    {
1727                      "type": "CHOICE",
1728                      "members": [
1729                        {
1730                          "type": "SYMBOL",
1731                          "name": "parameter"
1732                        },
1733                        {
1734                          "type": "SYMBOL",
1735                          "name": "default_parameter"
1736                        }
1737                      ]
1738                    },
1739                    {
1740                      "type": "REPEAT",
1741                      "content": {
1742                        "type": "SEQ",
1743                        "members": [
1744                          {
1745                            "type": "STRING",
1746                            "value": ","
1747                          },
1748                          {
1749                            "type": "CHOICE",
1750                            "members": [
1751                              {
1752                                "type": "SYMBOL",
1753                                "name": "parameter"
1754                              },
1755                              {
1756                                "type": "SYMBOL",
1757                                "name": "default_parameter"
1758                              }
1759                            ]
1760                          }
1761                        ]
1762                      }
1763                    }
1764                  ]
1765                },
1766                {
1767                  "type": "CHOICE",
1768                  "members": [
1769                    {
1770                      "type": "STRING",
1771                      "value": ","
1772                    },
1773                    {
1774                      "type": "BLANK"
1775                    }
1776                  ]
1777                }
1778              ]
1779            },
1780            {
1781              "type": "BLANK"
1782            }
1783          ]
1784        },
1785        {
1786          "type": "STRING",
1787          "value": ")"
1788        }
1789      ]
1790    },
1791    "parameter": {
1792      "type": "PREC_RIGHT",
1793      "value": 0,
1794      "content": {
1795        "type": "SEQ",
1796        "members": [
1797          {
1798            "type": "SEQ",
1799            "members": [
1800              {
1801                "type": "SYMBOL",
1802                "name": "_param_header"
1803              },
1804              {
1805                "type": "REPEAT",
1806                "content": {
1807                  "type": "SEQ",
1808                  "members": [
1809                    {
1810                      "type": "STRING",
1811                      "value": ","
1812                    },
1813                    {
1814                      "type": "SYMBOL",
1815                      "name": "_param_header"
1816                    }
1817                  ]
1818                }
1819              }
1820            ]
1821          },
1822          {
1823            "type": "CHOICE",
1824            "members": [
1825              {
1826                "type": "SYMBOL",
1827                "name": "_param_type"
1828              },
1829              {
1830                "type": "BLANK"
1831              }
1832            ]
1833          }
1834        ]
1835      }
1836    },
1837    "_param_header": {
1838      "type": "SEQ",
1839      "members": [
1840        {
1841          "type": "CHOICE",
1842          "members": [
1843            {
1844              "type": "SYMBOL",
1845              "name": "tag"
1846            },
1847            {
1848              "type": "BLANK"
1849            }
1850          ]
1851        },
1852        {
1853          "type": "CHOICE",
1854          "members": [
1855            {
1856              "type": "STRING",
1857              "value": "using"
1858            },
1859            {
1860              "type": "BLANK"
1861            }
1862          ]
1863        },
1864        {
1865          "type": "CHOICE",
1866          "members": [
1867            {
1868              "type": "STRING",
1869              "value": "$"
1870            },
1871            {
1872              "type": "BLANK"
1873            }
1874          ]
1875        },
1876        {
1877          "type": "CHOICE",
1878          "members": [
1879            {
1880              "type": "SYMBOL",
1881              "name": "identifier"
1882            },
1883            {
1884              "type": "SYMBOL",
1885              "name": "variadic_type"
1886            },
1887            {
1888              "type": "SYMBOL",
1889              "name": "array_type"
1890            },
1891            {
1892              "type": "SYMBOL",
1893              "name": "pointer_type"
1894            },
1895            {
1896              "type": "SYMBOL",
1897              "name": "field_type"
1898            },
1899            {
1900              "type": "SYMBOL",
1901              "name": "_procedure_type"
1902            }
1903          ]
1904        }
1905      ]
1906    },
1907    "_param_type": {
1908      "type": "SEQ",
1909      "members": [
1910        {
1911          "type": "STRING",
1912          "value": ":"
1913        },
1914        {
1915          "type": "CHOICE",
1916          "members": [
1917            {
1918              "type": "SYMBOL",
1919              "name": "tag"
1920            },
1921            {
1922              "type": "BLANK"
1923            }
1924          ]
1925        },
1926        {
1927          "type": "SYMBOL",
1928          "name": "type"
1929        },
1930        {
1931          "type": "CHOICE",
1932          "members": [
1933            {
1934              "type": "SYMBOL",
1935              "name": "identifier"
1936            },
1937            {
1938              "type": "BLANK"
1939            }
1940          ]
1941        },
1942        {
1943          "type": "CHOICE",
1944          "members": [
1945            {
1946              "type": "SEQ",
1947              "members": [
1948                {
1949                  "type": "STRING",
1950                  "value": "="
1951                },
1952                {
1953                  "type": "SYMBOL",
1954                  "name": "expression"
1955                }
1956              ]
1957            },
1958            {
1959              "type": "BLANK"
1960            }
1961          ]
1962        }
1963      ]
1964    },
1965    "default_parameter": {
1966      "type": "SEQ",
1967      "members": [
1968        {
1969          "type": "CHOICE",
1970          "members": [
1971            {
1972              "type": "SYMBOL",
1973              "name": "tag"
1974            },
1975            {
1976              "type": "BLANK"
1977            }
1978          ]
1979        },
1980        {
1981          "type": "CHOICE",
1982          "members": [
1983            {
1984              "type": "STRING",
1985              "value": "using"
1986            },
1987            {
1988              "type": "BLANK"
1989            }
1990          ]
1991        },
1992        {
1993          "type": "SYMBOL",
1994          "name": "identifier"
1995        },
1996        {
1997          "type": "STRING",
1998          "value": ":="
1999        },
2000        {
2001          "type": "SYMBOL",
2002          "name": "expression"
2003        }
2004      ]
2005    },
2006    "polymorphic_parameters": {
2007      "type": "SEQ",
2008      "members": [
2009        {
2010          "type": "STRING",
2011          "value": "("
2012        },
2013        {
2014          "type": "SEQ",
2015          "members": [
2016            {
2017              "type": "SEQ",
2018              "members": [
2019                {
2020                  "type": "SEQ",
2021                  "members": [
2022                    {
2023                      "type": "SEQ",
2024                      "members": [
2025                        {
2026                          "type": "CHOICE",
2027                          "members": [
2028                            {
2029                              "type": "STRING",
2030                              "value": "$"
2031                            },
2032                            {
2033                              "type": "BLANK"
2034                            }
2035                          ]
2036                        },
2037                        {
2038                          "type": "SYMBOL",
2039                          "name": "identifier"
2040                        }
2041                      ]
2042                    },
2043                    {
2044                      "type": "REPEAT",
2045                      "content": {
2046                        "type": "SEQ",
2047                        "members": [
2048                          {
2049                            "type": "STRING",
2050                            "value": ","
2051                          },
2052                          {
2053                            "type": "SEQ",
2054                            "members": [
2055                              {
2056                                "type": "CHOICE",
2057                                "members": [
2058                                  {
2059                                    "type": "STRING",
2060                                    "value": "$"
2061                                  },
2062                                  {
2063                                    "type": "BLANK"
2064                                  }
2065                                ]
2066                              },
2067                              {
2068                                "type": "SYMBOL",
2069                                "name": "identifier"
2070                              }
2071                            ]
2072                          }
2073                        ]
2074                      }
2075                    }
2076                  ]
2077                },
2078                {
2079                  "type": "STRING",
2080                  "value": ":"
2081                },
2082                {
2083                  "type": "SYMBOL",
2084                  "name": "type"
2085                }
2086              ]
2087            },
2088            {
2089              "type": "REPEAT",
2090              "content": {
2091                "type": "SEQ",
2092                "members": [
2093                  {
2094                    "type": "STRING",
2095                    "value": ","
2096                  },
2097                  {
2098                    "type": "SEQ",
2099                    "members": [
2100                      {
2101                        "type": "SEQ",
2102                        "members": [
2103                          {
2104                            "type": "SEQ",
2105                            "members": [
2106                              {
2107                                "type": "CHOICE",
2108                                "members": [
2109                                  {
2110                                    "type": "STRING",
2111                                    "value": "$"
2112                                  },
2113                                  {
2114                                    "type": "BLANK"
2115                                  }
2116                                ]
2117                              },
2118                              {
2119                                "type": "SYMBOL",
2120                                "name": "identifier"
2121                              }
2122                            ]
2123                          },
2124                          {
2125                            "type": "REPEAT",
2126                            "content": {
2127                              "type": "SEQ",
2128                              "members": [
2129                                {
2130                                  "type": "STRING",
2131                                  "value": ","
2132                                },
2133                                {
2134                                  "type": "SEQ",
2135                                  "members": [
2136                                    {
2137                                      "type": "CHOICE",
2138                                      "members": [
2139                                        {
2140                                          "type": "STRING",
2141                                          "value": "$"
2142                                        },
2143                                        {
2144                                          "type": "BLANK"
2145                                        }
2146                                      ]
2147                                    },
2148                                    {
2149                                      "type": "SYMBOL",
2150                                      "name": "identifier"
2151                                    }
2152                                  ]
2153                                }
2154                              ]
2155                            }
2156                          }
2157                        ]
2158                      },
2159                      {
2160                        "type": "STRING",
2161                        "value": ":"
2162                      },
2163                      {
2164                        "type": "SYMBOL",
2165                        "name": "type"
2166                      }
2167                    ]
2168                  }
2169                ]
2170              }
2171            }
2172          ]
2173        },
2174        {
2175          "type": "STRING",
2176          "value": ")"
2177        }
2178      ]
2179    },
2180    "field": {
2181      "type": "PREC_RIGHT",
2182      "value": 0,
2183      "content": {
2184        "type": "SEQ",
2185        "members": [
2186          {
2187            "type": "SEQ",
2188            "members": [
2189              {
2190                "type": "SEQ",
2191                "members": [
2192                  {
2193                    "type": "CHOICE",
2194                    "members": [
2195                      {
2196                        "type": "SYMBOL",
2197                        "name": "tag"
2198                      },
2199                      {
2200                        "type": "BLANK"
2201                      }
2202                    ]
2203                  },
2204                  {
2205                    "type": "CHOICE",
2206                    "members": [
2207                      {
2208                        "type": "STRING",
2209                        "value": "using"
2210                      },
2211                      {
2212                        "type": "BLANK"
2213                      }
2214                    ]
2215                  },
2216                  {
2217                    "type": "SYMBOL",
2218                    "name": "identifier"
2219                  }
2220                ]
2221              },
2222              {
2223                "type": "REPEAT",
2224                "content": {
2225                  "type": "SEQ",
2226                  "members": [
2227                    {
2228                      "type": "STRING",
2229                      "value": ","
2230                    },
2231                    {
2232                      "type": "SEQ",
2233                      "members": [
2234                        {
2235                          "type": "CHOICE",
2236                          "members": [
2237                            {
2238                              "type": "SYMBOL",
2239                              "name": "tag"
2240                            },
2241                            {
2242                              "type": "BLANK"
2243                            }
2244                          ]
2245                        },
2246                        {
2247                          "type": "CHOICE",
2248                          "members": [
2249                            {
2250                              "type": "STRING",
2251                              "value": "using"
2252                            },
2253                            {
2254                              "type": "BLANK"
2255                            }
2256                          ]
2257                        },
2258                        {
2259                          "type": "SYMBOL",
2260                          "name": "identifier"
2261                        }
2262                      ]
2263                    }
2264                  ]
2265                }
2266              }
2267            ]
2268          },
2269          {
2270            "type": "STRING",
2271            "value": ":"
2272          },
2273          {
2274            "type": "CHOICE",
2275            "members": [
2276              {
2277                "type": "SYMBOL",
2278                "name": "tag"
2279              },
2280              {
2281                "type": "BLANK"
2282              }
2283            ]
2284          },
2285          {
2286            "type": "SYMBOL",
2287            "name": "type"
2288          },
2289          {
2290            "type": "CHOICE",
2291            "members": [
2292              {
2293                "type": "SYMBOL",
2294                "name": "string"
2295              },
2296              {
2297                "type": "BLANK"
2298              }
2299            ]
2300          }
2301        ]
2302      }
2303    },
2304    "statement": {
2305      "type": "PREC",
2306      "value": 1,
2307      "content": {
2308        "type": "CHOICE",
2309        "members": [
2310          {
2311            "type": "SYMBOL",
2312            "name": "procedure_declaration"
2313          },
2314          {
2315            "type": "SYMBOL",
2316            "name": "overloaded_procedure_declaration"
2317          },
2318          {
2319            "type": "SYMBOL",
2320            "name": "struct_declaration"
2321          },
2322          {
2323            "type": "SYMBOL",
2324            "name": "enum_declaration"
2325          },
2326          {
2327            "type": "SYMBOL",
2328            "name": "union_declaration"
2329          },
2330          {
2331            "type": "SYMBOL",
2332            "name": "bit_field_declaration"
2333          },
2334          {
2335            "type": "SYMBOL",
2336            "name": "const_declaration"
2337          },
2338          {
2339            "type": "SYMBOL",
2340            "name": "import_declaration"
2341          },
2342          {
2343            "type": "SYMBOL",
2344            "name": "assignment_statement"
2345          },
2346          {
2347            "type": "SYMBOL",
2348            "name": "update_statement"
2349          },
2350          {
2351            "type": "SYMBOL",
2352            "name": "if_statement"
2353          },
2354          {
2355            "type": "SYMBOL",
2356            "name": "when_statement"
2357          },
2358          {
2359            "type": "SYMBOL",
2360            "name": "for_statement"
2361          },
2362          {
2363            "type": "SYMBOL",
2364            "name": "switch_statement"
2365          },
2366          {
2367            "type": "SYMBOL",
2368            "name": "defer_statement"
2369          },
2370          {
2371            "type": "SYMBOL",
2372            "name": "break_statement"
2373          },
2374          {
2375            "type": "SYMBOL",
2376            "name": "continue_statement"
2377          },
2378          {
2379            "type": "SYMBOL",
2380            "name": "fallthrough_statement"
2381          },
2382          {
2383            "type": "SYMBOL",
2384            "name": "label_statement"
2385          },
2386          {
2387            "type": "SYMBOL",
2388            "name": "using_statement"
2389          },
2390          {
2391            "type": "SYMBOL",
2392            "name": "return_statement"
2393          },
2394          {
2395            "type": "SYMBOL",
2396            "name": "_expression_no_tag"
2397          },
2398          {
2399            "type": "SYMBOL",
2400            "name": "var_declaration"
2401          },
2402          {
2403            "type": "SYMBOL",
2404            "name": "foreign_block"
2405          },
2406          {
2407            "type": "SYMBOL",
2408            "name": "tagged_block"
2409          },
2410          {
2411            "type": "SYMBOL",
2412            "name": "block"
2413          }
2414        ]
2415      }
2416    },
2417    "assignment_statement": {
2418      "type": "PREC",
2419      "value": 1,
2420      "content": {
2421        "type": "SEQ",
2422        "members": [
2423          {
2424            "type": "CHOICE",
2425            "members": [
2426              {
2427                "type": "SEQ",
2428                "members": [
2429                  {
2430                    "type": "SYMBOL",
2431                    "name": "attributes"
2432                  },
2433                  {
2434                    "type": "CHOICE",
2435                    "members": [
2436                      {
2437                        "type": "SYMBOL",
2438                        "name": "tag"
2439                      },
2440                      {
2441                        "type": "BLANK"
2442                      }
2443                    ]
2444                  }
2445                ]
2446              },
2447              {
2448                "type": "BLANK"
2449              }
2450            ]
2451          },
2452          {
2453            "type": "SEQ",
2454            "members": [
2455              {
2456                "type": "SYMBOL",
2457                "name": "expression"
2458              },
2459              {
2460                "type": "REPEAT",
2461                "content": {
2462                  "type": "SEQ",
2463                  "members": [
2464                    {
2465                      "type": "STRING",
2466                      "value": ","
2467                    },
2468                    {
2469                      "type": "SYMBOL",
2470                      "name": "expression"
2471                    }
2472                  ]
2473                }
2474              }
2475            ]
2476          },
2477          {
2478            "type": "CHOICE",
2479            "members": [
2480              {
2481                "type": "STRING",
2482                "value": "="
2483              },
2484              {
2485                "type": "STRING",
2486                "value": ":="
2487              }
2488            ]
2489          },
2490          {
2491            "type": "CHOICE",
2492            "members": [
2493              {
2494                "type": "SYMBOL",
2495                "name": "tag"
2496              },
2497              {
2498                "type": "BLANK"
2499              }
2500            ]
2501          },
2502          {
2503            "type": "SEQ",
2504            "members": [
2505              {
2506                "type": "CHOICE",
2507                "members": [
2508                  {
2509                    "type": "SYMBOL",
2510                    "name": "expression"
2511                  },
2512                  {
2513                    "type": "SYMBOL",
2514                    "name": "procedure"
2515                  }
2516                ]
2517              },
2518              {
2519                "type": "REPEAT",
2520                "content": {
2521                  "type": "SEQ",
2522                  "members": [
2523                    {
2524                      "type": "STRING",
2525                      "value": ","
2526                    },
2527                    {
2528                      "type": "CHOICE",
2529                      "members": [
2530                        {
2531                          "type": "SYMBOL",
2532                          "name": "expression"
2533                        },
2534                        {
2535                          "type": "SYMBOL",
2536                          "name": "procedure"
2537                        }
2538                      ]
2539                    }
2540                  ]
2541                }
2542              }
2543            ]
2544          }
2545        ]
2546      }
2547    },
2548    "update_statement": {
2549      "type": "SEQ",
2550      "members": [
2551        {
2552          "type": "SEQ",
2553          "members": [
2554            {
2555              "type": "SYMBOL",
2556              "name": "expression"
2557            },
2558            {
2559              "type": "REPEAT",
2560              "content": {
2561                "type": "SEQ",
2562                "members": [
2563                  {
2564                    "type": "STRING",
2565                    "value": ","
2566                  },
2567                  {
2568                    "type": "SYMBOL",
2569                    "name": "expression"
2570                  }
2571                ]
2572              }
2573            }
2574          ]
2575        },
2576        {
2577          "type": "CHOICE",
2578          "members": [
2579            {
2580              "type": "STRING",
2581              "value": "+="
2582            },
2583            {
2584              "type": "STRING",
2585              "value": "-="
2586            },
2587            {
2588              "type": "STRING",
2589              "value": "*="
2590            },
2591            {
2592              "type": "STRING",
2593              "value": "/="
2594            },
2595            {
2596              "type": "STRING",
2597              "value": "%="
2598            },
2599            {
2600              "type": "STRING",
2601              "value": "&="
2602            },
2603            {
2604              "type": "STRING",
2605              "value": "|="
2606            },
2607            {
2608              "type": "STRING",
2609              "value": "^="
2610            },
2611            {
2612              "type": "STRING",
2613              "value": "<<="
2614            },
2615            {
2616              "type": "STRING",
2617              "value": ">>="
2618            },
2619            {
2620              "type": "STRING",
2621              "value": "||="
2622            },
2623            {
2624              "type": "STRING",
2625              "value": "&&="
2626            },
2627            {
2628              "type": "STRING",
2629              "value": "&~="
2630            }
2631          ]
2632        },
2633        {
2634          "type": "SEQ",
2635          "members": [
2636            {
2637              "type": "SYMBOL",
2638              "name": "expression"
2639            },
2640            {
2641              "type": "REPEAT",
2642              "content": {
2643                "type": "SEQ",
2644                "members": [
2645                  {
2646                    "type": "STRING",
2647                    "value": ","
2648                  },
2649                  {
2650                    "type": "SYMBOL",
2651                    "name": "expression"
2652                  }
2653                ]
2654              }
2655            }
2656          ]
2657        }
2658      ]
2659    },
2660    "if_statement": {
2661      "type": "PREC_RIGHT",
2662      "value": 0,
2663      "content": {
2664        "type": "SEQ",
2665        "members": [
2666          {
2667            "type": "STRING",
2668            "value": "if"
2669          },
2670          {
2671            "type": "CHOICE",
2672            "members": [
2673              {
2674                "type": "SEQ",
2675                "members": [
2676                  {
2677                    "type": "CHOICE",
2678                    "members": [
2679                      {
2680                        "type": "FIELD",
2681                        "name": "initializer",
2682                        "content": {
2683                          "type": "CHOICE",
2684                          "members": [
2685                            {
2686                              "type": "SYMBOL",
2687                              "name": "assignment_statement"
2688                            },
2689                            {
2690                              "type": "SYMBOL",
2691                              "name": "update_statement"
2692                            },
2693                            {
2694                              "type": "SYMBOL",
2695                              "name": "var_declaration"
2696                            }
2697                          ]
2698                        }
2699                      },
2700                      {
2701                        "type": "BLANK"
2702                      }
2703                    ]
2704                  },
2705                  {
2706                    "type": "STRING",
2707                    "value": ";"
2708                  }
2709                ]
2710              },
2711              {
2712                "type": "BLANK"
2713              }
2714            ]
2715          },
2716          {
2717            "type": "CHOICE",
2718            "members": [
2719              {
2720                "type": "SYMBOL",
2721                "name": "tag"
2722              },
2723              {
2724                "type": "BLANK"
2725              }
2726            ]
2727          },
2728          {
2729            "type": "FIELD",
2730            "name": "condition",
2731            "content": {
2732              "type": "SYMBOL",
2733              "name": "expression"
2734            }
2735          },
2736          {
2737            "type": "CHOICE",
2738            "members": [
2739              {
2740                "type": "FIELD",
2741                "name": "consequence",
2742                "content": {
2743                  "type": "SYMBOL",
2744                  "name": "block"
2745                }
2746              },
2747              {
2748                "type": "SEQ",
2749                "members": [
2750                  {
2751                    "type": "STRING",
2752                    "value": "do"
2753                  },
2754                  {
2755                    "type": "FIELD",
2756                    "name": "consequence",
2757                    "content": {
2758                      "type": "SYMBOL",
2759                      "name": "statement"
2760                    }
2761                  }
2762                ]
2763              }
2764            ]
2765          },
2766          {
2767            "type": "REPEAT",
2768            "content": {
2769              "type": "SYMBOL",
2770              "name": "else_if_clause"
2771            }
2772          },
2773          {
2774            "type": "CHOICE",
2775            "members": [
2776              {
2777                "type": "SYMBOL",
2778                "name": "else_clause"
2779              },
2780              {
2781                "type": "BLANK"
2782              }
2783            ]
2784          }
2785        ]
2786      }
2787    },
2788    "else_if_clause": {
2789      "type": "SEQ",
2790      "members": [
2791        {
2792          "type": "STRING",
2793          "value": "else"
2794        },
2795        {
2796          "type": "STRING",
2797          "value": "if"
2798        },
2799        {
2800          "type": "CHOICE",
2801          "members": [
2802            {
2803              "type": "SEQ",
2804              "members": [
2805                {
2806                  "type": "CHOICE",
2807                  "members": [
2808                    {
2809                      "type": "FIELD",
2810                      "name": "initializer",
2811                      "content": {
2812                        "type": "SYMBOL",
2813                        "name": "assignment_statement"
2814                      }
2815                    },
2816                    {
2817                      "type": "BLANK"
2818                    }
2819                  ]
2820                },
2821                {
2822                  "type": "STRING",
2823                  "value": ";"
2824                }
2825              ]
2826            },
2827            {
2828              "type": "BLANK"
2829            }
2830          ]
2831        },
2832        {
2833          "type": "FIELD",
2834          "name": "condition",
2835          "content": {
2836            "type": "SYMBOL",
2837            "name": "expression"
2838          }
2839        },
2840        {
2841          "type": "CHOICE",
2842          "members": [
2843            {
2844              "type": "FIELD",
2845              "name": "consequence",
2846              "content": {
2847                "type": "SYMBOL",
2848                "name": "block"
2849              }
2850            },
2851            {
2852              "type": "SEQ",
2853              "members": [
2854                {
2855                  "type": "STRING",
2856                  "value": "do"
2857                },
2858                {
2859                  "type": "FIELD",
2860                  "name": "consequence",
2861                  "content": {
2862                    "type": "SYMBOL",
2863                    "name": "statement"
2864                  }
2865                }
2866              ]
2867            }
2868          ]
2869        }
2870      ]
2871    },
2872    "else_clause": {
2873      "type": "SEQ",
2874      "members": [
2875        {
2876          "type": "STRING",
2877          "value": "else"
2878        },
2879        {
2880          "type": "CHOICE",
2881          "members": [
2882            {
2883              "type": "FIELD",
2884              "name": "consequence",
2885              "content": {
2886                "type": "SYMBOL",
2887                "name": "block"
2888              }
2889            },
2890            {
2891              "type": "SEQ",
2892              "members": [
2893                {
2894                  "type": "STRING",
2895                  "value": "do"
2896                },
2897                {
2898                  "type": "FIELD",
2899                  "name": "consequence",
2900                  "content": {
2901                    "type": "SYMBOL",
2902                    "name": "statement"
2903                  }
2904                }
2905              ]
2906            }
2907          ]
2908        }
2909      ]
2910    },
2911    "when_statement": {
2912      "type": "PREC_RIGHT",
2913      "value": 0,
2914      "content": {
2915        "type": "SEQ",
2916        "members": [
2917          {
2918            "type": "STRING",
2919            "value": "when"
2920          },
2921          {
2922            "type": "SYMBOL",
2923            "name": "expression"
2924          },
2925          {
2926            "type": "CHOICE",
2927            "members": [
2928              {
2929                "type": "SYMBOL",
2930                "name": "block"
2931              },
2932              {
2933                "type": "SEQ",
2934                "members": [
2935                  {
2936                    "type": "STRING",
2937                    "value": "do"
2938                  },
2939                  {
2940                    "type": "SYMBOL",
2941                    "name": "statement"
2942                  }
2943                ]
2944              }
2945            ]
2946          },
2947          {
2948            "type": "REPEAT",
2949            "content": {
2950              "type": "SYMBOL",
2951              "name": "else_when_clause"
2952            }
2953          },
2954          {
2955            "type": "CHOICE",
2956            "members": [
2957              {
2958                "type": "SYMBOL",
2959                "name": "else_clause"
2960              },
2961              {
2962                "type": "BLANK"
2963              }
2964            ]
2965          }
2966        ]
2967      }
2968    },
2969    "else_when_clause": {
2970      "type": "SEQ",
2971      "members": [
2972        {
2973          "type": "STRING",
2974          "value": "else"
2975        },
2976        {
2977          "type": "STRING",
2978          "value": "when"
2979        },
2980        {
2981          "type": "SYMBOL",
2982          "name": "expression"
2983        },
2984        {
2985          "type": "SYMBOL",
2986          "name": "block"
2987        }
2988      ]
2989    },
2990    "for_statement": {
2991      "type": "SEQ",
2992      "members": [
2993        {
2994          "type": "STRING",
2995          "value": "for"
2996        },
2997        {
2998          "type": "CHOICE",
2999          "members": [
3000            {
3001              "type": "CHOICE",
3002              "members": [
3003                {
3004                  "type": "SEQ",
3005                  "members": [
3006                    {
3007                      "type": "CHOICE",
3008                      "members": [
3009                        {
3010                          "type": "SEQ",
3011                          "members": [
3012                            {
3013                              "type": "CHOICE",
3014                              "members": [
3015                                {
3016                                  "type": "FIELD",
3017                                  "name": "initializer",
3018                                  "content": {
3019                                    "type": "CHOICE",
3020                                    "members": [
3021                                      {
3022                                        "type": "SYMBOL",
3023                                        "name": "assignment_statement"
3024                                      },
3025                                      {
3026                                        "type": "SYMBOL",
3027                                        "name": "update_statement"
3028                                      },
3029                                      {
3030                                        "type": "SYMBOL",
3031                                        "name": "var_declaration"
3032                                      }
3033                                    ]
3034                                  }
3035                                },
3036                                {
3037                                  "type": "BLANK"
3038                                }
3039                              ]
3040                            },
3041                            {
3042                              "type": "STRING",
3043                              "value": ";"
3044                            }
3045                          ]
3046                        },
3047                        {
3048                          "type": "BLANK"
3049                        }
3050                      ]
3051                    },
3052                    {
3053                      "type": "CHOICE",
3054                      "members": [
3055                        {
3056                          "type": "FIELD",
3057                          "name": "condition",
3058                          "content": {
3059                            "type": "SYMBOL",
3060                            "name": "expression"
3061                          }
3062                        },
3063                        {
3064                          "type": "BLANK"
3065                        }
3066                      ]
3067                    },
3068                    {
3069                      "type": "CHOICE",
3070                      "members": [
3071                        {
3072                          "type": "SEQ",
3073                          "members": [
3074                            {
3075                              "type": "STRING",
3076                              "value": ";"
3077                            },
3078                            {
3079                              "type": "CHOICE",
3080                              "members": [
3081                                {
3082                                  "type": "FIELD",
3083                                  "name": "post",
3084                                  "content": {
3085                                    "type": "CHOICE",
3086                                    "members": [
3087                                      {
3088                                        "type": "SYMBOL",
3089                                        "name": "update_statement"
3090                                      },
3091                                      {
3092                                        "type": "ALIAS",
3093                                        "content": {
3094                                          "type": "SYMBOL",
3095                                          "name": "_simple_assignment_statement"
3096                                        },
3097                                        "named": true,
3098                                        "value": "assignment_statement"
3099                                      }
3100                                    ]
3101                                  }
3102                                },
3103                                {
3104                                  "type": "BLANK"
3105                                }
3106                              ]
3107                            }
3108                          ]
3109                        },
3110                        {
3111                          "type": "BLANK"
3112                        }
3113                      ]
3114                    }
3115                  ]
3116                },
3117                {
3118                  "type": "SYMBOL",
3119                  "name": "_for_in_expression"
3120                }
3121              ]
3122            },
3123            {
3124              "type": "BLANK"
3125            }
3126          ]
3127        },
3128        {
3129          "type": "FIELD",
3130          "name": "consequence",
3131          "content": {
3132            "type": "CHOICE",
3133            "members": [
3134              {
3135                "type": "SYMBOL",
3136                "name": "block"
3137              },
3138              {
3139                "type": "SEQ",
3140                "members": [
3141                  {
3142                    "type": "STRING",
3143                    "value": "do"
3144                  },
3145                  {
3146                    "type": "SYMBOL",
3147                    "name": "statement"
3148                  }
3149                ]
3150              }
3151            ]
3152          }
3153        }
3154      ]
3155    },
3156    "_for_in_expression": {
3157      "type": "SEQ",
3158      "members": [
3159        {
3160          "type": "CHOICE",
3161          "members": [
3162            {
3163              "type": "SEQ",
3164              "members": [
3165                {
3166                  "type": "SYMBOL",
3167                  "name": "expression"
3168                },
3169                {
3170                  "type": "REPEAT",
3171                  "content": {
3172                    "type": "SEQ",
3173                    "members": [
3174                      {
3175                        "type": "STRING",
3176                        "value": ","
3177                      },
3178                      {
3179                        "type": "SYMBOL",
3180                        "name": "expression"
3181                      }
3182                    ]
3183                  }
3184                }
3185              ]
3186            },
3187            {
3188              "type": "BLANK"
3189            }
3190          ]
3191        },
3192        {
3193          "type": "STRING",
3194          "value": "in"
3195        },
3196        {
3197          "type": "SYMBOL",
3198          "name": "expression"
3199        }
3200      ]
3201    },
3202    "_simple_assignment_statement": {
3203      "type": "SEQ",
3204      "members": [
3205        {
3206          "type": "CHOICE",
3207          "members": [
3208            {
3209              "type": "SYMBOL",
3210              "name": "attributes"
3211            },
3212            {
3213              "type": "BLANK"
3214            }
3215          ]
3216        },
3217        {
3218          "type": "SEQ",
3219          "members": [
3220            {
3221              "type": "SYMBOL",
3222              "name": "expression"
3223            },
3224            {
3225              "type": "REPEAT",
3226              "content": {
3227                "type": "SEQ",
3228                "members": [
3229                  {
3230                    "type": "STRING",
3231                    "value": ","
3232                  },
3233                  {
3234                    "type": "SYMBOL",
3235                    "name": "expression"
3236                  }
3237                ]
3238              }
3239            }
3240          ]
3241        },
3242        {
3243          "type": "CHOICE",
3244          "members": [
3245            {
3246              "type": "STRING",
3247              "value": "="
3248            },
3249            {
3250              "type": "STRING",
3251              "value": ":="
3252            }
3253          ]
3254        },
3255        {
3256          "type": "SEQ",
3257          "members": [
3258            {
3259              "type": "CHOICE",
3260              "members": [
3261                {
3262                  "type": "SYMBOL",
3263                  "name": "expression"
3264                }
3265              ]
3266            },
3267            {
3268              "type": "REPEAT",
3269              "content": {
3270                "type": "SEQ",
3271                "members": [
3272                  {
3273                    "type": "STRING",
3274                    "value": ","
3275                  },
3276                  {
3277                    "type": "CHOICE",
3278                    "members": [
3279                      {
3280                        "type": "SYMBOL",
3281                        "name": "expression"
3282                      }
3283                    ]
3284                  }
3285                ]
3286              }
3287            }
3288          ]
3289        }
3290      ]
3291    },
3292    "switch_statement": {
3293      "type": "SEQ",
3294      "members": [
3295        {
3296          "type": "STRING",
3297          "value": "switch"
3298        },
3299        {
3300          "type": "CHOICE",
3301          "members": [
3302            {
3303              "type": "SEQ",
3304              "members": [
3305                {
3306                  "type": "CHOICE",
3307                  "members": [
3308                    {
3309                      "type": "STRING",
3310                      "value": "in"
3311                    },
3312                    {
3313                      "type": "BLANK"
3314                    }
3315                  ]
3316                },
3317                {
3318                  "type": "FIELD",
3319                  "name": "condition",
3320                  "content": {
3321                    "type": "CHOICE",
3322                    "members": [
3323                      {
3324                        "type": "SYMBOL",
3325                        "name": "expression"
3326                      },
3327                      {
3328                        "type": "SEQ",
3329                        "members": [
3330                          {
3331                            "type": "SYMBOL",
3332                            "name": "assignment_statement"
3333                          },
3334                          {
3335                            "type": "SYMBOL",
3336                            "name": "_separator"
3337                          },
3338                          {
3339                            "type": "CHOICE",
3340                            "members": [
3341                              {
3342                                "type": "SYMBOL",
3343                                "name": "expression"
3344                              },
3345                              {
3346                                "type": "BLANK"
3347                              }
3348                            ]
3349                          }
3350                        ]
3351                      }
3352                    ]
3353                  }
3354                }
3355              ]
3356            },
3357            {
3358              "type": "BLANK"
3359            }
3360          ]
3361        },
3362        {
3363          "type": "STRING",
3364          "value": "{"
3365        },
3366        {
3367          "type": "REPEAT",
3368          "content": {
3369            "type": "SYMBOL",
3370            "name": "switch_case"
3371          }
3372        },
3373        {
3374          "type": "STRING",
3375          "value": "}"
3376        }
3377      ]
3378    },
3379    "switch_case": {
3380      "type": "SEQ",
3381      "members": [
3382        {
3383          "type": "STRING",
3384          "value": "case"
3385        },
3386        {
3387          "type": "CHOICE",
3388          "members": [
3389            {
3390              "type": "SEQ",
3391              "members": [
3392                {
3393                  "type": "FIELD",
3394                  "name": "condition",
3395                  "content": {
3396                    "type": "CHOICE",
3397                    "members": [
3398                      {
3399                        "type": "SYMBOL",
3400                        "name": "expression"
3401                      },
3402                      {
3403                        "type": "SYMBOL",
3404                        "name": "array_type"
3405                      },
3406                      {
3407                        "type": "SYMBOL",
3408                        "name": "pointer_type"
3409                      }
3410                    ]
3411                  }
3412                },
3413                {
3414                  "type": "REPEAT",
3415                  "content": {
3416                    "type": "SEQ",
3417                    "members": [
3418                      {
3419                        "type": "STRING",
3420                        "value": ","
3421                      },
3422                      {
3423                        "type": "FIELD",
3424                        "name": "condition",
3425                        "content": {
3426                          "type": "CHOICE",
3427                          "members": [
3428                            {
3429                              "type": "SYMBOL",
3430                              "name": "expression"
3431                            },
3432                            {
3433                              "type": "SYMBOL",
3434                              "name": "array_type"
3435                            },
3436                            {
3437                              "type": "SYMBOL",
3438                              "name": "pointer_type"
3439                            }
3440                          ]
3441                        }
3442                      }
3443                    ]
3444                  }
3445                }
3446              ]
3447            },
3448            {
3449              "type": "BLANK"
3450            }
3451          ]
3452        },
3453        {
3454          "type": "STRING",
3455          "value": ":"
3456        },
3457        {
3458          "type": "CHOICE",
3459          "members": [
3460            {
3461              "type": "SEQ",
3462              "members": [
3463                {
3464                  "type": "SEQ",
3465                  "members": [
3466                    {
3467                      "type": "CHOICE",
3468                      "members": [
3469                        {
3470                          "type": "SYMBOL",
3471                          "name": "tag"
3472                        },
3473                        {
3474                          "type": "BLANK"
3475                        }
3476                      ]
3477                    },
3478                    {
3479                      "type": "SYMBOL",
3480                      "name": "statement"
3481                    }
3482                  ]
3483                },
3484                {
3485                  "type": "REPEAT",
3486                  "content": {
3487                    "type": "SEQ",
3488                    "members": [
3489                      {
3490                        "type": "SYMBOL",
3491                        "name": "_separator"
3492                      },
3493                      {
3494                        "type": "CHOICE",
3495                        "members": [
3496                          {
3497                            "type": "SEQ",
3498                            "members": [
3499                              {
3500                                "type": "CHOICE",
3501                                "members": [
3502                                  {
3503                                    "type": "SYMBOL",
3504                                    "name": "tag"
3505                                  },
3506                                  {
3507                                    "type": "BLANK"
3508                                  }
3509                                ]
3510                              },
3511                              {
3512                                "type": "SYMBOL",
3513                                "name": "statement"
3514                              }
3515                            ]
3516                          },
3517                          {
3518                            "type": "BLANK"
3519                          }
3520                        ]
3521                      }
3522                    ]
3523                  }
3524                }
3525              ]
3526            },
3527            {
3528              "type": "BLANK"
3529            }
3530          ]
3531        }
3532      ]
3533    },
3534    "defer_statement": {
3535      "type": "SEQ",
3536      "members": [
3537        {
3538          "type": "STRING",
3539          "value": "defer"
3540        },
3541        {
3542          "type": "SYMBOL",
3543          "name": "statement"
3544        }
3545      ]
3546    },
3547    "break_statement": {
3548      "type": "SEQ",
3549      "members": [
3550        {
3551          "type": "STRING",
3552          "value": "break"
3553        },
3554        {
3555          "type": "CHOICE",
3556          "members": [
3557            {
3558              "type": "SYMBOL",
3559              "name": "identifier"
3560            },
3561            {
3562              "type": "BLANK"
3563            }
3564          ]
3565        }
3566      ]
3567    },
3568    "continue_statement": {
3569      "type": "SEQ",
3570      "members": [
3571        {
3572          "type": "STRING",
3573          "value": "continue"
3574        },
3575        {
3576          "type": "CHOICE",
3577          "members": [
3578            {
3579              "type": "SYMBOL",
3580              "name": "identifier"
3581            },
3582            {
3583              "type": "BLANK"
3584            }
3585          ]
3586        }
3587      ]
3588    },
3589    "fallthrough_statement": {
3590      "type": "STRING",
3591      "value": "fallthrough"
3592    },
3593    "var_declaration": {
3594      "type": "PREC_RIGHT",
3595      "value": 0,
3596      "content": {
3597        "type": "SEQ",
3598        "members": [
3599          {
3600            "type": "CHOICE",
3601            "members": [
3602              {
3603                "type": "SYMBOL",
3604                "name": "attributes"
3605              },
3606              {
3607                "type": "BLANK"
3608              }
3609            ]
3610          },
3611          {
3612            "type": "SEQ",
3613            "members": [
3614              {
3615                "type": "SYMBOL",
3616                "name": "expression"
3617              },
3618              {
3619                "type": "REPEAT",
3620                "content": {
3621                  "type": "SEQ",
3622                  "members": [
3623                    {
3624                      "type": "STRING",
3625                      "value": ","
3626                    },
3627                    {
3628                      "type": "SYMBOL",
3629                      "name": "expression"
3630                    }
3631                  ]
3632                }
3633              }
3634            ]
3635          },
3636          {
3637            "type": "STRING",
3638            "value": ":"
3639          },
3640          {
3641            "type": "CHOICE",
3642            "members": [
3643              {
3644                "type": "SYMBOL",
3645                "name": "tag"
3646              },
3647              {
3648                "type": "BLANK"
3649              }
3650            ]
3651          },
3652          {
3653            "type": "CHOICE",
3654            "members": [
3655              {
3656                "type": "SEQ",
3657                "members": [
3658                  {
3659                    "type": "SYMBOL",
3660                    "name": "type"
3661                  },
3662                  {
3663                    "type": "CHOICE",
3664                    "members": [
3665                      {
3666                        "type": "SEQ",
3667                        "members": [
3668                          {
3669                            "type": "CHOICE",
3670                            "members": [
3671                              {
3672                                "type": "STRING",
3673                                "value": "="
3674                              },
3675                              {
3676                                "type": "STRING",
3677                                "value": ":"
3678                              }
3679                            ]
3680                          },
3681                          {
3682                            "type": "SEQ",
3683                            "members": [
3684                              {
3685                                "type": "SYMBOL",
3686                                "name": "expression"
3687                              },
3688                              {
3689                                "type": "REPEAT",
3690                                "content": {
3691                                  "type": "SEQ",
3692                                  "members": [
3693                                    {
3694                                      "type": "STRING",
3695                                      "value": ","
3696                                    },
3697                                    {
3698                                      "type": "SYMBOL",
3699                                      "name": "expression"
3700                                    }
3701                                  ]
3702                                }
3703                              }
3704                            ]
3705                          }
3706                        ]
3707                      },
3708                      {
3709                        "type": "BLANK"
3710                      }
3711                    ]
3712                  }
3713                ]
3714              }
3715            ]
3716          }
3717        ]
3718      }
3719    },
3720    "return_statement": {
3721      "type": "PREC_RIGHT",
3722      "value": 1,
3723      "content": {
3724        "type": "SEQ",
3725        "members": [
3726          {
3727            "type": "STRING",
3728            "value": "return"
3729          },
3730          {
3731            "type": "CHOICE",
3732            "members": [
3733              {
3734                "type": "SYMBOL",
3735                "name": "tag"
3736              },
3737              {
3738                "type": "BLANK"
3739              }
3740            ]
3741          },
3742          {
3743            "type": "CHOICE",
3744            "members": [
3745              {
3746                "type": "SEQ",
3747                "members": [
3748                  {
3749                    "type": "SEQ",
3750                    "members": [
3751                      {
3752                        "type": "CHOICE",
3753                        "members": [
3754                          {
3755                            "type": "SYMBOL",
3756                            "name": "expression"
3757                          },
3758                          {
3759                            "type": "SYMBOL",
3760                            "name": "_procedure_type"
3761                          }
3762                        ]
3763                      },
3764                      {
3765                        "type": "REPEAT",
3766                        "content": {
3767                          "type": "SEQ",
3768                          "members": [
3769                            {
3770                              "type": "CHOICE",
3771                              "members": [
3772                                {
3773                                  "type": "STRING",
3774                                  "value": ","
3775                                },
3776                                {
3777                                  "type": "ALIAS",
3778                                  "content": {
3779                                    "type": "SYMBOL",
3780                                    "name": "_nl_comma"
3781                                  },
3782                                  "named": false,
3783                                  "value": ","
3784                                }
3785                              ]
3786                            },
3787                            {
3788                              "type": "CHOICE",
3789                              "members": [
3790                                {
3791                                  "type": "SYMBOL",
3792                                  "name": "expression"
3793                                },
3794                                {
3795                                  "type": "SYMBOL",
3796                                  "name": "_procedure_type"
3797                                }
3798                              ]
3799                            }
3800                          ]
3801                        }
3802                      }
3803                    ]
3804                  },
3805                  {
3806                    "type": "CHOICE",
3807                    "members": [
3808                      {
3809                        "type": "STRING",
3810                        "value": ","
3811                      },
3812                      {
3813                        "type": "BLANK"
3814                      }
3815                    ]
3816                  }
3817                ]
3818              },
3819              {
3820                "type": "BLANK"
3821              }
3822            ]
3823          }
3824        ]
3825      }
3826    },
3827    "label_statement": {
3828      "type": "SEQ",
3829      "members": [
3830        {
3831          "type": "SYMBOL",
3832          "name": "expression"
3833        },
3834        {
3835          "type": "STRING",
3836          "value": ":"
3837        },
3838        {
3839          "type": "CHOICE",
3840          "members": [
3841            {
3842              "type": "SYMBOL",
3843              "name": "if_statement"
3844            },
3845            {
3846              "type": "SYMBOL",
3847              "name": "for_statement"
3848            },
3849            {
3850              "type": "SYMBOL",
3851              "name": "switch_statement"
3852            },
3853            {
3854              "type": "SYMBOL",
3855              "name": "block"
3856            }
3857          ]
3858        }
3859      ]
3860    },
3861    "using_statement": {
3862      "type": "SEQ",
3863      "members": [
3864        {
3865          "type": "STRING",
3866          "value": "using"
3867        },
3868        {
3869          "type": "SYMBOL",
3870          "name": "expression"
3871        }
3872      ]
3873    },
3874    "expression": {
3875      "type": "PREC_LEFT",
3876      "value": 0,
3877      "content": {
3878        "type": "CHOICE",
3879        "members": [
3880          {
3881            "type": "SYMBOL",
3882            "name": "_expression_no_tag"
3883          },
3884          {
3885            "type": "SYMBOL",
3886            "name": "tag"
3887          }
3888        ]
3889      }
3890    },
3891    "_expression_no_tag": {
3892      "type": "CHOICE",
3893      "members": [
3894        {
3895          "type": "SYMBOL",
3896          "name": "unary_expression"
3897        },
3898        {
3899          "type": "SYMBOL",
3900          "name": "binary_expression"
3901        },
3902        {
3903          "type": "SYMBOL",
3904          "name": "ternary_expression"
3905        },
3906        {
3907          "type": "SYMBOL",
3908          "name": "call_expression"
3909        },
3910        {
3911          "type": "SYMBOL",
3912          "name": "selector_call_expression"
3913        },
3914        {
3915          "type": "SYMBOL",
3916          "name": "member_expression"
3917        },
3918        {
3919          "type": "SYMBOL",
3920          "name": "index_expression"
3921        },
3922        {
3923          "type": "SYMBOL",
3924          "name": "slice_expression"
3925        },
3926        {
3927          "type": "SYMBOL",
3928          "name": "range_expression"
3929        },
3930        {
3931          "type": "SYMBOL",
3932          "name": "cast_expression"
3933        },
3934        {
3935          "type": "SYMBOL",
3936          "name": "parenthesized_expression"
3937        },
3938        {
3939          "type": "SYMBOL",
3940          "name": "in_expression"
3941        },
3942        {
3943          "type": "SYMBOL",
3944          "name": "variadic_expression"
3945        },
3946        {
3947          "type": "SYMBOL",
3948          "name": "or_return_expression"
3949        },
3950        {
3951          "type": "SYMBOL",
3952          "name": "or_continue_expression"
3953        },
3954        {
3955          "type": "SYMBOL",
3956          "name": "or_break_expression"
3957        },
3958        {
3959          "type": "SYMBOL",
3960          "name": "identifier"
3961        },
3962        {
3963          "type": "SYMBOL",
3964          "name": "address"
3965        },
3966        {
3967          "type": "SYMBOL",
3968          "name": "map_type"
3969        },
3970        {
3971          "type": "SYMBOL",
3972          "name": "distinct_type"
3973        },
3974        {
3975          "type": "SYMBOL",
3976          "name": "matrix_type"
3977        },
3978        {
3979          "type": "SYMBOL",
3980          "name": "literal"
3981        },
3982        {
3983          "type": "STRING",
3984          "value": "?"
3985        }
3986      ]
3987    },
3988    "unary_expression": {
3989      "type": "PREC_RIGHT",
3990      "value": 16,
3991      "content": {
3992        "type": "SEQ",
3993        "members": [
3994          {
3995            "type": "FIELD",
3996            "name": "operator",
3997            "content": {
3998              "type": "CHOICE",
3999              "members": [
4000                {
4001                  "type": "STRING",
4002                  "value": "+"
4003                },
4004                {
4005                  "type": "STRING",
4006                  "value": "-"
4007                },
4008                {
4009                  "type": "STRING",
4010                  "value": "~"
4011                },
4012                {
4013                  "type": "STRING",
4014                  "value": "!"
4015                },
4016                {
4017                  "type": "STRING",
4018                  "value": "&"
4019                }
4020              ]
4021            }
4022          },
4023          {
4024            "type": "FIELD",
4025            "name": "argument",
4026            "content": {
4027              "type": "SYMBOL",
4028              "name": "expression"
4029            }
4030          }
4031        ]
4032      }
4033    },
4034    "binary_expression": {
4035      "type": "CHOICE",
4036      "members": [
4037        {
4038          "type": "PREC_LEFT",
4039          "value": 3,
4040          "content": {
4041            "type": "SEQ",
4042            "members": [
4043              {
4044                "type": "FIELD",
4045                "name": "left",
4046                "content": {
4047                  "type": "SYMBOL",
4048                  "name": "expression"
4049                }
4050              },
4051              {
4052                "type": "FIELD",
4053                "name": "operator",
4054                "content": {
4055                  "type": "STRING",
4056                  "value": "||"
4057                }
4058              },
4059              {
4060                "type": "FIELD",
4061                "name": "right",
4062                "content": {
4063                  "type": "SYMBOL",
4064                  "name": "expression"
4065                }
4066              }
4067            ]
4068          }
4069        },
4070        {
4071          "type": "PREC_LEFT",
4072          "value": 3,
4073          "content": {
4074            "type": "SEQ",
4075            "members": [
4076              {
4077                "type": "FIELD",
4078                "name": "left",
4079                "content": {
4080                  "type": "SYMBOL",
4081                  "name": "expression"
4082                }
4083              },
4084              {
4085                "type": "FIELD",
4086                "name": "operator",
4087                "content": {
4088                  "type": "STRING",
4089                  "value": "or_else"
4090                }
4091              },
4092              {
4093                "type": "FIELD",
4094                "name": "right",
4095                "content": {
4096                  "type": "SYMBOL",
4097                  "name": "expression"
4098                }
4099              }
4100            ]
4101          }
4102        },
4103        {
4104          "type": "PREC_LEFT",
4105          "value": 4,
4106          "content": {
4107            "type": "SEQ",
4108            "members": [
4109              {
4110                "type": "FIELD",
4111                "name": "left",
4112                "content": {
4113                  "type": "SYMBOL",
4114                  "name": "expression"
4115                }
4116              },
4117              {
4118                "type": "FIELD",
4119                "name": "operator",
4120                "content": {
4121                  "type": "STRING",
4122                  "value": "&&"
4123                }
4124              },
4125              {
4126                "type": "FIELD",
4127                "name": "right",
4128                "content": {
4129                  "type": "SYMBOL",
4130                  "name": "expression"
4131                }
4132              }
4133            ]
4134          }
4135        },
4136        {
4137          "type": "PREC_LEFT",
4138          "value": 5,
4139          "content": {
4140            "type": "SEQ",
4141            "members": [
4142              {
4143                "type": "FIELD",
4144                "name": "left",
4145                "content": {
4146                  "type": "SYMBOL",
4147                  "name": "expression"
4148                }
4149              },
4150              {
4151                "type": "FIELD",
4152                "name": "operator",
4153                "content": {
4154                  "type": "STRING",
4155                  "value": ">"
4156                }
4157              },
4158              {
4159                "type": "FIELD",
4160                "name": "right",
4161                "content": {
4162                  "type": "SYMBOL",
4163                  "name": "expression"
4164                }
4165              }
4166            ]
4167          }
4168        },
4169        {
4170          "type": "PREC_LEFT",
4171          "value": 5,
4172          "content": {
4173            "type": "SEQ",
4174            "members": [
4175              {
4176                "type": "FIELD",
4177                "name": "left",
4178                "content": {
4179                  "type": "SYMBOL",
4180                  "name": "expression"
4181                }
4182              },
4183              {
4184                "type": "FIELD",
4185                "name": "operator",
4186                "content": {
4187                  "type": "STRING",
4188                  "value": ">="
4189                }
4190              },
4191              {
4192                "type": "FIELD",
4193                "name": "right",
4194                "content": {
4195                  "type": "SYMBOL",
4196                  "name": "expression"
4197                }
4198              }
4199            ]
4200          }
4201        },
4202        {
4203          "type": "PREC_LEFT",
4204          "value": 5,
4205          "content": {
4206            "type": "SEQ",
4207            "members": [
4208              {
4209                "type": "FIELD",
4210                "name": "left",
4211                "content": {
4212                  "type": "SYMBOL",
4213                  "name": "expression"
4214                }
4215              },
4216              {
4217                "type": "FIELD",
4218                "name": "operator",
4219                "content": {
4220                  "type": "STRING",
4221                  "value": "<="
4222                }
4223              },
4224              {
4225                "type": "FIELD",
4226                "name": "right",
4227                "content": {
4228                  "type": "SYMBOL",
4229                  "name": "expression"
4230                }
4231              }
4232            ]
4233          }
4234        },
4235        {
4236          "type": "PREC_LEFT",
4237          "value": 5,
4238          "content": {
4239            "type": "SEQ",
4240            "members": [
4241              {
4242                "type": "FIELD",
4243                "name": "left",
4244                "content": {
4245                  "type": "SYMBOL",
4246                  "name": "expression"
4247                }
4248              },
4249              {
4250                "type": "FIELD",
4251                "name": "operator",
4252                "content": {
4253                  "type": "STRING",
4254                  "value": "<"
4255                }
4256              },
4257              {
4258                "type": "FIELD",
4259                "name": "right",
4260                "content": {
4261                  "type": "SYMBOL",
4262                  "name": "expression"
4263                }
4264              }
4265            ]
4266          }
4267        },
4268        {
4269          "type": "PREC_LEFT",
4270          "value": 6,
4271          "content": {
4272            "type": "SEQ",
4273            "members": [
4274              {
4275                "type": "FIELD",
4276                "name": "left",
4277                "content": {
4278                  "type": "SYMBOL",
4279                  "name": "expression"
4280                }
4281              },
4282              {
4283                "type": "FIELD",
4284                "name": "operator",
4285                "content": {
4286                  "type": "STRING",
4287                  "value": "=="
4288                }
4289              },
4290              {
4291                "type": "FIELD",
4292                "name": "right",
4293                "content": {
4294                  "type": "SYMBOL",
4295                  "name": "expression"
4296                }
4297              }
4298            ]
4299          }
4300        },
4301        {
4302          "type": "PREC_LEFT",
4303          "value": 6,
4304          "content": {
4305            "type": "SEQ",
4306            "members": [
4307              {
4308                "type": "FIELD",
4309                "name": "left",
4310                "content": {
4311                  "type": "SYMBOL",
4312                  "name": "expression"
4313                }
4314              },
4315              {
4316                "type": "FIELD",
4317                "name": "operator",
4318                "content": {
4319                  "type": "STRING",
4320                  "value": "!="
4321                }
4322              },
4323              {
4324                "type": "FIELD",
4325                "name": "right",
4326                "content": {
4327                  "type": "SYMBOL",
4328                  "name": "expression"
4329                }
4330              }
4331            ]
4332          }
4333        },
4334        {
4335          "type": "PREC_LEFT",
4336          "value": 6,
4337          "content": {
4338            "type": "SEQ",
4339            "members": [
4340              {
4341                "type": "FIELD",
4342                "name": "left",
4343                "content": {
4344                  "type": "SYMBOL",
4345                  "name": "expression"
4346                }
4347              },
4348              {
4349                "type": "FIELD",
4350                "name": "operator",
4351                "content": {
4352                  "type": "STRING",
4353                  "value": "~="
4354                }
4355              },
4356              {
4357                "type": "FIELD",
4358                "name": "right",
4359                "content": {
4360                  "type": "SYMBOL",
4361                  "name": "expression"
4362                }
4363              }
4364            ]
4365          }
4366        },
4367        {
4368          "type": "PREC_LEFT",
4369          "value": 7,
4370          "content": {
4371            "type": "SEQ",
4372            "members": [
4373              {
4374                "type": "FIELD",
4375                "name": "left",
4376                "content": {
4377                  "type": "SYMBOL",
4378                  "name": "expression"
4379                }
4380              },
4381              {
4382                "type": "FIELD",
4383                "name": "operator",
4384                "content": {
4385                  "type": "STRING",
4386                  "value": "|"
4387                }
4388              },
4389              {
4390                "type": "FIELD",
4391                "name": "right",
4392                "content": {
4393                  "type": "SYMBOL",
4394                  "name": "expression"
4395                }
4396              }
4397            ]
4398          }
4399        },
4400        {
4401          "type": "PREC_LEFT",
4402          "value": 8,
4403          "content": {
4404            "type": "SEQ",
4405            "members": [
4406              {
4407                "type": "FIELD",
4408                "name": "left",
4409                "content": {
4410                  "type": "SYMBOL",
4411                  "name": "expression"
4412                }
4413              },
4414              {
4415                "type": "FIELD",
4416                "name": "operator",
4417                "content": {
4418                  "type": "STRING",
4419                  "value": "~"
4420                }
4421              },
4422              {
4423                "type": "FIELD",
4424                "name": "right",
4425                "content": {
4426                  "type": "SYMBOL",
4427                  "name": "expression"
4428                }
4429              }
4430            ]
4431          }
4432        },
4433        {
4434          "type": "PREC_LEFT",
4435          "value": 9,
4436          "content": {
4437            "type": "SEQ",
4438            "members": [
4439              {
4440                "type": "FIELD",
4441                "name": "left",
4442                "content": {
4443                  "type": "SYMBOL",
4444                  "name": "expression"
4445                }
4446              },
4447              {
4448                "type": "FIELD",
4449                "name": "operator",
4450                "content": {
4451                  "type": "STRING",
4452                  "value": "&"
4453                }
4454              },
4455              {
4456                "type": "FIELD",
4457                "name": "right",
4458                "content": {
4459                  "type": "SYMBOL",
4460                  "name": "expression"
4461                }
4462              }
4463            ]
4464          }
4465        },
4466        {
4467          "type": "PREC_LEFT",
4468          "value": 10,
4469          "content": {
4470            "type": "SEQ",
4471            "members": [
4472              {
4473                "type": "FIELD",
4474                "name": "left",
4475                "content": {
4476                  "type": "SYMBOL",
4477                  "name": "expression"
4478                }
4479              },
4480              {
4481                "type": "FIELD",
4482                "name": "operator",
4483                "content": {
4484                  "type": "STRING",
4485                  "value": "&~"
4486                }
4487              },
4488              {
4489                "type": "FIELD",
4490                "name": "right",
4491                "content": {
4492                  "type": "SYMBOL",
4493                  "name": "expression"
4494                }
4495              }
4496            ]
4497          }
4498        },
4499        {
4500          "type": "PREC_LEFT",
4501          "value": 11,
4502          "content": {
4503            "type": "SEQ",
4504            "members": [
4505              {
4506                "type": "FIELD",
4507                "name": "left",
4508                "content": {
4509                  "type": "SYMBOL",
4510                  "name": "expression"
4511                }
4512              },
4513              {
4514                "type": "FIELD",
4515                "name": "operator",
4516                "content": {
4517                  "type": "STRING",
4518                  "value": "<<"
4519                }
4520              },
4521              {
4522                "type": "FIELD",
4523                "name": "right",
4524                "content": {
4525                  "type": "SYMBOL",
4526                  "name": "expression"
4527                }
4528              }
4529            ]
4530          }
4531        },
4532        {
4533          "type": "PREC_LEFT",
4534          "value": 11,
4535          "content": {
4536            "type": "SEQ",
4537            "members": [
4538              {
4539                "type": "FIELD",
4540                "name": "left",
4541                "content": {
4542                  "type": "SYMBOL",
4543                  "name": "expression"
4544                }
4545              },
4546              {
4547                "type": "FIELD",
4548                "name": "operator",
4549                "content": {
4550                  "type": "STRING",
4551                  "value": ">>"
4552                }
4553              },
4554              {
4555                "type": "FIELD",
4556                "name": "right",
4557                "content": {
4558                  "type": "SYMBOL",
4559                  "name": "expression"
4560                }
4561              }
4562            ]
4563          }
4564        },
4565        {
4566          "type": "PREC_LEFT",
4567          "value": 12,
4568          "content": {
4569            "type": "SEQ",
4570            "members": [
4571              {
4572                "type": "FIELD",
4573                "name": "left",
4574                "content": {
4575                  "type": "SYMBOL",
4576                  "name": "expression"
4577                }
4578              },
4579              {
4580                "type": "FIELD",
4581                "name": "operator",
4582                "content": {
4583                  "type": "STRING",
4584                  "value": "+"
4585                }
4586              },
4587              {
4588                "type": "FIELD",
4589                "name": "right",
4590                "content": {
4591                  "type": "SYMBOL",
4592                  "name": "expression"
4593                }
4594              }
4595            ]
4596          }
4597        },
4598        {
4599          "type": "PREC_LEFT",
4600          "value": 12,
4601          "content": {
4602            "type": "SEQ",
4603            "members": [
4604              {
4605                "type": "FIELD",
4606                "name": "left",
4607                "content": {
4608                  "type": "SYMBOL",
4609                  "name": "expression"
4610                }
4611              },
4612              {
4613                "type": "FIELD",
4614                "name": "operator",
4615                "content": {
4616                  "type": "STRING",
4617                  "value": "-"
4618                }
4619              },
4620              {
4621                "type": "FIELD",
4622                "name": "right",
4623                "content": {
4624                  "type": "SYMBOL",
4625                  "name": "expression"
4626                }
4627              }
4628            ]
4629          }
4630        },
4631        {
4632          "type": "PREC_LEFT",
4633          "value": 13,
4634          "content": {
4635            "type": "SEQ",
4636            "members": [
4637              {
4638                "type": "FIELD",
4639                "name": "left",
4640                "content": {
4641                  "type": "SYMBOL",
4642                  "name": "expression"
4643                }
4644              },
4645              {
4646                "type": "FIELD",
4647                "name": "operator",
4648                "content": {
4649                  "type": "STRING",
4650                  "value": "*"
4651                }
4652              },
4653              {
4654                "type": "FIELD",
4655                "name": "right",
4656                "content": {
4657                  "type": "SYMBOL",
4658                  "name": "expression"
4659                }
4660              }
4661            ]
4662          }
4663        },
4664        {
4665          "type": "PREC_LEFT",
4666          "value": 13,
4667          "content": {
4668            "type": "SEQ",
4669            "members": [
4670              {
4671                "type": "FIELD",
4672                "name": "left",
4673                "content": {
4674                  "type": "SYMBOL",
4675                  "name": "expression"
4676                }
4677              },
4678              {
4679                "type": "FIELD",
4680                "name": "operator",
4681                "content": {
4682                  "type": "STRING",
4683                  "value": "/"
4684                }
4685              },
4686              {
4687                "type": "FIELD",
4688                "name": "right",
4689                "content": {
4690                  "type": "SYMBOL",
4691                  "name": "expression"
4692                }
4693              }
4694            ]
4695          }
4696        },
4697        {
4698          "type": "PREC_LEFT",
4699          "value": 13,
4700          "content": {
4701            "type": "SEQ",
4702            "members": [
4703              {
4704                "type": "FIELD",
4705                "name": "left",
4706                "content": {
4707                  "type": "SYMBOL",
4708                  "name": "expression"
4709                }
4710              },
4711              {
4712                "type": "FIELD",
4713                "name": "operator",
4714                "content": {
4715                  "type": "STRING",
4716                  "value": "%"
4717                }
4718              },
4719              {
4720                "type": "FIELD",
4721                "name": "right",
4722                "content": {
4723                  "type": "SYMBOL",
4724                  "name": "expression"
4725                }
4726              }
4727            ]
4728          }
4729        },
4730        {
4731          "type": "PREC_LEFT",
4732          "value": 13,
4733          "content": {
4734            "type": "SEQ",
4735            "members": [
4736              {
4737                "type": "FIELD",
4738                "name": "left",
4739                "content": {
4740                  "type": "SYMBOL",
4741                  "name": "expression"
4742                }
4743              },
4744              {
4745                "type": "FIELD",
4746                "name": "operator",
4747                "content": {
4748                  "type": "STRING",
4749                  "value": "%%"
4750                }
4751              },
4752              {
4753                "type": "FIELD",
4754                "name": "right",
4755                "content": {
4756                  "type": "SYMBOL",
4757                  "name": "expression"
4758                }
4759              }
4760            ]
4761          }
4762        }
4763      ]
4764    },
4765    "ternary_expression": {
4766      "type": "PREC_RIGHT",
4767      "value": 0,
4768      "content": {
4769        "type": "SEQ",
4770        "members": [
4771          {
4772            "type": "FIELD",
4773            "name": "condition",
4774            "content": {
4775              "type": "CHOICE",
4776              "members": [
4777                {
4778                  "type": "SYMBOL",
4779                  "name": "_expression_no_tag"
4780                },
4781                {
4782                  "type": "SYMBOL",
4783                  "name": "struct"
4784                }
4785              ]
4786            }
4787          },
4788          {
4789            "type": "CHOICE",
4790            "members": [
4791              {
4792                "type": "PREC",
4793                "value": 2,
4794                "content": {
4795                  "type": "SEQ",
4796                  "members": [
4797                    {
4798                      "type": "STRING",
4799                      "value": "?"
4800                    },
4801                    {
4802                      "type": "FIELD",
4803                      "name": "consequence",
4804                      "content": {
4805                        "type": "SYMBOL",
4806                        "name": "expression"
4807                      }
4808                    },
4809                    {
4810                      "type": "STRING",
4811                      "value": ":"
4812                    },
4813                    {
4814                      "type": "FIELD",
4815                      "name": "alternative",
4816                      "content": {
4817                        "type": "SYMBOL",
4818                        "name": "expression"
4819                      }
4820                    }
4821                  ]
4822                }
4823              },
4824              {
4825                "type": "SEQ",
4826                "members": [
4827                  {
4828                    "type": "CHOICE",
4829                    "members": [
4830                      {
4831                        "type": "STRING",
4832                        "value": "if"
4833                      },
4834                      {
4835                        "type": "STRING",
4836                        "value": "when"
4837                      }
4838                    ]
4839                  },
4840                  {
4841                    "type": "FIELD",
4842                    "name": "consequence",
4843                    "content": {
4844                      "type": "SYMBOL",
4845                      "name": "expression"
4846                    }
4847                  },
4848                  {
4849                    "type": "STRING",
4850                    "value": "else"
4851                  },
4852                  {
4853                    "type": "FIELD",
4854                    "name": "alternative",
4855                    "content": {
4856                      "type": "SYMBOL",
4857                      "name": "expression"
4858                    }
4859                  }
4860                ]
4861              }
4862            ]
4863          }
4864        ]
4865      }
4866    },
4867    "call_expression": {
4868      "type": "PREC_LEFT",
4869      "value": 17,
4870      "content": {
4871        "type": "SEQ",
4872        "members": [
4873          {
4874            "type": "FIELD",
4875            "name": "function",
4876            "content": {
4877              "type": "CHOICE",
4878              "members": [
4879                {
4880                  "type": "SEQ",
4881                  "members": [
4882                    {
4883                      "type": "SYMBOL",
4884                      "name": "tag"
4885                    },
4886                    {
4887                      "type": "SYMBOL",
4888                      "name": "identifier"
4889                    }
4890                  ]
4891                },
4892                {
4893                  "type": "SYMBOL",
4894                  "name": "_expression_no_tag"
4895                },
4896                {
4897                  "type": "SYMBOL",
4898                  "name": "tag"
4899                }
4900              ]
4901            }
4902          },
4903          {
4904            "type": "STRING",
4905            "value": "("
4906          },
4907          {
4908            "type": "CHOICE",
4909            "members": [
4910              {
4911                "type": "SEQ",
4912                "members": [
4913                  {
4914                    "type": "SEQ",
4915                    "members": [
4916                      {
4917                        "type": "SEQ",
4918                        "members": [
4919                          {
4920                            "type": "FIELD",
4921                            "name": "argument",
4922                            "content": {
4923                              "type": "CHOICE",
4924                              "members": [
4925                                {
4926                                  "type": "SYMBOL",
4927                                  "name": "expression"
4928                                },
4929                                {
4930                                  "type": "SYMBOL",
4931                                  "name": "array_type"
4932                                },
4933                                {
4934                                  "type": "SYMBOL",
4935                                  "name": "struct_type"
4936                                },
4937                                {
4938                                  "type": "SYMBOL",
4939                                  "name": "pointer_type"
4940                                },
4941                                {
4942                                  "type": "SYMBOL",
4943                                  "name": "procedure"
4944                                }
4945                              ]
4946                            }
4947                          },
4948                          {
4949                            "type": "CHOICE",
4950                            "members": [
4951                              {
4952                                "type": "SEQ",
4953                                "members": [
4954                                  {
4955                                    "type": "STRING",
4956                                    "value": "="
4957                                  },
4958                                  {
4959                                    "type": "CHOICE",
4960                                    "members": [
4961                                      {
4962                                        "type": "SYMBOL",
4963                                        "name": "expression"
4964                                      }
4965                                    ]
4966                                  }
4967                                ]
4968                              },
4969                              {
4970                                "type": "BLANK"
4971                              }
4972                            ]
4973                          }
4974                        ]
4975                      },
4976                      {
4977                        "type": "REPEAT",
4978                        "content": {
4979                          "type": "SEQ",
4980                          "members": [
4981                            {
4982                              "type": "STRING",
4983                              "value": ","
4984                            },
4985                            {
4986                              "type": "SEQ",
4987                              "members": [
4988                                {
4989                                  "type": "FIELD",
4990                                  "name": "argument",
4991                                  "content": {
4992                                    "type": "CHOICE",
4993                                    "members": [
4994                                      {
4995                                        "type": "SYMBOL",
4996                                        "name": "expression"
4997                                      },
4998                                      {
4999                                        "type": "SYMBOL",
5000                                        "name": "array_type"
5001                                      },
5002                                      {
5003                                        "type": "SYMBOL",
5004                                        "name": "struct_type"
5005                                      },
5006                                      {
5007                                        "type": "SYMBOL",
5008                                        "name": "pointer_type"
5009                                      },
5010                                      {
5011                                        "type": "SYMBOL",
5012                                        "name": "procedure"
5013                                      }
5014                                    ]
5015                                  }
5016                                },
5017                                {
5018                                  "type": "CHOICE",
5019                                  "members": [
5020                                    {
5021                                      "type": "SEQ",
5022                                      "members": [
5023                                        {
5024                                          "type": "STRING",
5025                                          "value": "="
5026                                        },
5027                                        {
5028                                          "type": "CHOICE",
5029                                          "members": [
5030                                            {
5031                                              "type": "SYMBOL",
5032                                              "name": "expression"
5033                                            }
5034                                          ]
5035                                        }
5036                                      ]
5037                                    },
5038                                    {
5039                                      "type": "BLANK"
5040                                    }
5041                                  ]
5042                                }
5043                              ]
5044                            }
5045                          ]
5046                        }
5047                      }
5048                    ]
5049                  },
5050                  {
5051                    "type": "CHOICE",
5052                    "members": [
5053                      {
5054                        "type": "STRING",
5055                        "value": ","
5056                      },
5057                      {
5058                        "type": "BLANK"
5059                      }
5060                    ]
5061                  }
5062                ]
5063              },
5064              {
5065                "type": "BLANK"
5066              }
5067            ]
5068          },
5069          {
5070            "type": "STRING",
5071            "value": ")"
5072          }
5073        ]
5074      }
5075    },
5076    "selector_call_expression": {
5077      "type": "PREC_LEFT",
5078      "value": 17,
5079      "content": {
5080        "type": "SEQ",
5081        "members": [
5082          {
5083            "type": "FIELD",
5084            "name": "function",
5085            "content": {
5086              "type": "SYMBOL",
5087              "name": "expression"
5088            }
5089          },
5090          {
5091            "type": "STRING",
5092            "value": "->"
5093          },
5094          {
5095            "type": "SYMBOL",
5096            "name": "call_expression"
5097          }
5098        ]
5099      }
5100    },
5101    "member_expression": {
5102      "type": "PREC_LEFT",
5103      "value": 18,
5104      "content": {
5105        "type": "SEQ",
5106        "members": [
5107          {
5108            "type": "CHOICE",
5109            "members": [
5110              {
5111                "type": "SYMBOL",
5112                "name": "expression"
5113              },
5114              {
5115                "type": "BLANK"
5116              }
5117            ]
5118          },
5119          {
5120            "type": "STRING",
5121            "value": "."
5122          },
5123          {
5124            "type": "SYMBOL",
5125            "name": "expression"
5126          }
5127        ]
5128      }
5129    },
5130    "index_expression": {
5131      "type": "PREC_LEFT",
5132      "value": 18,
5133      "content": {
5134        "type": "SEQ",
5135        "members": [
5136          {
5137            "type": "SYMBOL",
5138            "name": "expression"
5139          },
5140          {
5141            "type": "STRING",
5142            "value": "["
5143          },
5144          {
5145            "type": "SYMBOL",
5146            "name": "expression"
5147          },
5148          {
5149            "type": "CHOICE",
5150            "members": [
5151              {
5152                "type": "SEQ",
5153                "members": [
5154                  {
5155                    "type": "STRING",
5156                    "value": ","
5157                  },
5158                  {
5159                    "type": "SYMBOL",
5160                    "name": "expression"
5161                  }
5162                ]
5163              },
5164              {
5165                "type": "BLANK"
5166              }
5167            ]
5168          },
5169          {
5170            "type": "STRING",
5171            "value": "]"
5172          }
5173        ]
5174      }
5175    },
5176    "slice_expression": {
5177      "type": "PREC_LEFT",
5178      "value": 18,
5179      "content": {
5180        "type": "SEQ",
5181        "members": [
5182          {
5183            "type": "SYMBOL",
5184            "name": "expression"
5185          },
5186          {
5187            "type": "STRING",
5188            "value": "["
5189          },
5190          {
5191            "type": "CHOICE",
5192            "members": [
5193              {
5194                "type": "FIELD",
5195                "name": "start",
5196                "content": {
5197                  "type": "SYMBOL",
5198                  "name": "expression"
5199                }
5200              },
5201              {
5202                "type": "BLANK"
5203              }
5204            ]
5205          },
5206          {
5207            "type": "STRING",
5208            "value": ":"
5209          },
5210          {
5211            "type": "CHOICE",
5212            "members": [
5213              {
5214                "type": "FIELD",
5215                "name": "end",
5216                "content": {
5217                  "type": "SYMBOL",
5218                  "name": "expression"
5219                }
5220              },
5221              {
5222                "type": "BLANK"
5223              }
5224            ]
5225          },
5226          {
5227            "type": "STRING",
5228            "value": "]"
5229          }
5230        ]
5231      }
5232    },
5233    "range_expression": {
5234      "type": "PREC_LEFT",
5235      "value": 18,
5236      "content": {
5237        "type": "SEQ",
5238        "members": [
5239          {
5240            "type": "SYMBOL",
5241            "name": "expression"
5242          },
5243          {
5244            "type": "CHOICE",
5245            "members": [
5246              {
5247                "type": "STRING",
5248                "value": "..="
5249              },
5250              {
5251                "type": "STRING",
5252                "value": "..<"
5253              }
5254            ]
5255          },
5256          {
5257            "type": "SYMBOL",
5258            "name": "expression"
5259          }
5260        ]
5261      }
5262    },
5263    "cast_expression": {
5264      "type": "PREC_LEFT",
5265      "value": 14,
5266      "content": {
5267        "type": "SEQ",
5268        "members": [
5269          {
5270            "type": "CHOICE",
5271            "members": [
5272              {
5273                "type": "SEQ",
5274                "members": [
5275                  {
5276                    "type": "STRING",
5277                    "value": "("
5278                  },
5279                  {
5280                    "type": "CHOICE",
5281                    "members": [
5282                      {
5283                        "type": "SYMBOL",
5284                        "name": "pointer_type"
5285                      },
5286                      {
5287                        "type": "SYMBOL",
5288                        "name": "array_type"
5289                      },
5290                      {
5291                        "type": "SYMBOL",
5292                        "name": "_procedure_type"
5293                      }
5294                    ]
5295                  },
5296                  {
5297                    "type": "STRING",
5298                    "value": ")"
5299                  },
5300                  {
5301                    "type": "CHOICE",
5302                    "members": [
5303                      {
5304                        "type": "SYMBOL",
5305                        "name": "expression"
5306                      },
5307                      {
5308                        "type": "BLANK"
5309                      }
5310                    ]
5311                  }
5312                ]
5313              },
5314              {
5315                "type": "SEQ",
5316                "members": [
5317                  {
5318                    "type": "CHOICE",
5319                    "members": [
5320                      {
5321                        "type": "STRING",
5322                        "value": "cast"
5323                      },
5324                      {
5325                        "type": "STRING",
5326                        "value": "transmute"
5327                      }
5328                    ]
5329                  },
5330                  {
5331                    "type": "STRING",
5332                    "value": "("
5333                  },
5334                  {
5335                    "type": "SYMBOL",
5336                    "name": "type"
5337                  },
5338                  {
5339                    "type": "STRING",
5340                    "value": ")"
5341                  },
5342                  {
5343                    "type": "SYMBOL",
5344                    "name": "expression"
5345                  }
5346                ]
5347              },
5348              {
5349                "type": "SEQ",
5350                "members": [
5351                  {
5352                    "type": "STRING",
5353                    "value": "auto_cast"
5354                  },
5355                  {
5356                    "type": "SYMBOL",
5357                    "name": "expression"
5358                  }
5359                ]
5360              }
5361            ]
5362          }
5363        ]
5364      }
5365    },
5366    "in_expression": {
5367      "type": "PREC_RIGHT",
5368      "value": -1,
5369      "content": {
5370        "type": "SEQ",
5371        "members": [
5372          {
5373            "type": "SYMBOL",
5374            "name": "expression"
5375          },
5376          {
5377            "type": "CHOICE",
5378            "members": [
5379              {
5380                "type": "STRING",
5381                "value": "in"
5382              },
5383              {
5384                "type": "STRING",
5385                "value": "not_in"
5386              }
5387            ]
5388          },
5389          {
5390            "type": "SYMBOL",
5391            "name": "expression"
5392          }
5393        ]
5394      }
5395    },
5396    "variadic_expression": {
5397      "type": "PREC_LEFT",
5398      "value": 20,
5399      "content": {
5400        "type": "SEQ",
5401        "members": [
5402          {
5403            "type": "STRING",
5404            "value": ".."
5405          },
5406          {
5407            "type": "SYMBOL",
5408            "name": "expression"
5409          }
5410        ]
5411      }
5412    },
5413    "parenthesized_expression": {
5414      "type": "SEQ",
5415      "members": [
5416        {
5417          "type": "STRING",
5418          "value": "("
5419        },
5420        {
5421          "type": "SYMBOL",
5422          "name": "expression"
5423        },
5424        {
5425          "type": "STRING",
5426          "value": ")"
5427        }
5428      ]
5429    },
5430    "or_return_expression": {
5431      "type": "SEQ",
5432      "members": [
5433        {
5434          "type": "SYMBOL",
5435          "name": "expression"
5436        },
5437        {
5438          "type": "STRING",
5439          "value": "or_return"
5440        }
5441      ]
5442    },
5443    "or_continue_expression": {
5444      "type": "PREC_RIGHT",
5445      "value": 0,
5446      "content": {
5447        "type": "SEQ",
5448        "members": [
5449          {
5450            "type": "SYMBOL",
5451            "name": "expression"
5452          },
5453          {
5454            "type": "STRING",
5455            "value": "or_continue"
5456          },
5457          {
5458            "type": "FIELD",
5459            "name": "label",
5460            "content": {
5461              "type": "CHOICE",
5462              "members": [
5463                {
5464                  "type": "SYMBOL",
5465                  "name": "identifier"
5466                },
5467                {
5468                  "type": "BLANK"
5469                }
5470              ]
5471            }
5472          }
5473        ]
5474      }
5475    },
5476    "or_break_expression": {
5477      "type": "PREC_RIGHT",
5478      "value": 0,
5479      "content": {
5480        "type": "SEQ",
5481        "members": [
5482          {
5483            "type": "SYMBOL",
5484            "name": "expression"
5485          },
5486          {
5487            "type": "STRING",
5488            "value": "or_break"
5489          },
5490          {
5491            "type": "CHOICE",
5492            "members": [
5493              {
5494                "type": "SYMBOL",
5495                "name": "expression"
5496              },
5497              {
5498                "type": "BLANK"
5499              }
5500            ]
5501          }
5502        ]
5503      }
5504    },
5505    "address": {
5506      "type": "SEQ",
5507      "members": [
5508        {
5509          "type": "SYMBOL",
5510          "name": "expression"
5511        },
5512        {
5513          "type": "STRING",
5514          "value": "^"
5515        }
5516      ]
5517    },
5518    "type": {
5519      "type": "PREC_RIGHT",
5520      "value": 0,
5521      "content": {
5522        "type": "CHOICE",
5523        "members": [
5524          {
5525            "type": "SYMBOL",
5526            "name": "identifier"
5527          },
5528          {
5529            "type": "SYMBOL",
5530            "name": "pointer_type"
5531          },
5532          {
5533            "type": "SYMBOL",
5534            "name": "variadic_type"
5535          },
5536          {
5537            "type": "SYMBOL",
5538            "name": "array_type"
5539          },
5540          {
5541            "type": "SYMBOL",
5542            "name": "map_type"
5543          },
5544          {
5545            "type": "SYMBOL",
5546            "name": "union_type"
5547          },
5548          {
5549            "type": "SYMBOL",
5550            "name": "bit_set_type"
5551          },
5552          {
5553            "type": "SYMBOL",
5554            "name": "matrix_type"
5555          },
5556          {
5557            "type": "SYMBOL",
5558            "name": "field_type"
5559          },
5560          {
5561            "type": "SYMBOL",
5562            "name": "tuple_type"
5563          },
5564          {
5565            "type": "SYMBOL",
5566            "name": "struct_type"
5567          },
5568          {
5569            "type": "SYMBOL",
5570            "name": "enum_type"
5571          },
5572          {
5573            "type": "SYMBOL",
5574            "name": "bit_field_type"
5575          },
5576          {
5577            "type": "SYMBOL",
5578            "name": "constant_type"
5579          },
5580          {
5581            "type": "SYMBOL",
5582            "name": "specialized_type"
5583          },
5584          {
5585            "type": "SYMBOL",
5586            "name": "_procedure_type"
5587          },
5588          {
5589            "type": "SYMBOL",
5590            "name": "distinct_type"
5591          },
5592          {
5593            "type": "SYMBOL",
5594            "name": "empty_type"
5595          },
5596          {
5597            "type": "SYMBOL",
5598            "name": "polymorphic_type"
5599          },
5600          {
5601            "type": "SYMBOL",
5602            "name": "conditional_type"
5603          },
5604          {
5605            "type": "STRING",
5606            "value": "..."
5607          }
5608        ]
5609      }
5610    },
5611    "pointer_type": {
5612      "type": "PREC_LEFT",
5613      "value": 0,
5614      "content": {
5615        "type": "SEQ",
5616        "members": [
5617          {
5618            "type": "STRING",
5619            "value": "^"
5620          },
5621          {
5622            "type": "SYMBOL",
5623            "name": "type"
5624          }
5625        ]
5626      }
5627    },
5628    "variadic_type": {
5629      "type": "PREC_LEFT",
5630      "value": 0,
5631      "content": {
5632        "type": "SEQ",
5633        "members": [
5634          {
5635            "type": "STRING",
5636            "value": ".."
5637          },
5638          {
5639            "type": "SYMBOL",
5640            "name": "type"
5641          }
5642        ]
5643      }
5644    },
5645    "array_type": {
5646      "type": "PREC",
5647      "value": 1,
5648      "content": {
5649        "type": "SEQ",
5650        "members": [
5651          {
5652            "type": "CHOICE",
5653            "members": [
5654              {
5655                "type": "SYMBOL",
5656                "name": "tag"
5657              },
5658              {
5659                "type": "BLANK"
5660              }
5661            ]
5662          },
5663          {
5664            "type": "STRING",
5665            "value": "["
5666          },
5667          {
5668            "type": "CHOICE",
5669            "members": [
5670              {
5671                "type": "SEQ",
5672                "members": [
5673                  {
5674                    "type": "CHOICE",
5675                    "members": [
5676                      {
5677                        "type": "STRING",
5678                        "value": "$"
5679                      },
5680                      {
5681                        "type": "BLANK"
5682                      }
5683                    ]
5684                  },
5685                  {
5686                    "type": "CHOICE",
5687                    "members": [
5688                      {
5689                        "type": "STRING",
5690                        "value": "dynamic"
5691                      },
5692                      {
5693                        "type": "STRING",
5694                        "value": "^"
5695                      },
5696                      {
5697                        "type": "STRING",
5698                        "value": "?"
5699                      },
5700                      {
5701                        "type": "SYMBOL",
5702                        "name": "expression"
5703                      }
5704                    ]
5705                  }
5706                ]
5707              },
5708              {
5709                "type": "BLANK"
5710              }
5711            ]
5712          },
5713          {
5714            "type": "STRING",
5715            "value": "]"
5716          },
5717          {
5718            "type": "CHOICE",
5719            "members": [
5720              {
5721                "type": "SYMBOL",
5722                "name": "type"
5723              },
5724              {
5725                "type": "BLANK"
5726              }
5727            ]
5728          }
5729        ]
5730      }
5731    },
5732    "map_type": {
5733      "type": "PREC_RIGHT",
5734      "value": 0,
5735      "content": {
5736        "type": "SEQ",
5737        "members": [
5738          {
5739            "type": "STRING",
5740            "value": "map"
5741          },
5742          {
5743            "type": "STRING",
5744            "value": "["
5745          },
5746          {
5747            "type": "SYMBOL",
5748            "name": "type"
5749          },
5750          {
5751            "type": "STRING",
5752            "value": "]"
5753          },
5754          {
5755            "type": "SYMBOL",
5756            "name": "type"
5757          }
5758        ]
5759      }
5760    },
5761    "union_type": {
5762      "type": "PREC_RIGHT",
5763      "value": 0,
5764      "content": {
5765        "type": "SEQ",
5766        "members": [
5767          {
5768            "type": "STRING",
5769            "value": "union"
5770          },
5771          {
5772            "type": "STRING",
5773            "value": "{"
5774          },
5775          {
5776            "type": "SEQ",
5777            "members": [
5778              {
5779                "type": "SYMBOL",
5780                "name": "type"
5781              },
5782              {
5783                "type": "REPEAT",
5784                "content": {
5785                  "type": "SEQ",
5786                  "members": [
5787                    {
5788                      "type": "STRING",
5789                      "value": ","
5790                    },
5791                    {
5792                      "type": "SYMBOL",
5793                      "name": "type"
5794                    }
5795                  ]
5796                }
5797              }
5798            ]
5799          },
5800          {
5801            "type": "CHOICE",
5802            "members": [
5803              {
5804                "type": "STRING",
5805                "value": ","
5806              },
5807              {
5808                "type": "BLANK"
5809              }
5810            ]
5811          },
5812          {
5813            "type": "STRING",
5814            "value": "}"
5815          }
5816        ]
5817      }
5818    },
5819    "bit_set_type": {
5820      "type": "SEQ",
5821      "members": [
5822        {
5823          "type": "STRING",
5824          "value": "bit_set"
5825        },
5826        {
5827          "type": "STRING",
5828          "value": "["
5829        },
5830        {
5831          "type": "CHOICE",
5832          "members": [
5833            {
5834              "type": "SYMBOL",
5835              "name": "constant_type"
5836            },
5837            {
5838              "type": "SYMBOL",
5839              "name": "expression"
5840            }
5841          ]
5842        },
5843        {
5844          "type": "CHOICE",
5845          "members": [
5846            {
5847              "type": "SEQ",
5848              "members": [
5849                {
5850                  "type": "STRING",
5851                  "value": ";"
5852                },
5853                {
5854                  "type": "SYMBOL",
5855                  "name": "type"
5856                }
5857              ]
5858            },
5859            {
5860              "type": "BLANK"
5861            }
5862          ]
5863        },
5864        {
5865          "type": "STRING",
5866          "value": "]"
5867        }
5868      ]
5869    },
5870    "matrix_type": {
5871      "type": "PREC_LEFT",
5872      "value": 0,
5873      "content": {
5874        "type": "SEQ",
5875        "members": [
5876          {
5877            "type": "STRING",
5878            "value": "matrix"
5879          },
5880          {
5881            "type": "STRING",
5882            "value": "["
5883          },
5884          {
5885            "type": "CHOICE",
5886            "members": [
5887              {
5888                "type": "SYMBOL",
5889                "name": "constant_type"
5890              },
5891              {
5892                "type": "SYMBOL",
5893                "name": "expression"
5894              }
5895            ]
5896          },
5897          {
5898            "type": "STRING",
5899            "value": ","
5900          },
5901          {
5902            "type": "CHOICE",
5903            "members": [
5904              {
5905                "type": "SYMBOL",
5906                "name": "constant_type"
5907              },
5908              {
5909                "type": "SYMBOL",
5910                "name": "expression"
5911              }
5912            ]
5913          },
5914          {
5915            "type": "STRING",
5916            "value": "]"
5917          },
5918          {
5919            "type": "SYMBOL",
5920            "name": "type"
5921          }
5922        ]
5923      }
5924    },
5925    "field_type": {
5926      "type": "SEQ",
5927      "members": [
5928        {
5929          "type": "SYMBOL",
5930          "name": "identifier"
5931        },
5932        {
5933          "type": "REPEAT1",
5934          "content": {
5935            "type": "SEQ",
5936            "members": [
5937              {
5938                "type": "IMMEDIATE_TOKEN",
5939                "content": {
5940                  "type": "STRING",
5941                  "value": "."
5942                }
5943              },
5944              {
5945                "type": "SYMBOL",
5946                "name": "identifier"
5947              }
5948            ]
5949          }
5950        }
5951      ]
5952    },
5953    "tuple_type": {
5954      "type": "SEQ",
5955      "members": [
5956        {
5957          "type": "STRING",
5958          "value": "("
5959        },
5960        {
5961          "type": "CHOICE",
5962          "members": [
5963            {
5964              "type": "SEQ",
5965              "members": [
5966                {
5967                  "type": "SEQ",
5968                  "members": [
5969                    {
5970                      "type": "CHOICE",
5971                      "members": [
5972                        {
5973                          "type": "SYMBOL",
5974                          "name": "type"
5975                        },
5976                        {
5977                          "type": "SYMBOL",
5978                          "name": "named_type"
5979                        },
5980                        {
5981                          "type": "SYMBOL",
5982                          "name": "default_type"
5983                        }
5984                      ]
5985                    },
5986                    {
5987                      "type": "REPEAT",
5988                      "content": {
5989                        "type": "SEQ",
5990                        "members": [
5991                          {
5992                            "type": "STRING",
5993                            "value": ","
5994                          },
5995                          {
5996                            "type": "CHOICE",
5997                            "members": [
5998                              {
5999                                "type": "SYMBOL",
6000                                "name": "type"
6001                              },
6002                              {
6003                                "type": "SYMBOL",
6004                                "name": "named_type"
6005                              },
6006                              {
6007                                "type": "SYMBOL",
6008                                "name": "default_type"
6009                              }
6010                            ]
6011                          }
6012                        ]
6013                      }
6014                    }
6015                  ]
6016                },
6017                {
6018                  "type": "CHOICE",
6019                  "members": [
6020                    {
6021                      "type": "STRING",
6022                      "value": ","
6023                    },
6024                    {
6025                      "type": "BLANK"
6026                    }
6027                  ]
6028                }
6029              ]
6030            },
6031            {
6032              "type": "BLANK"
6033            }
6034          ]
6035        },
6036        {
6037          "type": "STRING",
6038          "value": ")"
6039        }
6040      ]
6041    },
6042    "struct_type": {
6043      "type": "PREC",
6044      "value": 1,
6045      "content": {
6046        "type": "SEQ",
6047        "members": [
6048          {
6049            "type": "STRING",
6050            "value": "struct"
6051          },
6052          {
6053            "type": "CHOICE",
6054            "members": [
6055              {
6056                "type": "SYMBOL",
6057                "name": "polymorphic_parameters"
6058              },
6059              {
6060                "type": "BLANK"
6061              }
6062            ]
6063          },
6064          {
6065            "type": "REPEAT",
6066            "content": {
6067              "type": "SEQ",
6068              "members": [
6069                {
6070                  "type": "SYMBOL",
6071                  "name": "tag"
6072                },
6073                {
6074                  "type": "CHOICE",
6075                  "members": [
6076                    {
6077                      "type": "SYMBOL",
6078                      "name": "number"
6079                    },
6080                    {
6081                      "type": "BLANK"
6082                    }
6083                  ]
6084                }
6085              ]
6086            }
6087          },
6088          {
6089            "type": "REPEAT1",
6090            "content": {
6091              "type": "SEQ",
6092              "members": [
6093                {
6094                  "type": "STRING",
6095                  "value": "{"
6096                },
6097                {
6098                  "type": "CHOICE",
6099                  "members": [
6100                    {
6101                      "type": "SYMBOL",
6102                      "name": "_struct_members"
6103                    },
6104                    {
6105                      "type": "BLANK"
6106                    }
6107                  ]
6108                },
6109                {
6110                  "type": "STRING",
6111                  "value": "}"
6112                }
6113              ]
6114            }
6115          }
6116        ]
6117      }
6118    },
6119    "_struct_members": {
6120      "type": "SEQ",
6121      "members": [
6122        {
6123          "type": "SEQ",
6124          "members": [
6125            {
6126              "type": "SYMBOL",
6127              "name": "struct_member"
6128            },
6129            {
6130              "type": "REPEAT",
6131              "content": {
6132                "type": "SEQ",
6133                "members": [
6134                  {
6135                    "type": "STRING",
6136                    "value": ","
6137                  },
6138                  {
6139                    "type": "SYMBOL",
6140                    "name": "struct_member"
6141                  }
6142                ]
6143              }
6144            }
6145          ]
6146        },
6147        {
6148          "type": "CHOICE",
6149          "members": [
6150            {
6151              "type": "STRING",
6152              "value": ","
6153            },
6154            {
6155              "type": "BLANK"
6156            }
6157          ]
6158        }
6159      ]
6160    },
6161    "struct_member": {
6162      "type": "SEQ",
6163      "members": [
6164        {
6165          "type": "SEQ",
6166          "members": [
6167            {
6168              "type": "SEQ",
6169              "members": [
6170                {
6171                  "type": "CHOICE",
6172                  "members": [
6173                    {
6174                      "type": "STRING",
6175                      "value": "using"
6176                    },
6177                    {
6178                      "type": "BLANK"
6179                    }
6180                  ]
6181                },
6182                {
6183                  "type": "SYMBOL",
6184                  "name": "identifier"
6185                }
6186              ]
6187            },
6188            {
6189              "type": "REPEAT",
6190              "content": {
6191                "type": "SEQ",
6192                "members": [
6193                  {
6194                    "type": "STRING",
6195                    "value": ","
6196                  },
6197                  {
6198                    "type": "SEQ",
6199                    "members": [
6200                      {
6201                        "type": "CHOICE",
6202                        "members": [
6203                          {
6204                            "type": "STRING",
6205                            "value": "using"
6206                          },
6207                          {
6208                            "type": "BLANK"
6209                          }
6210                        ]
6211                      },
6212                      {
6213                        "type": "SYMBOL",
6214                        "name": "identifier"
6215                      }
6216                    ]
6217                  }
6218                ]
6219              }
6220            }
6221          ]
6222        },
6223        {
6224          "type": "STRING",
6225          "value": ":"
6226        },
6227        {
6228          "type": "CHOICE",
6229          "members": [
6230            {
6231              "type": "SYMBOL",
6232              "name": "tag"
6233            },
6234            {
6235              "type": "BLANK"
6236            }
6237          ]
6238        },
6239        {
6240          "type": "SYMBOL",
6241          "name": "type"
6242        },
6243        {
6244          "type": "CHOICE",
6245          "members": [
6246            {
6247              "type": "SYMBOL",
6248              "name": "string"
6249            },
6250            {
6251              "type": "BLANK"
6252            }
6253          ]
6254        }
6255      ]
6256    },
6257    "enum_type": {
6258      "type": "SEQ",
6259      "members": [
6260        {
6261          "type": "STRING",
6262          "value": "enum"
6263        },
6264        {
6265          "type": "CHOICE",
6266          "members": [
6267            {
6268              "type": "FIELD",
6269              "name": "underlying_type",
6270              "content": {
6271                "type": "SYMBOL",
6272                "name": "type"
6273              }
6274            },
6275            {
6276              "type": "BLANK"
6277            }
6278          ]
6279        },
6280        {
6281          "type": "STRING",
6282          "value": "{"
6283        },
6284        {
6285          "type": "SEQ",
6286          "members": [
6287            {
6288              "type": "SEQ",
6289              "members": [
6290                {
6291                  "type": "SYMBOL",
6292                  "name": "identifier"
6293                },
6294                {
6295                  "type": "CHOICE",
6296                  "members": [
6297                    {
6298                      "type": "SEQ",
6299                      "members": [
6300                        {
6301                          "type": "STRING",
6302                          "value": "="
6303                        },
6304                        {
6305                          "type": "SYMBOL",
6306                          "name": "expression"
6307                        }
6308                      ]
6309                    },
6310                    {
6311                      "type": "BLANK"
6312                    }
6313                  ]
6314                }
6315              ]
6316            },
6317            {
6318              "type": "REPEAT",
6319              "content": {
6320                "type": "SEQ",
6321                "members": [
6322                  {
6323                    "type": "STRING",
6324                    "value": ","
6325                  },
6326                  {
6327                    "type": "SEQ",
6328                    "members": [
6329                      {
6330                        "type": "SYMBOL",
6331                        "name": "identifier"
6332                      },
6333                      {
6334                        "type": "CHOICE",
6335                        "members": [
6336                          {
6337                            "type": "SEQ",
6338                            "members": [
6339                              {
6340                                "type": "STRING",
6341                                "value": "="
6342                              },
6343                              {
6344                                "type": "SYMBOL",
6345                                "name": "expression"
6346                              }
6347                            ]
6348                          },
6349                          {
6350                            "type": "BLANK"
6351                          }
6352                        ]
6353                      }
6354                    ]
6355                  }
6356                ]
6357              }
6358            }
6359          ]
6360        },
6361        {
6362          "type": "CHOICE",
6363          "members": [
6364            {
6365              "type": "STRING",
6366              "value": ","
6367            },
6368            {
6369              "type": "BLANK"
6370            }
6371          ]
6372        },
6373        {
6374          "type": "STRING",
6375          "value": "}"
6376        }
6377      ]
6378    },
6379    "bit_field_type": {
6380      "type": "SEQ",
6381      "members": [
6382        {
6383          "type": "STRING",
6384          "value": "bit_field"
6385        },
6386        {
6387          "type": "SYMBOL",
6388          "name": "type"
6389        },
6390        {
6391          "type": "STRING",
6392          "value": "{"
6393        },
6394        {
6395          "type": "SEQ",
6396          "members": [
6397            {
6398              "type": "SEQ",
6399              "members": [
6400                {
6401                  "type": "SYMBOL",
6402                  "name": "identifier"
6403                },
6404                {
6405                  "type": "STRING",
6406                  "value": ":"
6407                },
6408                {
6409                  "type": "SYMBOL",
6410                  "name": "type"
6411                },
6412                {
6413                  "type": "STRING",
6414                  "value": "|"
6415                },
6416                {
6417                  "type": "SYMBOL",
6418                  "name": "expression"
6419                }
6420              ]
6421            },
6422            {
6423              "type": "REPEAT",
6424              "content": {
6425                "type": "SEQ",
6426                "members": [
6427                  {
6428                    "type": "STRING",
6429                    "value": ","
6430                  },
6431                  {
6432                    "type": "SEQ",
6433                    "members": [
6434                      {
6435                        "type": "SYMBOL",
6436                        "name": "identifier"
6437                      },
6438                      {
6439                        "type": "STRING",
6440                        "value": ":"
6441                      },
6442                      {
6443                        "type": "SYMBOL",
6444                        "name": "type"
6445                      },
6446                      {
6447                        "type": "STRING",
6448                        "value": "|"
6449                      },
6450                      {
6451                        "type": "SYMBOL",
6452                        "name": "expression"
6453                      }
6454                    ]
6455                  }
6456                ]
6457              }
6458            }
6459          ]
6460        },
6461        {
6462          "type": "CHOICE",
6463          "members": [
6464            {
6465              "type": "STRING",
6466              "value": ","
6467            },
6468            {
6469              "type": "BLANK"
6470            }
6471          ]
6472        },
6473        {
6474          "type": "STRING",
6475          "value": "}"
6476        }
6477      ]
6478    },
6479    "named_type": {
6480      "type": "PREC_RIGHT",
6481      "value": 0,
6482      "content": {
6483        "type": "SEQ",
6484        "members": [
6485          {
6486            "type": "SYMBOL",
6487            "name": "identifier"
6488          },
6489          {
6490            "type": "STRING",
6491            "value": ":"
6492          },
6493          {
6494            "type": "SYMBOL",
6495            "name": "type"
6496          },
6497          {
6498            "type": "CHOICE",
6499            "members": [
6500              {
6501                "type": "SEQ",
6502                "members": [
6503                  {
6504                    "type": "STRING",
6505                    "value": "="
6506                  },
6507                  {
6508                    "type": "SYMBOL",
6509                    "name": "literal"
6510                  }
6511                ]
6512              },
6513              {
6514                "type": "BLANK"
6515              }
6516            ]
6517          }
6518        ]
6519      }
6520    },
6521    "default_type": {
6522      "type": "SEQ",
6523      "members": [
6524        {
6525          "type": "SYMBOL",
6526          "name": "identifier"
6527        },
6528        {
6529          "type": "STRING",
6530          "value": ":="
6531        },
6532        {
6533          "type": "SYMBOL",
6534          "name": "expression"
6535        }
6536      ]
6537    },
6538    "constant_type": {
6539      "type": "PREC_RIGHT",
6540      "value": 0,
6541      "content": {
6542        "type": "SEQ",
6543        "members": [
6544          {
6545            "type": "STRING",
6546            "value": "$"
6547          },
6548          {
6549            "type": "SYMBOL",
6550            "name": "type"
6551          }
6552        ]
6553      }
6554    },
6555    "specialized_type": {
6556      "type": "PREC_RIGHT",
6557      "value": 0,
6558      "content": {
6559        "type": "SEQ",
6560        "members": [
6561          {
6562            "type": "SYMBOL",
6563            "name": "type"
6564          },
6565          {
6566            "type": "STRING",
6567            "value": "/"
6568          },
6569          {
6570            "type": "SYMBOL",
6571            "name": "type"
6572          }
6573        ]
6574      }
6575    },
6576    "_procedure_type": {
6577      "type": "ALIAS",
6578      "content": {
6579        "type": "SYMBOL",
6580        "name": "procedure"
6581      },
6582      "named": true,
6583      "value": "procedure_type"
6584    },
6585    "distinct_type": {
6586      "type": "PREC_RIGHT",
6587      "value": 0,
6588      "content": {
6589        "type": "SEQ",
6590        "members": [
6591          {
6592            "type": "STRING",
6593            "value": "distinct"
6594          },
6595          {
6596            "type": "CHOICE",
6597            "members": [
6598              {
6599                "type": "SYMBOL",
6600                "name": "tag"
6601              },
6602              {
6603                "type": "BLANK"
6604              }
6605            ]
6606          },
6607          {
6608            "type": "SYMBOL",
6609            "name": "type"
6610          }
6611        ]
6612      }
6613    },
6614    "empty_type": {
6615      "type": "STRING",
6616      "value": "!"
6617    },
6618    "polymorphic_type": {
6619      "type": "SEQ",
6620      "members": [
6621        {
6622          "type": "SYMBOL",
6623          "name": "type"
6624        },
6625        {
6626          "type": "STRING",
6627          "value": "("
6628        },
6629        {
6630          "type": "SEQ",
6631          "members": [
6632            {
6633              "type": "CHOICE",
6634              "members": [
6635                {
6636                  "type": "SYMBOL",
6637                  "name": "type"
6638                },
6639                {
6640                  "type": "SYMBOL",
6641                  "name": "literal"
6642                }
6643              ]
6644            },
6645            {
6646              "type": "REPEAT",
6647              "content": {
6648                "type": "SEQ",
6649                "members": [
6650                  {
6651                    "type": "STRING",
6652                    "value": ","
6653                  },
6654                  {
6655                    "type": "CHOICE",
6656                    "members": [
6657                      {
6658                        "type": "SYMBOL",
6659                        "name": "type"
6660                      },
6661                      {
6662                        "type": "SYMBOL",
6663                        "name": "literal"
6664                      }
6665                    ]
6666                  }
6667                ]
6668              }
6669            }
6670          ]
6671        },
6672        {
6673          "type": "STRING",
6674          "value": ")"
6675        }
6676      ]
6677    },
6678    "conditional_type": {
6679      "type": "SEQ",
6680      "members": [
6681        {
6682          "type": "STRING",
6683          "value": "("
6684        },
6685        {
6686          "type": "SYMBOL",
6687          "name": "type"
6688        },
6689        {
6690          "type": "STRING",
6691          "value": "when"
6692        },
6693        {
6694          "type": "SYMBOL",
6695          "name": "expression"
6696        },
6697        {
6698          "type": "STRING",
6699          "value": "else"
6700        },
6701        {
6702          "type": "SYMBOL",
6703          "name": "type"
6704        },
6705        {
6706          "type": "STRING",
6707          "value": ")"
6708        }
6709      ]
6710    },
6711    "literal": {
6712      "type": "PREC_RIGHT",
6713      "value": 0,
6714      "content": {
6715        "type": "CHOICE",
6716        "members": [
6717          {
6718            "type": "SYMBOL",
6719            "name": "struct"
6720          },
6721          {
6722            "type": "SYMBOL",
6723            "name": "map"
6724          },
6725          {
6726            "type": "SYMBOL",
6727            "name": "bit_set"
6728          },
6729          {
6730            "type": "SYMBOL",
6731            "name": "matrix"
6732          },
6733          {
6734            "type": "SYMBOL",
6735            "name": "float"
6736          },
6737          {
6738            "type": "SYMBOL",
6739            "name": "number"
6740          },
6741          {
6742            "type": "SYMBOL",
6743            "name": "string"
6744          },
6745          {
6746            "type": "SYMBOL",
6747            "name": "character"
6748          },
6749          {
6750            "type": "SYMBOL",
6751            "name": "boolean"
6752          },
6753          {
6754            "type": "SYMBOL",
6755            "name": "nil"
6756          },
6757          {
6758            "type": "SYMBOL",
6759            "name": "uninitialized"
6760          }
6761        ]
6762      }
6763    },
6764    "struct": {
6765      "type": "SEQ",
6766      "members": [
6767        {
6768          "type": "CHOICE",
6769          "members": [
6770            {
6771              "type": "CHOICE",
6772              "members": [
6773                {
6774                  "type": "SEQ",
6775                  "members": [
6776                    {
6777                      "type": "STRING",
6778                      "value": "["
6779                    },
6780                    {
6781                      "type": "CHOICE",
6782                      "members": [
6783                        {
6784                          "type": "CHOICE",
6785                          "members": [
6786                            {
6787                              "type": "STRING",
6788                              "value": "dynamic"
6789                            },
6790                            {
6791                              "type": "STRING",
6792                              "value": "^"
6793                            },
6794                            {
6795                              "type": "STRING",
6796                              "value": "?"
6797                            },
6798                            {
6799                              "type": "SYMBOL",
6800                              "name": "expression"
6801                            }
6802                          ]
6803                        },
6804                        {
6805                          "type": "BLANK"
6806                        }
6807                      ]
6808                    },
6809                    {
6810                      "type": "STRING",
6811                      "value": "]"
6812                    },
6813                    {
6814                      "type": "SYMBOL",
6815                      "name": "type"
6816                    }
6817                  ]
6818                },
6819                {
6820                  "type": "SEQ",
6821                  "members": [
6822                    {
6823                      "type": "CHOICE",
6824                      "members": [
6825                        {
6826                          "type": "SYMBOL",
6827                          "name": "identifier"
6828                        },
6829                        {
6830                          "type": "SYMBOL",
6831                          "name": "field_identifier"
6832                        }
6833                      ]
6834                    },
6835                    {
6836                      "type": "CHOICE",
6837                      "members": [
6838                        {
6839                          "type": "SEQ",
6840                          "members": [
6841                            {
6842                              "type": "STRING",
6843                              "value": "("
6844                            },
6845                            {
6846                              "type": "CHOICE",
6847                              "members": [
6848                                {
6849                                  "type": "SEQ",
6850                                  "members": [
6851                                    {
6852                                      "type": "SYMBOL",
6853                                      "name": "identifier"
6854                                    },
6855                                    {
6856                                      "type": "REPEAT",
6857                                      "content": {
6858                                        "type": "SEQ",
6859                                        "members": [
6860                                          {
6861                                            "type": "STRING",
6862                                            "value": ","
6863                                          },
6864                                          {
6865                                            "type": "SYMBOL",
6866                                            "name": "identifier"
6867                                          }
6868                                        ]
6869                                      }
6870                                    }
6871                                  ]
6872                                },
6873                                {
6874                                  "type": "BLANK"
6875                                }
6876                              ]
6877                            },
6878                            {
6879                              "type": "STRING",
6880                              "value": ")"
6881                            }
6882                          ]
6883                        },
6884                        {
6885                          "type": "BLANK"
6886                        }
6887                      ]
6888                    }
6889                  ]
6890                }
6891              ]
6892            },
6893            {
6894              "type": "BLANK"
6895            }
6896          ]
6897        },
6898        {
6899          "type": "STRING",
6900          "value": "{"
6901        },
6902        {
6903          "type": "CHOICE",
6904          "members": [
6905            {
6906              "type": "SEQ",
6907              "members": [
6908                {
6909                  "type": "SEQ",
6910                  "members": [
6911                    {
6912                      "type": "SYMBOL",
6913                      "name": "struct_field"
6914                    },
6915                    {
6916                      "type": "REPEAT",
6917                      "content": {
6918                        "type": "SEQ",
6919                        "members": [
6920                          {
6921                            "type": "STRING",
6922                            "value": ","
6923                          },
6924                          {
6925                            "type": "SYMBOL",
6926                            "name": "struct_field"
6927                          }
6928                        ]
6929                      }
6930                    }
6931                  ]
6932                },
6933                {
6934                  "type": "CHOICE",
6935                  "members": [
6936                    {
6937                      "type": "STRING",
6938                      "value": ","
6939                    },
6940                    {
6941                      "type": "BLANK"
6942                    }
6943                  ]
6944                }
6945              ]
6946            },
6947            {
6948              "type": "BLANK"
6949            }
6950          ]
6951        },
6952        {
6953          "type": "STRING",
6954          "value": "}"
6955        }
6956      ]
6957    },
6958    "map": {
6959      "type": "SEQ",
6960      "members": [
6961        {
6962          "type": "STRING",
6963          "value": "map"
6964        },
6965        {
6966          "type": "STRING",
6967          "value": "["
6968        },
6969        {
6970          "type": "SYMBOL",
6971          "name": "type"
6972        },
6973        {
6974          "type": "STRING",
6975          "value": "]"
6976        },
6977        {
6978          "type": "SYMBOL",
6979          "name": "type"
6980        },
6981        {
6982          "type": "STRING",
6983          "value": "{"
6984        },
6985        {
6986          "type": "CHOICE",
6987          "members": [
6988            {
6989              "type": "SEQ",
6990              "members": [
6991                {
6992                  "type": "SEQ",
6993                  "members": [
6994                    {
6995                      "type": "SEQ",
6996                      "members": [
6997                        {
6998                          "type": "SYMBOL",
6999                          "name": "expression"
7000                        },
7001                        {
7002                          "type": "STRING",
7003                          "value": "="
7004                        },
7005                        {
7006                          "type": "SYMBOL",
7007                          "name": "expression"
7008                        }
7009                      ]
7010                    },
7011                    {
7012                      "type": "REPEAT",
7013                      "content": {
7014                        "type": "SEQ",
7015                        "members": [
7016                          {
7017                            "type": "STRING",
7018                            "value": ","
7019                          },
7020                          {
7021                            "type": "SEQ",
7022                            "members": [
7023                              {
7024                                "type": "SYMBOL",
7025                                "name": "expression"
7026                              },
7027                              {
7028                                "type": "STRING",
7029                                "value": "="
7030                              },
7031                              {
7032                                "type": "SYMBOL",
7033                                "name": "expression"
7034                              }
7035                            ]
7036                          }
7037                        ]
7038                      }
7039                    }
7040                  ]
7041                },
7042                {
7043                  "type": "CHOICE",
7044                  "members": [
7045                    {
7046                      "type": "STRING",
7047                      "value": ","
7048                    },
7049                    {
7050                      "type": "BLANK"
7051                    }
7052                  ]
7053                }
7054              ]
7055            },
7056            {
7057              "type": "BLANK"
7058            }
7059          ]
7060        },
7061        {
7062          "type": "STRING",
7063          "value": "}"
7064        }
7065      ]
7066    },
7067    "bit_set": {
7068      "type": "SEQ",
7069      "members": [
7070        {
7071          "type": "STRING",
7072          "value": "bit_set"
7073        },
7074        {
7075          "type": "STRING",
7076          "value": "["
7077        },
7078        {
7079          "type": "SYMBOL",
7080          "name": "expression"
7081        },
7082        {
7083          "type": "CHOICE",
7084          "members": [
7085            {
7086              "type": "SEQ",
7087              "members": [
7088                {
7089                  "type": "STRING",
7090                  "value": ";"
7091                },
7092                {
7093                  "type": "FIELD",
7094                  "name": "underlying_type",
7095                  "content": {
7096                    "type": "SYMBOL",
7097                    "name": "type"
7098                  }
7099                }
7100              ]
7101            },
7102            {
7103              "type": "BLANK"
7104            }
7105          ]
7106        },
7107        {
7108          "type": "STRING",
7109          "value": "]"
7110        },
7111        {
7112          "type": "STRING",
7113          "value": "{"
7114        },
7115        {
7116          "type": "CHOICE",
7117          "members": [
7118            {
7119              "type": "SEQ",
7120              "members": [
7121                {
7122                  "type": "SYMBOL",
7123                  "name": "expression"
7124                },
7125                {
7126                  "type": "REPEAT",
7127                  "content": {
7128                    "type": "SEQ",
7129                    "members": [
7130                      {
7131                        "type": "STRING",
7132                        "value": ","
7133                      },
7134                      {
7135                        "type": "SYMBOL",
7136                        "name": "expression"
7137                      }
7138                    ]
7139                  }
7140                }
7141              ]
7142            },
7143            {
7144              "type": "BLANK"
7145            }
7146          ]
7147        },
7148        {
7149          "type": "STRING",
7150          "value": "}"
7151        }
7152      ]
7153    },
7154    "matrix": {
7155      "type": "SEQ",
7156      "members": [
7157        {
7158          "type": "STRING",
7159          "value": "matrix"
7160        },
7161        {
7162          "type": "STRING",
7163          "value": "["
7164        },
7165        {
7166          "type": "SYMBOL",
7167          "name": "expression"
7168        },
7169        {
7170          "type": "STRING",
7171          "value": ","
7172        },
7173        {
7174          "type": "SYMBOL",
7175          "name": "expression"
7176        },
7177        {
7178          "type": "STRING",
7179          "value": "]"
7180        },
7181        {
7182          "type": "SYMBOL",
7183          "name": "type"
7184        },
7185        {
7186          "type": "STRING",
7187          "value": "{"
7188        },
7189        {
7190          "type": "CHOICE",
7191          "members": [
7192            {
7193              "type": "SEQ",
7194              "members": [
7195                {
7196                  "type": "SEQ",
7197                  "members": [
7198                    {
7199                      "type": "SYMBOL",
7200                      "name": "expression"
7201                    },
7202                    {
7203                      "type": "REPEAT",
7204                      "content": {
7205                        "type": "SEQ",
7206                        "members": [
7207                          {
7208                            "type": "STRING",
7209                            "value": ","
7210                          },
7211                          {
7212                            "type": "SYMBOL",
7213                            "name": "expression"
7214                          }
7215                        ]
7216                      }
7217                    }
7218                  ]
7219                },
7220                {
7221                  "type": "CHOICE",
7222                  "members": [
7223                    {
7224                      "type": "STRING",
7225                      "value": ","
7226                    },
7227                    {
7228                      "type": "BLANK"
7229                    }
7230                  ]
7231                }
7232              ]
7233            },
7234            {
7235              "type": "BLANK"
7236            }
7237          ]
7238        },
7239        {
7240          "type": "STRING",
7241          "value": "}"
7242        }
7243      ]
7244    },
7245    "struct_field": {
7246      "type": "PREC_RIGHT",
7247      "value": 0,
7248      "content": {
7249        "type": "SEQ",
7250        "members": [
7251          {
7252            "type": "SYMBOL",
7253            "name": "expression"
7254          },
7255          {
7256            "type": "CHOICE",
7257            "members": [
7258              {
7259                "type": "SEQ",
7260                "members": [
7261                  {
7262                    "type": "STRING",
7263                    "value": "="
7264                  },
7265                  {
7266                    "type": "CHOICE",
7267                    "members": [
7268                      {
7269                        "type": "SYMBOL",
7270                        "name": "expression"
7271                      },
7272                      {
7273                        "type": "SYMBOL",
7274                        "name": "_procedure_type"
7275                      }
7276                    ]
7277                  }
7278                ]
7279              },
7280              {
7281                "type": "BLANK"
7282              }
7283            ]
7284          }
7285        ]
7286      }
7287    },
7288    "number": {
7289      "type": "TOKEN",
7290      "content": {
7291        "type": "CHOICE",
7292        "members": [
7293          {
7294            "type": "SEQ",
7295            "members": [
7296              {
7297                "type": "CHOICE",
7298                "members": [
7299                  {
7300                    "type": "STRING",
7301                    "value": "-"
7302                  },
7303                  {
7304                    "type": "BLANK"
7305                  }
7306                ]
7307              },
7308              {
7309                "type": "PATTERN",
7310                "value": "[0-9][0-9_]*[ijk]?"
7311              }
7312            ]
7313          },
7314          {
7315            "type": "SEQ",
7316            "members": [
7317              {
7318                "type": "CHOICE",
7319                "members": [
7320                  {
7321                    "type": "STRING",
7322                    "value": "-"
7323                  },
7324                  {
7325                    "type": "BLANK"
7326                  }
7327                ]
7328              },
7329              {
7330                "type": "PATTERN",
7331                "value": "0[xh][0-9a-fA-F_]+[ijk]?"
7332              }
7333            ]
7334          },
7335          {
7336            "type": "SEQ",
7337            "members": [
7338              {
7339                "type": "CHOICE",
7340                "members": [
7341                  {
7342                    "type": "STRING",
7343                    "value": "-"
7344                  },
7345                  {
7346                    "type": "BLANK"
7347                  }
7348                ]
7349              },
7350              {
7351                "type": "PATTERN",
7352                "value": "0o[0-7][0-7]*[ijk]?"
7353              }
7354            ]
7355          },
7356          {
7357            "type": "SEQ",
7358            "members": [
7359              {
7360                "type": "CHOICE",
7361                "members": [
7362                  {
7363                    "type": "STRING",
7364                    "value": "-"
7365                  },
7366                  {
7367                    "type": "BLANK"
7368                  }
7369                ]
7370              },
7371              {
7372                "type": "PATTERN",
7373                "value": "0b[01][01_]*[ijk]?"
7374              }
7375            ]
7376          }
7377        ]
7378      }
7379    },
7380    "string": {
7381      "type": "CHOICE",
7382      "members": [
7383        {
7384          "type": "SYMBOL",
7385          "name": "_string_literal"
7386        },
7387        {
7388          "type": "SYMBOL",
7389          "name": "_raw_string_literal"
7390        }
7391      ]
7392    },
7393    "_string_literal": {
7394      "type": "SEQ",
7395      "members": [
7396        {
7397          "type": "STRING",
7398          "value": "\""
7399        },
7400        {
7401          "type": "REPEAT",
7402          "content": {
7403            "type": "CHOICE",
7404            "members": [
7405              {
7406                "type": "SYMBOL",
7407                "name": "string_content"
7408              },
7409              {
7410                "type": "SYMBOL",
7411                "name": "escape_sequence"
7412              }
7413            ]
7414          }
7415        },
7416        {
7417          "type": "STRING",
7418          "value": "\""
7419        }
7420      ]
7421    },
7422    "_raw_string_literal": {
7423      "type": "SEQ",
7424      "members": [
7425        {
7426          "type": "STRING",
7427          "value": "`"
7428        },
7429        {
7430          "type": "REPEAT",
7431          "content": {
7432            "type": "ALIAS",
7433            "content": {
7434              "type": "SYMBOL",
7435              "name": "_raw_string_content"
7436            },
7437            "named": true,
7438            "value": "string_content"
7439          }
7440        },
7441        {
7442          "type": "STRING",
7443          "value": "`"
7444        }
7445      ]
7446    },
7447    "character": {
7448      "type": "SEQ",
7449      "members": [
7450        {
7451          "type": "STRING",
7452          "value": "'"
7453        },
7454        {
7455          "type": "CHOICE",
7456          "members": [
7457            {
7458              "type": "PATTERN",
7459              "value": "[^'\\\\]"
7460            },
7461            {
7462              "type": "SYMBOL",
7463              "name": "escape_sequence"
7464            }
7465          ]
7466        },
7467        {
7468          "type": "STRING",
7469          "value": "'"
7470        }
7471      ]
7472    },
7473    "string_content": {
7474      "type": "IMMEDIATE_TOKEN",
7475      "content": {
7476        "type": "PREC",
7477        "value": 1,
7478        "content": {
7479          "type": "PATTERN",
7480          "value": "[^\"\\\\]+"
7481        }
7482      }
7483    },
7484    "_raw_string_content": {
7485      "type": "IMMEDIATE_TOKEN",
7486      "content": {
7487        "type": "PREC",
7488        "value": 1,
7489        "content": {
7490          "type": "PATTERN",
7491          "value": "[^`]+"
7492        }
7493      }
7494    },
7495    "_escape_sequence": {
7496      "type": "CHOICE",
7497      "members": [
7498        {
7499          "type": "PREC",
7500          "value": 2,
7501          "content": {
7502            "type": "IMMEDIATE_TOKEN",
7503            "content": {
7504              "type": "SEQ",
7505              "members": [
7506                {
7507                  "type": "STRING",
7508                  "value": "\\"
7509                },
7510                {
7511                  "type": "PATTERN",
7512                  "value": "[^abfnrtvxu'\\\"\\\\\\?]"
7513                }
7514              ]
7515            }
7516          }
7517        },
7518        {
7519          "type": "PREC",
7520          "value": 1,
7521          "content": {
7522            "type": "SYMBOL",
7523            "name": "escape_sequence"
7524          }
7525        }
7526      ]
7527    },
7528    "escape_sequence": {
7529      "type": "IMMEDIATE_TOKEN",
7530      "content": {
7531        "type": "SEQ",
7532        "members": [
7533          {
7534            "type": "STRING",
7535            "value": "\\"
7536          },
7537          {
7538            "type": "CHOICE",
7539            "members": [
7540              {
7541                "type": "PATTERN",
7542                "value": "[^xu0-7]"
7543              },
7544              {
7545                "type": "PATTERN",
7546                "value": "[0-7]{1,3}"
7547              },
7548              {
7549                "type": "PATTERN",
7550                "value": "x[0-9a-fA-F]{2}"
7551              },
7552              {
7553                "type": "PATTERN",
7554                "value": "u[0-9a-fA-F]{4}"
7555              },
7556              {
7557                "type": "PATTERN",
7558                "value": "u\\{[0-9a-fA-F]+\\}"
7559              },
7560              {
7561                "type": "PATTERN",
7562                "value": "U[0-9a-fA-F]{8}"
7563              }
7564            ]
7565          }
7566        ]
7567      }
7568    },
7569    "boolean": {
7570      "type": "CHOICE",
7571      "members": [
7572        {
7573          "type": "STRING",
7574          "value": "true"
7575        },
7576        {
7577          "type": "STRING",
7578          "value": "false"
7579        }
7580      ]
7581    },
7582    "nil": {
7583      "type": "STRING",
7584      "value": "nil"
7585    },
7586    "uninitialized": {
7587      "type": "STRING",
7588      "value": "---"
7589    },
7590    "tag": {
7591      "type": "TOKEN",
7592      "content": {
7593        "type": "SEQ",
7594        "members": [
7595          {
7596            "type": "PATTERN",
7597            "value": "#[a-zA-Z_][a-zA-Z0-9_]*"
7598          },
7599          {
7600            "type": "CHOICE",
7601            "members": [
7602              {
7603                "type": "SEQ",
7604                "members": [
7605                  {
7606                    "type": "STRING",
7607                    "value": "("
7608                  },
7609                  {
7610                    "type": "PATTERN",
7611                    "value": "\\w*"
7612                  },
7613                  {
7614                    "type": "STRING",
7615                    "value": ")"
7616                  }
7617                ]
7618              },
7619              {
7620                "type": "BLANK"
7621              }
7622            ]
7623          }
7624        ]
7625      }
7626    },
7627    "identifier": {
7628      "type": "PATTERN",
7629      "value": "[_\\p{XID_Start}][_\\p{XID_Continue}]*",
7630      "flags": "u"
7631    },
7632    "field_identifier": {
7633      "type": "PREC",
7634      "value": -1,
7635      "content": {
7636        "type": "SEQ",
7637        "members": [
7638          {
7639            "type": "SYMBOL",
7640            "name": "identifier"
7641          },
7642          {
7643            "type": "REPEAT1",
7644            "content": {
7645              "type": "SEQ",
7646              "members": [
7647                {
7648                  "type": "STRING",
7649                  "value": "."
7650                },
7651                {
7652                  "type": "SYMBOL",
7653                  "name": "identifier"
7654                }
7655              ]
7656            }
7657          }
7658        ]
7659      }
7660    },
7661    "keyword_identifier": {
7662      "type": "PREC",
7663      "value": -3,
7664      "content": {
7665        "type": "CHOICE",
7666        "members": [
7667          {
7668            "type": "STRING",
7669            "value": "nil"
7670          },
7671          {
7672            "type": "STRING",
7673            "value": "false"
7674          },
7675          {
7676            "type": "STRING",
7677            "value": "true"
7678          }
7679        ]
7680      }
7681    },
7682    "_separator": {
7683      "type": "CHOICE",
7684      "members": [
7685        {
7686          "type": "SYMBOL",
7687          "name": "_newline"
7688        },
7689        {
7690          "type": "STRING",
7691          "value": ";"
7692        }
7693      ]
7694    },
7695    "comment": {
7696      "type": "TOKEN",
7697      "content": {
7698        "type": "SEQ",
7699        "members": [
7700          {
7701            "type": "STRING",
7702            "value": "//"
7703          },
7704          {
7705            "type": "PATTERN",
7706            "value": "[^\\r\\n]*"
7707          }
7708        ]
7709      }
7710    }
7711  },
7712  "extras": [
7713    {
7714      "type": "SYMBOL",
7715      "name": "comment"
7716    },
7717    {
7718      "type": "SYMBOL",
7719      "name": "block_comment"
7720    },
7721    {
7722      "type": "PATTERN",
7723      "value": "\\s"
7724    },
7725    {
7726      "type": "SYMBOL",
7727      "name": "_backslash"
7728    }
7729  ],
7730  "conflicts": [
7731    [
7732      "array_type"
7733    ],
7734    [
7735      "_expression_no_tag",
7736      "struct"
7737    ]
7738  ],
7739  "precedences": [],
7740  "externals": [
7741    {
7742      "type": "SYMBOL",
7743      "name": "_newline"
7744    },
7745    {
7746      "type": "SYMBOL",
7747      "name": "_backslash"
7748    },
7749    {
7750      "type": "SYMBOL",
7751      "name": "_nl_comma"
7752    },
7753    {
7754      "type": "SYMBOL",
7755      "name": "float"
7756    },
7757    {
7758      "type": "SYMBOL",
7759      "name": "block_comment"
7760    },
7761    {
7762      "type": "STRING",
7763      "value": "{"
7764    },
7765    {
7766      "type": "STRING",
7767      "value": "\""
7768    }
7769  ],
7770  "inline": [],
7771  "supertypes": [
7772    "declaration",
7773    "expression",
7774    "literal",
7775    "statement"
7776  ]
7777}