Function: semantic-grammar-insert-defanalyzer

semantic-grammar-insert-defanalyzer is a byte-compiled function defined in grammar.el.gz.

Signature

(semantic-grammar-insert-defanalyzer TYPE)

Documentation

Insert declaration of the lexical analyzer defined with TYPE.

Source Code

;; Defined in /usr/src/emacs/lisp/cedet/semantic/grammar.el.gz
(defun semantic-grammar-insert-defanalyzer (type)
  "Insert declaration of the lexical analyzer defined with TYPE."
  (let* ((type-name  (symbol-name type))
         (type-value (symbol-value type))
         (syntax     (get type 'syntax))
         (declared   (get type :declared))
         spec mtype prefix name doc)
    ;; Generate an analyzer if the corresponding type has been
    ;; explicitly declared in a %type statement, and if at least the
    ;; syntax property has been provided.
    (when (and declared syntax)
      (setq prefix semantic--grammar-package
            mtype (or (get type 'matchdatatype) 'regexp)
            name (intern (format "%s--<%s>-%s-analyzer" prefix type mtype))
            doc (format "%s analyzer for <%s> tokens." mtype type))
      (cond
       ;; Regexp match analyzer
       ((eq mtype 'regexp)
        (semantic-grammar-insert-define
         `(define-lex-regex-type-analyzer ,name
            ,doc ,syntax
            ,(semantic-grammar-quoted-form (cdr type-value))
            ',(or (car type-value) (intern type-name))))
        )
       ;; String compare analyzer
       ((eq mtype 'string)
        (semantic-grammar-insert-define
         `(define-lex-string-type-analyzer ,name
            ,doc ,syntax
            ,(semantic-grammar-quoted-form (cdr type-value))
            ',(or (car type-value) (intern type-name))))
        )
       ;; Block analyzer
       ((and (eq mtype 'block)
             (setq spec (semantic-grammar--lex-block-specs)))
        (semantic-grammar-insert-define
         `(define-lex-block-type-analyzer ,name
            ,doc ,syntax
            ,(semantic-grammar-quoted-form spec)))
        )
       ;; Sexp analyzer
       ((eq mtype 'sexp)
        (semantic-grammar-insert-define
         `(define-lex-sexp-type-analyzer ,name
            ,doc ,syntax
            ',(or (car type-value) (intern type-name))))
        )
       ;; keyword analyzer
       ((eq mtype 'keyword)
        (semantic-grammar-insert-define
         `(define-lex-keyword-type-analyzer ,name
            ,doc ,syntax))
        )
       ))
    ))