tm-grammars
Version:
Collecton of TextMate grammars in JSON
292 lines (291 loc) • 8.95 kB
JSON
{
"displayName": "RISC-V",
"fileTypes": [
"S",
"s",
"riscv",
"asm"
],
"name": "riscv",
"patterns": [
{
"match": "\\b(la|lb|lh|lw|ld|nop|li|mv|not|negw??|sext\\.w|seqz|snez|sltz|sgtz|beqz|bnez|blez|bgez|bltz|bgtz?|ble|bgtu|bleu|j|jal|jr|ret|call|tail|fence|csr[crsw|]|csr[csw|]i)\\b",
"name": "support.function.pseudo.riscv"
},
{
"match": "\\b(addw??|auipc|lui|jalr|beq|bne|blt|bge|bltu|bgeu|lb|lh|lw|ld|lbu|lhu|sb|sh|sw|sd|addiw??|sltiu??|xori|ori|andi|slliw??|srliw??|sraiw??|subw??|sllw??|sltu??|xor|srlw??|sraw??|or|and|fence|fence\\.i|csrrw|csrrs|csrrc|csrrwi|csrrsi|csrrci)\\b",
"name": "support.function.riscv"
},
{
"match": "\\b(ecall|ebreak|sfence\\.vma|mret|sret|uret|wfi)\\b",
"name": "support.function.riscv.privileged"
},
{
"match": "\\b(mulh??|mulhsu|mulhu|divu??|remu??|mulw|divw|divuw|remw|remuw)\\b",
"name": "support.function.riscv.m"
},
{
"match": "\\b(c\\.(?:addi4spn|fld|lq|lw|flw|ld|fsd|sq|sw|fsw|sd|nop|addi|jal|addiw|li|addi16sp|lui|srli|srli64|srai|srai64|andi|sub|xor|or|and|subw|addw|j|beqz|bnez))\\b",
"name": "support.function.riscv.c"
},
{
"match": "\\b(lr\\.[dw|]|sc\\.[dw|]|amoswap\\.[dw|]|amoadd\\.[dw|]|amoxor\\.[dw|]|amoand\\.[dw|]|amoor\\.[dw|]|amomin\\.[dw|]|amomax\\.[dw|]|amominu\\.[dw|]|amomaxu\\.[dw|])\\b",
"name": "support.function.riscv.a"
},
{
"match": "\\b(f(?:lw|sw|madd\\.s|msub\\.s|nmsub\\.s|nmadd\\.s|add\\.s|sub\\.s|mul\\.s|div\\.s|sqrt\\.s|sgnj\\.s|sgnjn\\.s|sgnjx\\.s|min\\.s|max\\.s|cvt\\.w\\.s|cvt\\.wu\\.s|mv\\.x\\.w|eq\\.s|lt\\.s|le\\.s|class\\.s|cvt\\.s\\.wu??|mv\\.w\\.x|cvt\\.l\\.s|cvt\\.lu\\.s|cvt\\.s\\.lu??))\\b",
"name": "support.function.riscv.f"
},
{
"match": "\\b(f(?:ld|sd|madd\\.d|msub\\.d|nmsub\\.d|nmadd\\.d|add\\.d|sub\\.d|mul\\.d|div\\.d|sqrt\\.d|sgnj\\.d|sgnjn\\.d|sgnjx\\.d|min\\.d|max\\.d|cvt\\.s\\.d|cvt\\.d\\.s|eq\\.d|lt\\.d|le\\.d|class\\.d|cvt\\.w\\.d|cvt\\.wu\\.d|cvt\\.d\\.wu??|cvt\\.l\\.d|cvt\\.lu\\.d|mv\\.x\\.d|cvt\\.d\\.lu??|mv\\.d\\.x))\\b",
"name": "support.function.riscv.d"
},
{
"match": "\\.(skip|asciiz??|byte|[248|]byte|data|double|float|half|kdata|ktext|space|text|word|dword|dtprelword|dtpreldword|set\\s*(noat|at)|[su|]leb128|string|incbin|zero|rodata|comm|common)\\b",
"name": "storage.type.riscv"
},
{
"match": "\\.(balign|align|p2align|extern|globl|global|local|pushsection|section|bss|insn|option|type|equ|macro|endm|file|ident)\\b",
"name": "storage.modifier.riscv"
},
{
"captures": {
"1": {
"name": "entity.name.function.label.riscv"
}
},
"match": "\\b([0-9A-Z_a-z]+):",
"name": "meta.function.label.riscv"
},
{
"captures": {
"1": {
"name": "punctuation.definition.variable.riscv"
}
},
"match": "\\b(x([0-9]|1[0-9]|2[0-9]|3[01]))\\b",
"name": "variable.other.register.usable.by-number.riscv"
},
{
"captures": {
"1": {
"name": "punctuation.definition.variable.riscv"
}
},
"match": "\\b(zero|ra|sp|gp|tp|t[0-6]|a[0-7]|s[0-9]|fp|s1[01])\\b",
"name": "variable.other.register.usable.by-name.riscv"
},
{
"captures": {
"1": {
"name": "punctuation.definition.variable.riscv"
}
},
"match": "\\b(([hmsu]|vs)status|([hmsu]|vs)ie|([msu]|vs)tvec|([msu]|vs)scratch|([msu]|vs)epc|([msu]|vs)cause|([hmsu]|vs)tval|([hmsu]|vs)ip|fflags|frm|fcsr|m?cycleh?|timeh?|m?instreth?|m?hpmcounter([3-9]|[12][0-9]|3[01])h?|[hms][ei]deleg|[hms]counteren|v?satp|hgeie|hgeip|[hm]tinst|hvip|hgatp|htimedeltah?|mvendorid|marchid|mimpid|mhartid|misa|mstatush|mtval2|pmpcfg[0-3]|pmpaddr([0-9]|1[0-5])|mcountinhibit|mhpmevent([3-9]|[12][0-9]|3[01])|tselect|tdata[123]|dcsr|dpc|dscratch[01])\\b",
"name": "variable.other.csr.names.riscv"
},
{
"captures": {
"1": {
"name": "punctuation.definition.variable.riscv"
}
},
"match": "\\bf([0-9]|1[0-9]|2[0-9]|3[01])\\b",
"name": "variable.other.register.usable.floating-point.riscv"
},
{
"match": "\\b\\d+\\.\\d+\\b",
"name": "constant.numeric.float.riscv"
},
{
"match": "\\b(\\d+|0([Xx])\\h+)\\b",
"name": "constant.numeric.integer.riscv"
},
{
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.riscv"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.riscv"
}
},
"name": "string.quoted.double.riscv",
"patterns": [
{
"match": "\\\\[\"\\\\nrt]",
"name": "constant.character.escape.riscv"
}
]
},
{
"begin": "'",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.riscv"
}
},
"end": "'",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.riscv"
}
},
"name": "string.quoted.single.riscv",
"patterns": [
{
"match": "\\\\[\"\\\\nrt]",
"name": "constant.character.escape.riscv"
}
]
},
{
"begin": "/\\*",
"end": "\\*/",
"name": "comment.block"
},
{
"begin": "//",
"end": "\\n",
"name": "comment.line.double-slash"
},
{
"begin": "^\\s*#\\s*(define)\\s+((?<id>[A-Z_a-z][0-9A-Z_a-z]*))(?:(\\()(\\s*\\g<id>\\s*((,)\\s*\\g<id>\\s*)*(?:\\.\\.\\.)?)(\\)))?",
"beginCaptures": {
"1": {
"name": "keyword.control.import.define.c"
},
"2": {
"name": "entity.name.function.preprocessor.c"
},
"4": {
"name": "punctuation.definition.parameters.c"
},
"5": {
"name": "variable.parameter.preprocessor.c"
},
"7": {
"name": "punctuation.separator.parameters.c"
},
"8": {
"name": "punctuation.definition.parameters.c"
}
},
"end": "(?=/[*/])|$",
"name": "meta.preprocessor.macro.c",
"patterns": [
{
"match": "(?>\\\\\\s*\\n)",
"name": "punctuation.separator.continuation.c"
},
{
"include": "$base"
}
]
},
{
"begin": "^\\s*#\\s*(error|warning)\\b",
"captures": {
"1": {
"name": "keyword.control.import.error.c"
}
},
"end": "$",
"name": "meta.preprocessor.diagnostic.c",
"patterns": [
{
"match": "(?>\\\\\\s*\\n)",
"name": "punctuation.separator.continuation.c"
}
]
},
{
"begin": "^\\s*#\\s*(i(?:nclude|mport))\\b\\s+",
"captures": {
"1": {
"name": "keyword.control.import.include.c"
}
},
"end": "(?=/[*/])|$",
"name": "meta.preprocessor.c.include",
"patterns": [
{
"match": "(?>\\\\\\s*\\n)",
"name": "punctuation.separator.continuation.c"
},
{
"begin": "\"",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.c"
}
},
"end": "\"",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.c"
}
},
"name": "string.quoted.double.include.c"
},
{
"begin": "<",
"beginCaptures": {
"0": {
"name": "punctuation.definition.string.begin.c"
}
},
"end": ">",
"endCaptures": {
"0": {
"name": "punctuation.definition.string.end.c"
}
},
"name": "string.quoted.other.lt-gt.include.c"
}
]
},
{
"begin": "^\\s*#\\s*(defined??|elif|else|if|ifdef|ifndef|line|pragma|undef|endif)\\b",
"captures": {
"1": {
"name": "keyword.control.import.c"
}
},
"end": "(?=/[*/])|$",
"name": "meta.preprocessor.c",
"patterns": [
{
"match": "(?>\\\\\\s*\\n)",
"name": "punctuation.separator.continuation.c"
}
]
},
{
"begin": "(^[\\t ]+)?(?=#)",
"beginCaptures": {
"1": {
"name": "punctuation.whitespace.comment.leading.riscv"
}
},
"end": "(?!\\G)",
"patterns": [
{
"begin": "#|(//)",
"beginCaptures": {
"0": {
"name": "punctuation.definition.comment.riscv"
}
},
"end": "\\n",
"name": "comment.line.number-sign.riscv"
}
]
}
],
"scopeName": "source.riscv"
}