--- /dev/null
+{
+ "name": "TableGen",
+ "fileTypes": [
+ "td"
+ ],
+ "patterns": [
+ {
+ "include": "#comments"
+ },
+ {
+ "include": "#preprocessor"
+ },
+ {
+ "include": "#strings"
+ },
+ {
+ "include": "#integer"
+ },
+ {
+ "include": "#builtin_types"
+ },
+ {
+ "include": "#keywords"
+ },
+ {
+ "include": "#classes"
+ },
+ {
+ "include": "#defs"
+ },
+ {
+ "include": "#values"
+ }
+ ],
+ "repository": {
+ "comments": {
+ "patterns": [
+ {
+ "match": "\/\/.*$",
+ "name": "comment.line.double-slash.tablegen"
+ },
+ {
+ "begin": "/\\*",
+ "end": "\\*/",
+ "captures": {
+ "0": {
+ "name": "comment.block.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#comments"
+ }
+ ],
+ "name": "comment.block.tablegen"
+ }
+ ]
+ },
+ "preprocessor": {
+ "patterns": [
+ {
+ "match": "^#ifdef\\s+(\\w+)",
+ "name": "keyword.control.ifdef.tablegen",
+ "captures": {
+ "1": {
+ "name": "entity.name.function.preprocessor.tablegen"
+ }
+ }
+ },
+ {
+ "match": "^#ifndef\\s+(\\w+)",
+ "name": "keyword.control.ifndef.tablegen",
+ "captures": {
+ "1": {
+ "name": "entity.name.function.preprocessor.tablegen"
+ }
+ }
+ },
+ {
+ "match": "^#else",
+ "name": "keyword.control.else.tablegen"
+ },
+ {
+ "match": "#endif",
+ "name": "keyword.control.endif.tablegen"
+ },
+ {
+ "match": "#define\\s+(\\w+)",
+ "name": "keyword.control.ifndef.tablegen",
+ "captures": {
+ "1": {
+ "name": "entity.name.function.preprocessor.tablegen"
+ }
+ }
+ },
+ {
+ "match": "^include\\s+",
+ "name": "keyword.control.include.tablegen"
+ }
+ ]
+ },
+ "strings": {
+ "patterns": [
+ {
+ "name": "string.quoted.double.tablegen",
+ "begin": "\"",
+ "end": "\"",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.begin.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "match": "\\\\['nt\"]",
+ "name": "constant.character.escape.tablegen"
+ }
+ ],
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.end.tablegen"
+ }
+ }
+ },
+ {
+ "name": "string.quoted.triple.tablegen",
+ "begin": "\\[{",
+ "end": "}]",
+ "beginCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.begin.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "match": "\\\\[nt\"]",
+ "name": "constant.character.escape.tablegen"
+ }
+ ],
+ "endCaptures": {
+ "0": {
+ "name": "punctuation.definition.string.end.tablegen"
+ }
+ }
+ }
+ ]
+ },
+ "integer": {
+ "patterns": [
+ {
+ "match": "\\b\\d+\\b",
+ "name": "constant.numeric.tablegen"
+ },
+ {
+ "match": "\\b0[xX][a-fA-F0-9]+\\b",
+ "name": "constant.numeric.hex.tablegen"
+ },
+ {
+ "match": "\\b0b[01]+\\b",
+ "name": "constant.numeric.binary.tablegen"
+ }
+ ]
+ },
+ "builtin_types": {
+ "patterns": [
+ {
+ "match": "\\b(?:bit|code|dag|int|string)\\b",
+ "name": "entity.name.type.tablegen"
+ },
+ {
+ "begin": "\\b(bits)\\<",
+ "beginCaptures": {
+ "1": {
+ "name": "entity.name.type.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#integer"
+ }
+ ],
+ "end": "\\>"
+ },
+ {
+ "begin": "\\b(list)\\<",
+ "beginCaptures": {
+ "1": {
+ "name": "entity.name.type.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#types"
+ }
+ ],
+ "end": "\\>"
+ }
+ ]
+ },
+ "types": {
+ "patterns": [
+ {
+ "include": "#builtin_types"
+ },
+ {
+ "match": "\\b(\\w+)\\b",
+ "name": "entity.name.type.tablegen"
+ }
+ ]
+ },
+ "bang_operators": {
+ "patterns": [
+ {
+ "begin": "(\\!cast|\\!getdagop|\\!isa)\\<",
+ "beginCaptures": {
+ "1": {
+ "name": "entity.name.function"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#types"
+ }
+ ],
+ "end": "\\>"
+ },
+ {
+ "match": "(\\!\\w+)\\b",
+ "name": "entity.name.function"
+ }
+ ]
+ },
+ "keywords": {
+ "patterns": [
+ {
+ "match": "\\b(assert|else|foreach|defset|defvar|field|if|in|let|then)\\b",
+ "name": "keyword.other.tablegen"
+ }
+ ]
+ },
+ "record_body": {
+ "patterns": [
+ {
+ "begin": "\\:",
+ "patterns": [
+ {
+ "match": "\\b(\\w+)\\b",
+ "name": "entity.name.type.tablegen"
+ },
+ {
+ "begin": "\\<",
+ "patterns": [
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "\\>"
+ }
+ ],
+ "end": "(?=\\;|\\{)"
+ },
+ {
+ "begin": "\\{",
+ "patterns": [
+ {
+ "include": "#keywords"
+ },
+ {
+ "include": "#builtin_types"
+ },
+ {
+ "match": "\\b(\\w+\\s+)?\\b(\\w+)\\b\\s+\\=",
+ "captures": {
+ "1": {
+ "name": "entity.name.type.tablegen"
+ },
+ "2": {
+ "name": "variable.other.tablegen"
+ }
+ }
+ },
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "(?=\\})"
+ }
+ ]
+ },
+ "classes": {
+ "begin": "\\b(multiclass|class)\\b\\s+(\\w+)\\b",
+ "beginCaptures": {
+ "1": {
+ "name": "keyword.other.class.tablegen"
+ },
+ "2": {
+ "name": "entity.name.type.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "begin": "\\<",
+ "patterns": [
+ {
+ "include": "#builtin_types"
+ },
+ {
+ "match": "\\b(\\w+\\s+)?\\b(\\w+)\\b",
+ "captures": {
+ "1": {
+ "name": "entity.name.type.tablegen"
+ },
+ "2": {
+ "name": "variable.other.tablegen"
+ }
+ }
+ },
+ {
+ "begin": "=",
+ "patterns": [
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "(?=\\>|\\,)"
+ }
+ ],
+ "end": "\\>"
+ },
+ {
+ "include": "#record_body"
+ }
+ ],
+ "end": "(\\;|\\})"
+ },
+ "defs": {
+ "begin": "\\b(defm|def)\\b",
+ "beginCaptures": {
+ "1": {
+ "name": "keyword.other.def.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#record_body"
+ },
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "(\\;|\\})"
+ },
+ "values": {
+ "patterns": [
+ {
+ "include": "#builtin_types"
+ },
+ {
+ "include": "#bang_operators"
+ },
+ {
+ "include": "#classes"
+ },
+ {
+ "include": "#defs"
+ },
+ {
+ "include": "#comments"
+ },
+ {
+ "include": "#integer"
+ },
+ {
+ "include": "#strings"
+ },
+ {
+ "match": "\\b(?:false|true)\\b",
+ "name": "keyword.other.tablegen"
+ },
+ {
+ "match": "(\\?)",
+ "name": "keyword.other.tablegen"
+ },
+ {
+ "begin": "\\{",
+ "patterns": [
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "\\}"
+ },
+ {
+ "begin": "\\[",
+ "patterns": [
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "(?=\\])"
+ },
+ {
+ "begin": "\\]\\s*\\<",
+ "patterns": [
+ {
+ "include": "#types"
+ }
+ ],
+ "end": "\\>"
+ },
+ {
+ "begin": "\\(",
+ "patterns": [
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "\\)"
+ },
+ {
+ "include": "#keywords"
+ },
+ {
+ "begin": "\\b(\\w+)\\<",
+ "beginCaptures": {
+ "1": {
+ "name": "entity.name.type.tablegen"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#values"
+ }
+ ],
+ "end": "\\>"
+ },
+ {
+ "match": "(\\$\\w+)\\b",
+ "name": "variable.other.enummember.tablegen"
+ },
+ {
+ "match": "\\b(\\w+)\\b",
+ "name": "variable.other.tablegen"
+ },
+ {
+ "include": "#preprocessor"
+ }
+ ]
+ }
+ },
+ "scopeName": "source.tablegen"
+}
\ No newline at end of file