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))
)
))
))