xref: /llvm-project/mlir/utils/pygments/mlir_lexer.py (revision c7d237085bf9102ecf0c9105d8cc7fd94b752a3a)
1*c7d23708SOleksandr "Alex" Zinenko# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
2*c7d23708SOleksandr "Alex" Zinenko# See https://llvm.org/LICENSE.txt for license information.
3*c7d23708SOleksandr "Alex" Zinenko# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
4*c7d23708SOleksandr "Alex" Zinenko
5*c7d23708SOleksandr "Alex" Zinenkofrom pygments.lexer import RegexLexer
6*c7d23708SOleksandr "Alex" Zinenkofrom pygments.token import *
7*c7d23708SOleksandr "Alex" Zinenko
8*c7d23708SOleksandr "Alex" Zinenko
9*c7d23708SOleksandr "Alex" Zinenkoclass MlirLexer(RegexLexer):
10*c7d23708SOleksandr "Alex" Zinenko    name = "MLIR"
11*c7d23708SOleksandr "Alex" Zinenko    aliases = ["mlir"]
12*c7d23708SOleksandr "Alex" Zinenko    filenames = ["*.mlir"]
13*c7d23708SOleksandr "Alex" Zinenko
14*c7d23708SOleksandr "Alex" Zinenko    tokens = {
15*c7d23708SOleksandr "Alex" Zinenko        "root": [
16*c7d23708SOleksandr "Alex" Zinenko            (r"%[a-zA-Z0-9_]+", Name.Variable),
17*c7d23708SOleksandr "Alex" Zinenko            (r"@[a-zA-Z_][a-zA-Z0-9_]+", Name.Function),
18*c7d23708SOleksandr "Alex" Zinenko            (r"\^[a-zA-Z0-9_]+", Name.Label),
19*c7d23708SOleksandr "Alex" Zinenko            (r"#[a-zA-Z0-9_]+", Name.Constant),
20*c7d23708SOleksandr "Alex" Zinenko            (r"![a-zA-Z0-9_]+", Keyword.Type),
21*c7d23708SOleksandr "Alex" Zinenko            (r"[a-zA-Z_][a-zA-Z0-9_]*\.", Name.Entity),
22*c7d23708SOleksandr "Alex" Zinenko            (r"memref[^.]", Keyword.Type),
23*c7d23708SOleksandr "Alex" Zinenko            (r"index", Keyword.Type),
24*c7d23708SOleksandr "Alex" Zinenko            (r"i[0-9]+", Keyword.Type),
25*c7d23708SOleksandr "Alex" Zinenko            (r"f[0-9]+", Keyword.Type),
26*c7d23708SOleksandr "Alex" Zinenko            (r"[0-9]+", Number.Integer),
27*c7d23708SOleksandr "Alex" Zinenko            (r"[0-9]*\.[0-9]*", Number.Float),
28*c7d23708SOleksandr "Alex" Zinenko            (r'"[^"]*"', String.Double),
29*c7d23708SOleksandr "Alex" Zinenko            (r"affine_map", Keyword.Reserved),
30*c7d23708SOleksandr "Alex" Zinenko            # TODO: this should be within affine maps only
31*c7d23708SOleksandr "Alex" Zinenko            (r"\+-\*\/", Operator),
32*c7d23708SOleksandr "Alex" Zinenko            (r"floordiv", Operator.Word),
33*c7d23708SOleksandr "Alex" Zinenko            (r"ceildiv", Operator.Word),
34*c7d23708SOleksandr "Alex" Zinenko            (r"mod", Operator.Word),
35*c7d23708SOleksandr "Alex" Zinenko            (r"()\[\]<>,{}", Punctuation),
36*c7d23708SOleksandr "Alex" Zinenko            (r"\/\/.*\n", Comment.Single),
37*c7d23708SOleksandr "Alex" Zinenko        ]
38*c7d23708SOleksandr "Alex" Zinenko    }
39