{
  "name": "alv",
  "rules": {
    "source_file": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_sp"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "SEQ",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_expression"
              },
              {
                "type": "SYMBOL",
                "name": "_sp"
              }
            ]
          }
        }
      ]
    },
    "_wc": {
      "type": "PATTERN",
      "value": "[ \\t\\r\\n]"
    },
    "_sp": {
      "type": "SEQ",
      "members": [
        {
          "type": "REPEAT1",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "comment"
              },
              {
                "type": "SYMBOL",
                "name": "_wc"
              }
            ]
          }
        }
      ]
    },
    "_comment_contents": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_comment_contents"
              },
              {
                "type": "PATTERN",
                "value": "[^)]"
              }
            ]
          }
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    },
    "comment": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "#"
        },
        {
          "type": "SYMBOL",
          "name": "_comment_contents"
        }
      ]
    },
    "_first": {
      "type": "PATTERN",
      "value": "[a-zA-Z-_+*\\/\\.=~!?%]"
    },
    "_digit": {
      "type": "PATTERN",
      "value": "[0-9]"
    },
    "_int": {
      "type": "PREC",
      "value": 2,
      "content": {
        "type": "REPEAT1",
        "content": {
          "type": "SYMBOL",
          "name": "_digit"
        }
      }
    },
    "_float": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "REPEAT1",
              "content": {
                "type": "SYMBOL",
                "name": "_digit"
              }
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "SYMBOL",
                "name": "_digit"
              }
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "REPEAT",
              "content": {
                "type": "SYMBOL",
                "name": "_digit"
              }
            },
            {
              "type": "STRING",
              "value": "."
            },
            {
              "type": "REPEAT1",
              "content": {
                "type": "SYMBOL",
                "name": "_digit"
              }
            }
          ]
        }
      ]
    },
    "escape_char": {
      "type": "PATTERN",
      "value": "\\\\[\"'\\\\]"
    },
    "sym": {
      "type": "SEQ",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_first"
        },
        {
          "type": "REPEAT",
          "content": {
            "type": "CHOICE",
            "members": [
              {
                "type": "SYMBOL",
                "name": "_first"
              },
              {
                "type": "SYMBOL",
                "name": "_digit"
              }
            ]
          }
        }
      ]
    },
    "num": {
      "type": "SEQ",
      "members": [
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "STRING",
              "value": "-"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "_float"
            },
            {
              "type": "SYMBOL",
              "name": "_int"
            }
          ]
        }
      ]
    },
    "str": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "\""
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "escape_char"
                  },
                  {
                    "type": "PATTERN",
                    "value": "[^\"]"
                  }
                ]
              }
            },
            {
              "type": "STRING",
              "value": "\""
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "STRING",
              "value": "'"
            },
            {
              "type": "REPEAT",
              "content": {
                "type": "CHOICE",
                "members": [
                  {
                    "type": "SYMBOL",
                    "name": "escape_char"
                  },
                  {
                    "type": "PATTERN",
                    "value": "[^']"
                  }
                ]
              }
            },
            {
              "type": "STRING",
              "value": "'"
            }
          ]
        }
      ]
    },
    "_atom": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "sym"
        },
        {
          "type": "SYMBOL",
          "name": "num"
        },
        {
          "type": "SYMBOL",
          "name": "str"
        }
      ]
    },
    "_expression": {
      "type": "CHOICE",
      "members": [
        {
          "type": "SYMBOL",
          "name": "_atom"
        },
        {
          "type": "SYMBOL",
          "name": "cell"
        }
      ]
    },
    "tag": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "["
        },
        {
          "type": "REPEAT1",
          "content": {
            "type": "SYMBOL",
            "name": "_digit"
          }
        },
        {
          "type": "STRING",
          "value": "]"
        }
      ]
    },
    "head": {
      "type": "SYMBOL",
      "name": "_expression"
    },
    "cell": {
      "type": "SEQ",
      "members": [
        {
          "type": "STRING",
          "value": "("
        },
        {
          "type": "CHOICE",
          "members": [
            {
              "type": "SYMBOL",
              "name": "tag"
            },
            {
              "type": "BLANK"
            }
          ]
        },
        {
          "type": "SEQ",
          "members": [
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SYMBOL",
                  "name": "_sp"
                },
                {
                  "type": "BLANK"
                }
              ]
            },
            {
              "type": "CHOICE",
              "members": [
                {
                  "type": "SEQ",
                  "members": [
                    {
                      "type": "SYMBOL",
                      "name": "head"
                    },
                    {
                      "type": "REPEAT",
                      "content": {
                        "type": "SEQ",
                        "members": [
                          {
                            "type": "SYMBOL",
                            "name": "_sp"
                          },
                          {
                            "type": "SYMBOL",
                            "name": "_expression"
                          }
                        ]
                      }
                    },
                    {
                      "type": "CHOICE",
                      "members": [
                        {
                          "type": "SYMBOL",
                          "name": "_sp"
                        },
                        {
                          "type": "BLANK"
                        }
                      ]
                    }
                  ]
                },
                {
                  "type": "BLANK"
                }
              ]
            }
          ]
        },
        {
          "type": "STRING",
          "value": ")"
        }
      ]
    }
  },
  "extras": [
    {
      "type": "PATTERN",
      "value": "\\s"
    }
  ],
  "conflicts": [],
  "precedences": [],
  "externals": [],
  "inline": [],
  "supertypes": []
}

