Function: ebnf-yac-lex
ebnf-yac-lex is a byte-compiled function defined in ebnf-yac.el.gz.
Signature
(ebnf-yac-lex)
Documentation
Lexical analyzer for Yacc/Bison.
Return a lexical token.
See documentation for variable ebnf-yac-lex(var)/ebnf-yac-lex(fun).
Source Code
;; Defined in /usr/src/emacs/lisp/progmodes/ebnf-yac.el.gz
(defun ebnf-yac-lex ()
"Lexical analyzer for Yacc/Bison.
Return a lexical token.
See documentation for variable `ebnf-yac-lex'."
(if (>= (point) ebnf-limit)
'end-of-input
(let (token)
;; skip spaces, code blocks and comments
(while (if (> (following-char) 255)
(progn
(setq token 'error)
nil)
(setq token (aref ebnf-yac-token-table (following-char)))
(cond
((or (eq token 'space)
(and ebnf-yac-skip-char
(eq token 'character)))
(ebnf-yac-skip-spaces))
((eq token 'yac-code)
(ebnf-yac-skip-code))
((eq token 'slash)
(ebnf-yac-handle-comment))
((eq token 'form-feed)
(forward-char)
(setq ebnf-action 'form-feed))
(t nil)
)))
(cond
;; end of input
((>= (point) ebnf-limit)
'end-of-input)
;; error
((eq token 'error)
(error "Invalid character"))
;; "string"
((eq token 'string)
(setq ebnf-yac-lex (ebnf-get-string))
'string)
;; terminal: 'char'
((eq token 'terminal)
(setq ebnf-yac-lex (ebnf-string " -&(-~" ?\' "terminal"))
'terminal)
;; non-terminal, terminal or "error"
((eq token 'non-terminal)
(setq ebnf-yac-lex (ebnf-buffer-substring "0-9A-Za-z_."))
(cond ((member ebnf-yac-lex ebnf-yac-token-list)
'terminal)
((string= ebnf-yac-lex "error")
(setq ebnf-yac-error t)
'yac-error)
(t
'non-terminal)
))
;; %% and Yacc pragmas (%TOKEN, %START, etc).
((eq token 'yac-pragma)
(forward-char)
(cond
;; Yacc separator
((eq (following-char) ?%)
(forward-char)
'yac-separator)
;; %TOKEN, %RIGHT, %LEFT, %PREC, %NONASSOC
((cdr (assoc (upcase (ebnf-buffer-substring "0-9A-Za-z_"))
'(("TOKEN" . yac-token)
("RIGHT" . yac-token)
("LEFT" . yac-token)
("NONASSOC" . yac-token)
("PREC" . yac-prec)))))
;; other Yacc pragmas
(t
'yac-pragma)
))
;; miscellaneous
(t
(forward-char)
token)
))))