Function: semantic-grammar-mode

semantic-grammar-mode is an interactive and byte-compiled function defined in grammar.el.gz.

Signature

(semantic-grammar-mode)

Documentation

Initialize a buffer for editing Semantic grammars.

% semantic-grammar-electric-punctuation
( semantic-grammar-electric-punctuation
) semantic-grammar-electric-punctuation
: semantic-grammar-electric-punctuation
; semantic-grammar-electric-punctuation
C-M-i semantic-grammar-complete
C-c C-c semantic-grammar-create-package
C-c i k semantic-grammar-insert-keyword
C-c m semantic-grammar-find-macro-expander
TAB semantic-grammar-indent
| semantic-grammar-electric-punctuation

This mode runs the hook semantic-grammar-mode-hook, as the final or penultimate step during initialization.

Key Bindings

Source Code

;; Defined in /usr/src/emacs/lisp/cedet/semantic/grammar.el.gz
(define-derived-mode semantic-grammar-mode
  fundamental-mode "Semantic Grammar Framework"
  "Initialize a buffer for editing Semantic grammars.

\\{semantic-grammar-mode-map}"
  (setq-local parse-sexp-ignore-comments t)
  (setq-local comment-start ";;")
  ;; Look within the line for a ; following an even number of backslashes
  ;; after either a non-backslash or the line beginning.
  (setq-local comment-start-skip
              "\\(\\(^\\|[^\\\n]\\)\\(\\\\\\\\\\)*\\);+ *")
  (setq-local indent-line-function #'semantic-grammar-indent)
  (setq-local fill-paragraph-function #'lisp-fill-paragraph)
  (setq-local font-lock-multiline 'undecided)
  (setq-local font-lock-defaults
              '((semantic-grammar-mode-keywords
                 semantic-grammar-mode-keywords-1
                 semantic-grammar-mode-keywords-2
                 semantic-grammar-mode-keywords-3)
                nil  ;; perform string/comment fontification
                nil  ;; keywords are case sensitive.
                ;; This puts _ & - as a word constituent,
                ;; simplifying our keywords significantly
                ((?_ . "w") (?- . "w"))))
  ;; Setup Semantic to parse grammar
  (semantic-grammar-wy--install-parser)
  (setq semantic-lex-comment-regex ";;"
        semantic-lex-analyzer #'semantic-grammar-lexer
        semantic-type-relation-separator-character '(":")
        semantic-symbol->name-assoc-list
        '(
          (code         . "Setup Code")
          (keyword      . "Keyword")
          (token        . "Token")
          (nonterminal  . "Nonterminal")
          (rule         . "Rule")
          ))
  (setq-local semantic-format-face-alist
              '((code         . default)
                (keyword      . font-lock-keyword-face)
                (token        . font-lock-type-face)
                (nonterminal  . font-lock-function-name-face)
                (rule         . default)))
  (setq-local semantic-stickyfunc-sticky-classes
              '(nonterminal))
  ;; Before each change, clear the cached regexp used to highlight
  ;; macros local in this grammar.
  (add-hook 'before-change-functions
            #'semantic--grammar-clear-macros-regexp-2 nil t)
  ;; Handle safe re-parse of grammar rules.
  (add-hook 'semantic-edits-new-change-functions
            #'semantic-grammar-edits-new-change-hook-fcn
            nil t))