{
  "name": "Terumi",
  "word": "word",
  "rules": {
    "code": {
      "type": "SEQ",
      "members": [
        {
          "type": "FIELD",
          "name": "use",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "use"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "FIELD",
          "name": "package",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "package"
              },
              {
                "type": "BLANK"
              }
            ]
          }
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SYMBOL",
            "name": "_top_level"
          }
        }
      ]
    },
    "use": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "use"
        },
        {
          "type": "SYMBOL",
          "name": "package_name"
        }
      ]
    },
    "package": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "package"
        },
        {
          "type": "SYMBOL",
          "name": "package_name"
        }
      ]
    },
    "package_name": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "word"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "STRING",
                "value": "."
              },
              {
                "type": "SYMBOL",
                "name": "word"
              }
            ]
          }
        }
      ]
    },
    "_top_level": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "class"
        },
        {
          "type": "SYMBOL",
          "name": "contract"
        },
        {
          "type": "SYMBOL",
          "name": "function"
        }
      ]
    },
    "contract": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "contract"
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "field_header"
                },
                {
                  "type": "SYMBOL",
                  "name": "function_header"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "class": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "SEQ",
        "members": [
          {
            "type": "STRING",
            "value": "class"
          },
          {
            "type": "FIELD",
            "name": "name",
            "content": {
              "type": "SYMBOL",
              "name": "identifier"
            }
          },
          {
            "type": "STRING",
            "value": "{"
          },
          {
            "type": "REPEAT",
            "content": {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "field"
                },
                {
                  "type": "SYMBOL",
                  "name": "function"
                }
              ]
            }
          },
          {
            "type": "STRING",
            "value": "}"
          }
        ]
      }
    },
    "field_header": {
      "type": "SYMBOL",
      "name": "_field_header"
    },
    "_field_header": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "SYMBOL",
          "name": "word"
        }
      ]
    },
    "field": {
      "type": "SYMBOL",
      "name": "_field_header"
    },
    "function_header": {
      "type": "SYMBOL",
      "name": "_function_header"
    },
    "_function_header": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_typed_function_header"
        },
        {
          "type": "SYMBOL",
          "name": "_untyped_function_header"
        }
      ]
    },
    "_typed_function_header": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "param"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "param"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "_untyped_function_header": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "identifier"
        },
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SEQ",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "param"
                },
                {
                  "type": "REPEAT",
                  "content": {
                    "type": "SEQ",
                    "members": [
                      {
                        "type": "STRING",
                        "value": ","
                      },
                      {
                        "type": "SYMBOL",
                        "name": "param"
                      }
                    ]
                  }
                }
              ]
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "function": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_function_header"
        },
        {
          "type": "STRING",
          "value": "{"
        },
        {
          "type": "STRING",
          "value": "}"
        }
      ]
    },
    "param": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_type"
        },
        {
          "type": "SYMBOL",
          "name": "word"
        }
      ]
    },
    "_type": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "type"
        },
        {
          "type": "SYMBOL",
          "name": "type_array"
        }
      ]
    },
    "type_array": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_identifier"
        },
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "type": {
      "type": "SYMBOL",
      "name": "_identifier"
    },
    "identifier": {
      "type": "SYMBOL",
      "name": "_identifier"
    },
    "_identifier": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "word"
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "SYMBOL",
              "name": "word"
            },
            {
              "type": "STRING",
              "value": "<"
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "_type"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "STRING",
                            "value": ","
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_type"
                          }
                        ]
                      }
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "STRING",
              "value": ">"
            }
          ]
        }
      ]
    },
    "word": {
      "type": "PATTERN",
      "value": "[A-Za-z_][A-Za-z0-9_]*"
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\s"
    }
  ],
  "conflicts": [],
  "externals": [],
  "inline": [],
  "supertypes": []
}

