1;;; mlir-mode.el --- Major mode for the MLIR assembler language. 2 3;; Copyright (C) 2019 The MLIR Authors. 4;; 5;; Licensed under the Apache License, Version 2.0 (the "License"); 6;; you may not use this file except in compliance with the License. 7;; You may obtain a copy of the License at 8;; 9;; http://www.apache.org/licenses/LICENSE-2.0 10;; 11;; Unless required by applicable law or agreed to in writing, software 12;; distributed under the License is distributed on an "AS IS" BASIS, 13;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14;; See the License for the specific language governing permissions and 15;; limitations under the License. 16 17;;; Commentary: 18 19;; Major mode for editing MLIR files. 20 21;;; Code: 22 23(defvar mlir-mode-syntax-table 24 (let ((table (make-syntax-table))) 25 (modify-syntax-entry ?% "_" table) 26 (modify-syntax-entry ?@ "_" table) 27 (modify-syntax-entry ?# "_" table) 28 (modify-syntax-entry ?. "_" table) 29 (modify-syntax-entry ?/ ". 12" table) 30 (modify-syntax-entry ?\n "> " table) 31 table) 32 "Syntax table used while in MLIR mode.") 33 34(defvar mlir-font-lock-keywords 35 (list 36 ;; Variables 37 '("%[-a-zA-Z$._0-9]*" . font-lock-variable-name-face) 38 ;; Functions 39 '("@[-a-zA-Z$._0-9]*" . font-lock-function-name-face) 40 ;; Affinemaps 41 '("#[-a-zA-Z$._0-9]*" . font-lock-variable-name-face) 42 ;; Types 43 '("\\b\\(f16\\|bf16\\|f32\\|f64\\|index\\|tf_control\\|i[1-9][0-9]*\\)\\b" . font-lock-type-face) 44 '("\\b\\(tensor\\|vector\\|memref\\)\\b" . font-lock-type-face) 45 ;; Dimension lists 46 '("\\b\\([0-9?]+x\\)*\\(f16\\|bf16\\|f32\\|f64\\|index\\|i[1-9][0-9]*\\)\\b" . font-lock-preprocessor-face) 47 ;; Integer literals 48 '("\\b[-]?[0-9]+\\b" . font-lock-preprocessor-face) 49 ;; Floating point constants 50 '("\\b[-+]?[0-9]+.[0-9]*\\([eE][-+]?[0-9]+\\)?\\b" . font-lock-preprocessor-face) 51 ;; Hex constants 52 '("\\b0x[0-9A-Fa-f]+\\b" . font-lock-preprocessor-face) 53 ;; Keywords 54 `(,(regexp-opt 55 '(;; Toplevel entities 56 "br" "ceildiv" "func" "cond_br" "else" "extfunc" "false" "floordiv" "for" "if" "mod" "return" "size" "step" "to" "true" "??" ) 'symbols) . font-lock-keyword-face)) 57 "Syntax highlighting for MLIR.") 58 59;; Emacs 23 compatibility. 60(defalias 'mlir-mode-prog-mode 61 (if (fboundp 'prog-mode) 62 'prog-mode 63 'fundamental-mode)) 64 65;;;###autoload 66(define-derived-mode mlir-mode mlir-mode-prog-mode "MLIR" 67 "Major mode for editing MLIR source files. 68\\{mlir-mode-map} 69 Runs `mlir-mode-hook' on startup." 70 (setq font-lock-defaults `(mlir-font-lock-keywords)) 71 (setq-local comment-start "//")) 72 73;; Associate .mlir files with mlir-mode 74;;;###autoload 75(add-to-list 'auto-mode-alist (cons "\\.mlir\\'" 'mlir-mode)) 76 77(provide 'mlir-mode) 78 79;;; mlir-mode.el ends here 80