{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "streamdevice_proto",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "comment"
},
{
"type": "SYMBOL",
"name": "function"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "STRING",
"value": ";"
}
]
},
{
"type": "SYMBOL",
"name": "handler"
},
{
"type": "STRING",
"value": ";"
}
]
}
]
}
},
"comment": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
"assignment": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "variable_name"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "_value"
}
]
},
"variable_name": {
"type": "SYMBOL",
"name": "_identifier"
},
"variable": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "ALIAS",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z][\\w-]*"
}
},
"named": true,
"value": "variable_name"
}
]
},
"_value": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "keyword"
}
]
},
"keyword": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "error",
"flags": "i"
},
{
"type": "PATTERN",
"value": "ignore",
"flags": "i"
}
]
},
"function": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "function_name"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "command"
},
{
"type": "SYMBOL",
"name": "handler"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "assignment"
},
{
"type": "SYMBOL",
"name": "command"
},
{
"type": "SYMBOL",
"name": "handler"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"function_name": {
"type": "SYMBOL",
"name": "_identifier"
},
"command": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "command_name"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "_value"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "_value"
}
]
},
"command_name": {
"type": "SYMBOL",
"name": "_identifier"
},
"handler": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "SYMBOL",
"name": "handler_name"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "function_name"
},
{
"type": "SYMBOL",
"name": "command"
}
]
},
{
"type": "STRING",
"value": ";"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "function_name"
},
{
"type": "SYMBOL",
"name": "command"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"handler_name": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z][\\w-]*"
}
},
"string": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "ascii_name"
},
{
"type": "SYMBOL",
"name": "quoted_literal"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable"
},
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "SYMBOL",
"name": "ascii_name"
},
{
"type": "SYMBOL",
"name": "quoted_literal"
}
]
}
]
},
"quoted_literal": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_double_quoted_string"
},
{
"type": "SYMBOL",
"name": "_single_quoted_string"
}
]
},
"_double_quoted_string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\""
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "SYMBOL",
"name": "format_converter"
},
{
"type": "SYMBOL",
"name": "_quoted_string_text_fragment"
}
]
}
},
{
"type": "STRING",
"value": "\""
}
]
},
"_single_quoted_string": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "'"
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "SYMBOL",
"name": "format_converter"
},
{
"type": "SYMBOL",
"name": "_quoted_string_text_fragment2"
}
]
}
},
{
"type": "STRING",
"value": "'"
}
]
},
"_quoted_string_text_fragment": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^\"\\\\%]+"
}
},
"_quoted_string_text_fragment2": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[^'\\\\%]+"
}
},
"variable_expansion": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "\\$"
}
},
{
"type": "ALIAS",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z][\\w-]*"
}
},
{
"type": "PATTERN",
"value": "[1-9]"
}
]
},
"named": true,
"value": "variable_name"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "\\${"
}
},
{
"type": "ALIAS",
"content": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[a-zA-Z][\\w-]*"
}
},
{
"type": "PATTERN",
"value": "[1-9]"
}
]
},
"named": true,
"value": "variable_name"
},
{
"type": "STRING",
"value": "}"
}
]
}
]
},
"escape_sequence": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "\\\\[\"'%\\\\abtnre?_]"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "\\\\x[a-fA-F0-9]{1,2}"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "\\\\0[0-7]{1,3}"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "\\\\[1-9][0-9]{0,2}"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "%%"
}
}
]
},
"format_converter": {
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "%"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "("
}
},
{
"type": "SYMBOL",
"name": "format_inout"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ")"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "format_flag"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "width",
"content": {
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[0-9]+"
}
},
"named": true,
"value": "number"
},
{
"type": "BLANK"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "."
}
},
{
"type": "FIELD",
"name": "precision",
"content": {
"type": "ALIAS",
"content": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[0-9]+"
}
},
"named": true,
"value": "number"
}
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[feEgGdDiuoxXscbrRm]"
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "["
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "charset"
},
{
"type": "BLANK"
}
]
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "]"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "{"
}
},
{
"type": "SYMBOL",
"name": "format_enum"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "}"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "B"
}
},
{
"type": "SYMBOL",
"name": "_char"
},
{
"type": "SYMBOL",
"name": "_char"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "<"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "checksum_flag"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "checksum"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ">"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "/"
}
},
{
"type": "SYMBOL",
"name": "regex_pattern"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "/"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "#/"
}
},
{
"type": "SYMBOL",
"name": "regex_pattern"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "/"
}
},
{
"type": "SYMBOL",
"name": "regex_pattern"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "/"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "T"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "("
}
},
{
"type": "SYMBOL",
"name": "timeformat"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": ")"
}
}
]
}
]
}
]
},
"format_inout": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "field_name"
},
{
"type": "SYMBOL",
"name": "record_name"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "record_name"
},
{
"type": "STRING",
"value": "."
},
{
"type": "SYMBOL",
"name": "field_name"
}
]
}
]
},
"format_flag": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "STRING",
"value": "#"
}
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "[* +0?=!-]"
}
}
]
},
"charset": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "^"
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[^\\]]"
},
{
"type": "STRING",
"value": "\\]"
}
]
}
}
]
},
"format_enum": {
"type": "SEQ",
"members": [
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "enum_specifier"
},
{
"type": "STRING",
"value": "|"
}
]
}
},
{
"type": "SYMBOL",
"name": "enum_specifier"
}
]
},
"enum_specifier": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "enum_constant"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "number"
},
{
"type": "STRING",
"value": "?"
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"enum_constant": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "PATTERN",
"value": "\\w+"
}
]
}
},
"_char": {
"type": "CHOICE",
"members": [
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "."
}
},
{
"type": "SYMBOL",
"name": "escape_sequence"
}
]
},
"checksum_flag": {
"type": "PATTERN",
"value": "[0+-~]"
},
"checksum": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "variable_expansion"
},
{
"type": "SYMBOL",
"name": "_identifier"
}
]
}
},
"regex_pattern": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "PATTERN",
"value": "."
}
]
},
{
"type": "PATTERN",
"value": "[^\\]\\n\\\\]"
}
]
}
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "\\"
},
{
"type": "PATTERN",
"value": "."
}
]
},
{
"type": "PATTERN",
"value": "[^/\\\\\\[\\n]"
}
]
}
}
},
"timeformat": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "ALIAS",
"content": {
"type": "PATTERN",
"value": "[^)%]+"
},
"named": true,
"value": "thing"
},
{
"type": "SYMBOL",
"name": "time_conversion_spec"
}
]
}
},
"time_conversion_spec": {
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "%[EO_0^#.-]?\\d*[a-zA-Z+%]+"
}
},
"record_name": {
"type": "REPEAT1",
"content": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[\\w:]+"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "SYMBOL",
"name": "variable_expansion"
}
]
}
},
"field_name": {
"type": "REPEAT1",
"content": {
"type": "PREC",
"value": -1,
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_identifier"
},
{
"type": "SYMBOL",
"name": "escape_sequence"
},
{
"type": "SYMBOL",
"name": "variable_expansion"
}
]
}
}
},
"number": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "0x[A-F0-9]+",
"flags": "i"
},
{
"type": "PATTERN",
"value": "0[0-7]+"
},
{
"type": "PATTERN",
"value": "[0-9]+"
}
]
}
]
},
"ascii_name": {
"type": "CHOICE",
"members": [
{
"type": "PATTERN",
"value": "[A-Z][A-Z0-9]*",
"flags": "i"
},
{
"type": "STRING",
"value": "?"
}
]
},
"_identifier": {
"type": "PATTERN",
"value": "[a-zA-Z][\\w-]*"
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
},
{
"type": "SYMBOL",
"name": "comment"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}