{
"$schema": "https://tree-sitter.github.io/tree-sitter/assets/schemas/grammar.schema.json",
"name": "asm",
"rules": {
"program": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_item"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "STRING",
"value": "\n"
}
},
{
"type": "SYMBOL",
"name": "_item"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "REPEAT1",
"content": {
"type": "STRING",
"value": "\n"
}
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
"_item": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "meta"
},
{
"type": "SYMBOL",
"name": "label"
},
{
"type": "SYMBOL",
"name": "const"
},
{
"type": "SYMBOL",
"name": "instruction"
}
]
},
"meta": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "kind",
"content": {
"type": "SYMBOL",
"name": "meta_ident"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "int"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "int"
}
]
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "float"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "float"
}
]
}
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "string"
}
]
}
}
]
}
]
},
{
"type": "BLANK"
}
]
}
]
},
"label": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "meta_ident"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "word"
},
"named": true,
"value": "ident"
},
{
"type": "ALIAS",
"content": {
"type": "SYMBOL",
"name": "_ident"
},
"named": true,
"value": "ident"
}
]
},
{
"type": "STRING",
"value": ":"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "label"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "word"
}
}
]
}
]
},
"const": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "const"
},
{
"type": "FIELD",
"name": "name",
"content": {
"type": "SYMBOL",
"name": "word"
}
},
{
"type": "FIELD",
"name": "value",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
},
"instruction": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "kind",
"content": {
"type": "SYMBOL",
"name": "word"
}
},
{
"type": "CHOICE",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "SYMBOL",
"name": "_expr"
},
{
"type": "REPEAT",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "_expr"
}
]
}
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "BLANK"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
]
},
"_expr": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ptr"
},
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "int"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "float"
}
]
},
"ptr": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "byte"
},
{
"type": "STRING",
"value": "word"
},
{
"type": "STRING",
"value": "dword"
},
{
"type": "STRING",
"value": "qword"
}
]
},
{
"type": "STRING",
"value": "ptr"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "reg"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "+"
},
{
"type": "STRING",
"value": "-"
}
]
},
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "int"
},
{
"type": "SYMBOL",
"name": "ident"
}
]
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "int"
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "("
},
{
"type": "SYMBOL",
"name": "reg"
},
{
"type": "STRING",
"value": ")"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "*"
},
{
"type": "STRING",
"value": "rel"
},
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "int"
},
{
"type": "STRING",
"value": "]"
}
]
},
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "["
},
{
"type": "SYMBOL",
"name": "reg"
},
{
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": ","
},
{
"type": "SYMBOL",
"name": "int"
}
]
},
{
"type": "BLANK"
}
]
},
{
"type": "STRING",
"value": "]"
},
{
"type": "CHOICE",
"members": [
{
"type": "STRING",
"value": "!"
},
{
"type": "BLANK"
}
]
}
]
}
]
},
"_tc_expr": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "SYMBOL",
"name": "int"
},
{
"type": "SYMBOL",
"name": "string"
},
{
"type": "SYMBOL",
"name": "tc_infix"
}
]
},
"tc_infix": {
"type": "CHOICE",
"members": [
{
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "+"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "-"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "*"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "/"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 1,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "%"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 2,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "|"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 3,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "^"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
},
{
"type": "PREC_LEFT",
"value": 4,
"content": {
"type": "SEQ",
"members": [
{
"type": "FIELD",
"name": "lhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
},
{
"type": "FIELD",
"name": "op",
"content": {
"type": "STRING",
"value": "&"
}
},
{
"type": "FIELD",
"name": "rhs",
"content": {
"type": "SYMBOL",
"name": "_tc_expr"
}
}
]
}
}
]
},
"int": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": "-?([0-9][0-9_]*|(0x|\\$)[0-9A-Fa-f][0-9A-Fa-f_]*|0b[01][01_]*)"
}
}
]
},
{
"type": "PATTERN",
"value": "-?([0-9][0-9_]*|(0x|\\$)[0-9A-Fa-f][0-9A-Fa-f_]*|0b[01][01_]*)"
}
]
},
"float": {
"type": "PATTERN",
"value": "-?[0-9][0-9_]*\\.([0-9][0-9_]*)?"
},
"string": {
"type": "PATTERN",
"value": "\"[^\"]*\""
},
"word": {
"type": "PATTERN",
"value": "[a-zA-Z0-9_]+"
},
"_reg": {
"type": "PATTERN",
"value": "%?[a-z0-9]+"
},
"address": {
"type": "PATTERN",
"value": "\\$[a-zA-Z0-9_]+"
},
"reg": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_reg"
},
{
"type": "SYMBOL",
"name": "word"
},
{
"type": "SYMBOL",
"name": "address"
}
]
},
"meta_ident": {
"type": "PATTERN",
"value": "\\.[a-z_]+"
},
"_ident": {
"type": "PATTERN",
"value": "[a-zA-Z_0-9.]+"
},
"ident": {
"type": "CHOICE",
"members": [
{
"type": "SYMBOL",
"name": "_ident"
},
{
"type": "SYMBOL",
"name": "meta_ident"
},
{
"type": "SYMBOL",
"name": "reg"
}
]
},
"line_comment": {
"type": "CHOICE",
"members": [
{
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#"
},
{
"type": "IMMEDIATE_TOKEN",
"content": {
"type": "PATTERN",
"value": ".*"
}
}
]
},
{
"type": "PATTERN",
"value": "(\\/\\/|;).*"
}
]
},
"block_comment": {
"type": "TOKEN",
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "/*"
},
{
"type": "PATTERN",
"value": "[^*]*\\*+([^/*][^*]*\\*+)*"
},
{
"type": "STRING",
"value": "/"
}
]
}
}
},
"extras": [
{
"type": "PATTERN",
"value": " |\\t|\\r"
},
{
"type": "SYMBOL",
"name": "line_comment"
},
{
"type": "SYMBOL",
"name": "block_comment"
}
],
"conflicts": [
[
"_expr",
"_tc_expr"
]
],
"precedences": [],
"externals": [],
"inline": [],
"supertypes": []
}