{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "qbe",
"rules": {
"source_file": {
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "TYPEDEF"
},
{
"type": "SYMBOL",
"name": "DATADEF"
},
{
"type": "SYMBOL",
"name": "FUNCDEF"
},
{
"type": "SYMBOL",
"name": "COMMENT"
}
]
}
},
"TYPEDEF": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_regular_type"
},
{
"type": "SYMBOL",
"name": "_union_type"
},
{
"type": "SYMBOL",
"name": "_opaque_type"
}
]
},
"_regular_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "type"
},
{
"type": "SYMBOL",
"name": "AGGREGATE"
},
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_alignment"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "_types"
},
{
"type": "STRING",
"value": "}"
}
]
},
"FUNCDEF": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "LINKAGE"
},
{
"type": "STRING",
"value": "function"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ABITY"
},
{
"type": "BLANK"
}
]
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "GLOBAL"
}
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "FIELD",
"name": "params",
"content": {
"type": "SYMBOL",
"name": "FUNCDEF_PARAMS"
}
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "BLOCK"
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"FUNCDEF_PARAMS": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "FUNCDEF_PARAM"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "FUNCDEF_PARAM"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"FUNCDEF_PARAM": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "..."
},
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "type",
"content": {
"type": "SYMBOL",
"name": "ABITY"
}
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "LOCAL"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "env"
},
{
"type": "SYMBOL",
"name": "LOCAL"
}
]
}
]
},
"BLOCK": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "label",
"content": {
"type": "SYMBOL",
"name": "LABEL"
}
},
{
"type": "REPEAT",
"content": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "INST"
},
{
"type": "SYMBOL",
"name": "COMMENT"
}
]
}
}
]
},
"INST": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "assignment",
"content": {
"type": "SYMBOL",
"name": "LOCAL"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "ABITY"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "NORMAL_INST"
},
{
"type": "SYMBOL",
"name": "CALL_INST"
}
]
},
{
"type": "SYMBOL",
"name": "_newline"
}
]
},
"CALL_INST": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "call"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "LOCAL"
},
{
"type": "SYMBOL",
"name": "GLOBAL"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_call_params"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": ")"
}
]
},
"_call_params": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_call_param"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_call_param"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"_call_param": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "..."
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "ABITY"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "VAL"
},
{
"type": "SYMBOL",
"name": "GLOBAL"
}
]
}
]
}
]
},
"NORMAL_INST": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "IDENT"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_inst_args"
},
{
"type": "BLANK"
}
]
}
]
},
"_inst_args": {
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_inst_arg"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_inst_arg"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"_inst_arg": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "LABEL"
},
{
"type": "SYMBOL",
"name": "VAL"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "LABEL"
},
{
"type": "SYMBOL",
"name": "VAL"
}
]
}
]
},
"LOCAL": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "%"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "IDENT"
}
}
]
},
"LABEL": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "@"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "IDENT"
}
}
]
},
"GLOBAL": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "$"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "IDENT"
}
}
]
},
"AGGREGATE": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ":"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "IDENT"
}
}
]
},
"ABITY": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "BASETY"
},
{
"type": "SYMBOL",
"name": "SUBWTY"
},
{
"type": "SYMBOL",
"name": "AGGREGATE"
}
]
},
"_union_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "type"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "AGGREGATE"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_alignment"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "{"
},
{
"type": "REPEAT1",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "_types"
},
{
"type": "STRING",
"value": "}"
}
]
}
},
{
"type": "STRING",
"value": "}"
}
]
},
"_opaque_type": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "type"
},
{
"type": "SYMBOL",
"name": "AGGREGATE"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "_alignment"
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "NUMBER"
},
{
"type": "STRING",
"value": "}"
}
]
},
"_types": {
"type": "SEQ",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "SUBTY"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "NUMBER"
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "SUBTY"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "NUMBER"
},
{
"type": "BLANK"
}
]
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
"SUBTY": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "AGGREGATE"
},
{
"type": "SYMBOL",
"name": "EXTTY"
}
]
},
"SUBWTY": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "sb"
},
{
"type": "STRING",
"value": "ub"
},
{
"type": "STRING",
"value": "sh"
},
{
"type": "STRING",
"value": "uh"
}
]
},
"EXTTY": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "BASETY"
},
{
"type": "STRING",
"value": "b"
},
{
"type": "STRING",
"value": "h"
}
]
},
"BASETY": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "w"
},
{
"type": "STRING",
"value": "l"
},
{
"type": "STRING",
"value": "s"
},
{
"type": "STRING",
"value": "d"
}
]
},
"DATADEF": {
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "LINKAGE"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "data"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "GLOBAL"
}
},
{
"type": "STRING",
"value": "="
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_alignment"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "{"
},
{
"type": "SYMBOL",
"name": "_datadef_data"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_datadef_data"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "}"
}
]
},
"DATAITEM": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "GLOBAL"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "SYMBOL",
"name": "NUMBER"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SYMBOL",
"name": "STRING"
},
{
"type": "SYMBOL",
"name": "_dataitem_const"
}
]
},
"_dataitem_const": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "-"
},
{
"type": "BLANK"
}
]
},
{
"type": "SYMBOL",
"name": "NUMBER"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "s_"
},
{
"type": "SYMBOL",
"name": "FP"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "d_"
},
{
"type": "SYMBOL",
"name": "FP"
}
]
}
]
},
"DYNCONST": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_dataitem_const"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "thread"
},
{
"type": "SYMBOL",
"name": "GLOBAL"
}
]
}
]
},
"VAL": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "DYNCONST"
},
{
"type": "SYMBOL",
"name": "LOCAL"
}
]
},
"_datadef_data": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "EXTTY"
},
{
"type": "REPEAT1",
"content": {
"type": "SYMBOL",
"name": "DATAITEM"
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "z"
},
{
"type": "SYMBOL",
"name": "NUMBER"
}
]
}
]
},
"LINKAGE": {
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "export"
},
{
"type": "STRING",
"value": "thread"
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "section"
},
{
"type": "SYMBOL",
"name": "SECNAME"
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "SECFLAGS"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"SECNAME": {
"type": "SYMBOL",
"name": "STRING"
},
"SECFLAGS": {
"type": "SYMBOL",
"name": "STRING"
},
"_alignment": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "align"
},
{
"type": "FIELD",
"name": "alignment",
"content": {
"type": "SYMBOL",
"name": "NUMBER"
}
}
]
},
"COMMENT": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "PATTERN",
"value": ".*"
}
]
},
"STRING": {
"type": "PATTERN",
"value": "\"[^\"]*\""
},
"NUMBER": {
"type": "PATTERN",
"value": "[0-9]+"
},
"FP": {
"type": "PATTERN",
"value": "[0-9]+\\.?[0-9]*"
},
"IDENT": {
"type": "PATTERN",
"value": "[a-zA-Z\\.0-9_]+"
},
"_newline": {
"type": "PATTERN",
"value": "(\\r\\n|\\r|\\n)"
}
},
"extras": [
{
"type": "PATTERN",
"value": "\\s"
}
],
"conflicts": [],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": [],
"reserved": {}
}