mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-06-14 12:31:25 +00:00
* cedet/ede/system.el (ede-upload-html-documentation)
(ede-upload-distribution, ede-edit-web-page) (ede-web-browse-home): Autoload. * cedet/ede/proj-elisp.el: Add autoload for semantic-ede-proj-target-grammar. * cedet/semantic.el (navigate-menu): Show menu items only if semantic-mode is enabled. * cedet/ede.el: Remove comments. * cedet/cedet.el (cedet-menu-map): Minor doc fix. * cedet/semantic/grammar.el: * cedet/semantic/grammar-wy.el: * cedet/semantic/ede-grammar.el: New files. * cedet/semantic/db-mode.el (global-semanticdb-minor-mode): Define using define-minor-mode, so that the usual mode variable exists.
This commit is contained in:
parent
715f35a55d
commit
a2095e2edb
10 changed files with 2674 additions and 88 deletions
|
|
@ -1,3 +1,26 @@
|
|||
2009-09-27 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* cedet/ede/system.el (ede-upload-html-documentation)
|
||||
(ede-upload-distribution, ede-edit-web-page)
|
||||
(ede-web-browse-home): Autoload.
|
||||
|
||||
* cedet/ede/proj-elisp.el: Add autoload for
|
||||
semantic-ede-proj-target-grammar.
|
||||
|
||||
* cedet/semantic.el (navigate-menu): Show menu items only if
|
||||
semantic-mode is enabled.
|
||||
|
||||
* cedet/ede.el: Remove comments.
|
||||
|
||||
* cedet/cedet.el (cedet-menu-map): Minor doc fix.
|
||||
|
||||
* cedet/semantic/grammar.el:
|
||||
* cedet/semantic/grammar-wy.el:
|
||||
* cedet/semantic/ede-grammar.el: New files.
|
||||
|
||||
* cedet/semantic/db-mode.el (global-semanticdb-minor-mode): Define
|
||||
using define-minor-mode, so that the usual mode variable exists.
|
||||
|
||||
2009-09-27 Chong Yidong <cyd@stupidchicken.com>
|
||||
|
||||
* cedet/ede.el (global-ede-mode-map): Move menu to
|
||||
|
|
|
|||
|
|
@ -65,12 +65,12 @@
|
|||
(define-key map [global-semantic-idle-scheduler-mode] 'undefined)
|
||||
(define-key map [semantic-menu-separator] '("--"))
|
||||
(define-key map [semantic-mode]
|
||||
'(menu-item "Enable parsers (Semantic)" semantic-mode
|
||||
'(menu-item "Enable Parsers (Semantic)" semantic-mode
|
||||
:help "Enable language parsers (Semantic)"
|
||||
:visible (not (bound-and-true-p semantic-mode))))
|
||||
(define-key map [cedet-menu-separator] 'undefined)
|
||||
(define-key map [ede-mode]
|
||||
'(menu-item "Enable Projects (EDE)" global-ede-mode
|
||||
'(menu-item "Enable Project Support (EDE)" global-ede-mode
|
||||
:help "Enable the Emacs Development Environment (EDE)"
|
||||
:visible (not (bound-and-true-p global-ede-mode))))
|
||||
(define-key map [ede-menu-separator] '("--"))
|
||||
|
|
|
|||
|
|
@ -1981,18 +1981,6 @@ Display the results as a debug list."
|
|||
;; (def-edebug-spec ede-with-projectfile
|
||||
;; (form def-body))))
|
||||
|
||||
;; (autoload 'ede-web-browse-home "ede-system" t
|
||||
;; "Web browse this project's home page.")
|
||||
|
||||
;; (autoload 'ede-edit-web-page "ede-system" t
|
||||
;; "Edit the web site for this project.")
|
||||
|
||||
;; (autoload 'ede-upload-distribution "ede-system" t
|
||||
;; "Upload the dist for this project to the upload site.")
|
||||
|
||||
;; (autoload 'ede-upload-html-documentation "ede-system" t
|
||||
;; "Upload auto-generated HTML to the web site.")
|
||||
|
||||
(provide 'ede)
|
||||
|
||||
;; Include this last because it depends on ede.
|
||||
|
|
|
|||
|
|
@ -29,6 +29,8 @@
|
|||
(require 'ede/pmake)
|
||||
(require 'ede/pconf)
|
||||
|
||||
(autoload 'semantic-ede-proj-target-grammar "semantic/ede-grammar")
|
||||
|
||||
;;; Code:
|
||||
(defclass ede-proj-target-elisp (ede-proj-target-makefile)
|
||||
((menu :initform nil)
|
||||
|
|
|
|||
|
|
@ -31,7 +31,8 @@
|
|||
;;; Code:
|
||||
|
||||
;;; Web/FTP site node.
|
||||
;;
|
||||
|
||||
;;;###autoload
|
||||
(defun ede-web-browse-home ()
|
||||
"Browse the home page of the current project."
|
||||
(interactive)
|
||||
|
|
@ -44,7 +45,7 @@
|
|||
(browse-url home)
|
||||
))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun ede-edit-web-page ()
|
||||
"Edit the web site for this project."
|
||||
(interactive)
|
||||
|
|
@ -62,7 +63,7 @@
|
|||
(error "No project file found")))
|
||||
(find-file endfile)))
|
||||
|
||||
|
||||
;;;###autoload
|
||||
(defun ede-upload-distribution ()
|
||||
"Upload the current distribution to the correct location.
|
||||
Use /user@ftp.site.com: file names for FTP sites.
|
||||
|
|
@ -95,6 +96,7 @@ Download tramp, and use /r:machine: for names on remote sites w/out FTP access."
|
|||
(message "Done uploading files...")
|
||||
)
|
||||
|
||||
;;;###autoload
|
||||
(defun ede-upload-html-documentation ()
|
||||
"Upload the current distributions documentation as HTML.
|
||||
Use /user@ftp.site.com: file names for FTP sites.
|
||||
|
|
|
|||
|
|
@ -934,42 +934,47 @@ Throw away all the old tags, and recreate the tag database."
|
|||
;; Top level menu items:
|
||||
(define-key cedet-menu-map [semantic-force-refresh]
|
||||
'(menu-item "Reparse Buffer" semantic-force-refresh
|
||||
:help "Force a full reparse of the current buffer."))
|
||||
:help "Force a full reparse of the current buffer."
|
||||
:visible semantic-mode))
|
||||
(define-key cedet-menu-map [semantic-edit-menu]
|
||||
(cons "Edit Tags" edit-menu))
|
||||
`(menu-item "Edit Tags" ,edit-menu
|
||||
:visible semantic-mode))
|
||||
(define-key cedet-menu-map [navigate-menu]
|
||||
(cons "Navigate Tags" navigate-menu))
|
||||
`(menu-item "Navigate Tags" ,navigate-menu
|
||||
:visible semantic-mode))
|
||||
(define-key cedet-menu-map [semantic-options-separator]
|
||||
'("--"))
|
||||
(define-key cedet-menu-map [global-semantic-highlight-func-mode]
|
||||
(menu-bar-make-mm-toggle
|
||||
global-semantic-highlight-func-mode
|
||||
"Highlight Current Function"
|
||||
"Highlight the tag at point"))
|
||||
'(menu-item "Highlight Current Function" global-semantic-highlight-func-mode
|
||||
:help "Highlight the tag at point"
|
||||
:visible semantic-mode
|
||||
:button (:toggle . global-semantic-highlight-func-mode)))
|
||||
(define-key cedet-menu-map [global-semantic-decoration-mode]
|
||||
(menu-bar-make-mm-toggle
|
||||
global-semantic-decoration-mode
|
||||
"Decorate Tags"
|
||||
"Decorate tags based on various attributes"))
|
||||
'(menu-item "Decorate Tags" global-semantic-decoration-mode
|
||||
:help "Decorate tags based on tag attributes"
|
||||
:visible semantic-mode
|
||||
:button (:toggle . (bound-and-true-p
|
||||
global-semantic-decoration-mode))))
|
||||
(define-key cedet-menu-map [global-semantic-idle-completions-mode]
|
||||
(menu-bar-make-mm-toggle
|
||||
global-semantic-idle-completions-mode
|
||||
"Show Tag Completions"
|
||||
"Show tag completions when idle"))
|
||||
'(menu-item "Show Tag Completions" global-semantic-idle-completions-mode
|
||||
:help "Show tag completions when idle"
|
||||
:visible semantic-mode
|
||||
:button (:toggle . global-semantic-idle-completions-mode)))
|
||||
(define-key cedet-menu-map [global-semantic-idle-summary-mode]
|
||||
(menu-bar-make-mm-toggle
|
||||
global-semantic-idle-summary-mode
|
||||
"Show Tag Summaries"
|
||||
"Show tag summaries when idle"))
|
||||
'(menu-item "Show Tag Summaries" global-semantic-idle-summary-mode
|
||||
:help "Show tag summaries when idle"
|
||||
:visible semantic-mode
|
||||
:button (:toggle . global-semantic-idle-summary-mode)))
|
||||
(define-key cedet-menu-map [global-semanticdb-minor-mode]
|
||||
'(menu-item "Semantic Database" global-semanticdb-minor-mode
|
||||
:help "Store tag information in a database"
|
||||
:button (:toggle . (semanticdb-minor-mode-p))))
|
||||
:visible semantic-mode
|
||||
:button (:toggle . global-semanticdb-minor-mode)))
|
||||
(define-key cedet-menu-map [global-semantic-idle-scheduler-mode]
|
||||
(menu-bar-make-mm-toggle
|
||||
global-semantic-idle-scheduler-mode
|
||||
"Reparse When Idle"
|
||||
"Keep a buffer's parse tree up to date when idle"))
|
||||
'(menu-item "Reparse When Idle" global-semantic-idle-scheduler-mode
|
||||
:help "Keep a buffer's parse tree up to date when idle"
|
||||
:visible semantic-mode
|
||||
:button (:toggle . global-semantic-idle-scheduler-mode)))
|
||||
(define-key cedet-menu-map [ede-menu-separator] 'undefined)
|
||||
(define-key cedet-menu-map [cedet-menu-separator] 'undefined)
|
||||
(define-key cedet-menu-map [semantic-menu-separator] '("--")))
|
||||
|
|
@ -1064,7 +1069,6 @@ Semantic mode.
|
|||
(remove-hook 'html-mode-hook 'semantic-default-html-setup)
|
||||
|
||||
;; FIXME: handle semanticdb-load-ebrowse-caches
|
||||
|
||||
(dolist (mode semantic-submode-list)
|
||||
(if (and (boundp mode) (eval mode))
|
||||
(funcall mode -1)))))
|
||||
|
|
|
|||
|
|
@ -37,26 +37,6 @@
|
|||
|
||||
(declare-function semantic-lex-spp-set-dynamic-table "semantic/lex-spp")
|
||||
|
||||
(defcustom semanticdb-global-mode nil
|
||||
"*If non-nil enable the use of `semanticdb-minor-mode'."
|
||||
:group 'semantic
|
||||
:type 'boolean
|
||||
:require 'semantic/db
|
||||
:initialize 'custom-initialize-default
|
||||
:set (lambda (sym val)
|
||||
(global-semanticdb-minor-mode (if val 1 -1))
|
||||
(custom-set-default sym val)))
|
||||
|
||||
(defcustom semanticdb-mode-hook nil
|
||||
"Hook run whenever `global-semanticdb-minor-mode' is run.
|
||||
Use `semanticdb-minor-mode-p' to determine if the mode has been turned
|
||||
on or off."
|
||||
:group 'semanticdb
|
||||
:type 'hook)
|
||||
|
||||
(semantic-varalias-obsolete 'semanticdb-mode-hooks
|
||||
'semanticdb-mode-hook)
|
||||
|
||||
;;; Start/Stop database use
|
||||
;;
|
||||
(defvar semanticdb-hooks
|
||||
|
|
@ -80,32 +60,27 @@ on or off."
|
|||
(symbol-value (car (cdr (car semanticdb-hooks))))))
|
||||
|
||||
;;;###autoload
|
||||
(defun global-semanticdb-minor-mode (&optional arg)
|
||||
"Toggle the use of `semanticdb-minor-mode'.
|
||||
If ARG is positive, enable, if it is negative, disable.
|
||||
If ARG is nil, then toggle."
|
||||
(interactive "P")
|
||||
(if (not arg)
|
||||
(if (semanticdb-minor-mode-p)
|
||||
(setq arg -1)
|
||||
(setq arg 1)))
|
||||
(let ((fn 'add-hook)
|
||||
(h semanticdb-hooks)
|
||||
(changed nil))
|
||||
(if (< arg 0)
|
||||
(setq changed semanticdb-global-mode
|
||||
semanticdb-global-mode nil
|
||||
fn 'remove-hook)
|
||||
(setq changed (not semanticdb-global-mode)
|
||||
semanticdb-global-mode t))
|
||||
;(message "ARG = %d" arg)
|
||||
(when changed
|
||||
(while h
|
||||
(funcall fn (car (cdr (car h))) (car (car h)))
|
||||
(setq h (cdr h)))
|
||||
;; Call a hook
|
||||
(run-hooks 'semanticdb-mode-hook))
|
||||
))
|
||||
(define-minor-mode global-semanticdb-minor-mode
|
||||
"Toggle Semantic DB mode.
|
||||
With ARG, turn Semantic DB mode on if ARG is positive, off otherwise.
|
||||
|
||||
In Semantic DB mode, Semantic parsers store results in a
|
||||
database, which can be saved for future Emacs sessions."
|
||||
:global t
|
||||
:group 'semantic
|
||||
(if global-semanticdb-minor-mode
|
||||
;; Enable
|
||||
(dolist (elt semanticdb-hooks)
|
||||
(add-hook (cadr elt) (car elt)))
|
||||
;; Disable
|
||||
(dolist (elt semanticdb-hooks)
|
||||
(add-hook (cadr elt) (car elt)))))
|
||||
|
||||
(defvaralias 'semanticdb-mode-hook 'global-semanticdb-minor-mode-hook)
|
||||
(defvaralias 'semanticdb-global-mode 'global-semanticdb-minor-mode)
|
||||
(semantic-varalias-obsolete 'semanticdb-mode-hooks
|
||||
'global-semanticdb-minor-mode-hook)
|
||||
|
||||
|
||||
(defun semanticdb-toggle-global-mode ()
|
||||
"Toggle use of the Semantic Database feature.
|
||||
|
|
|
|||
202
lisp/cedet/semantic/ede-grammar.el
Normal file
202
lisp/cedet/semantic/ede-grammar.el
Normal file
|
|
@ -0,0 +1,202 @@
|
|||
;;; semantic/ede-grammar.el --- EDE support for Semantic Grammar Files
|
||||
|
||||
;;; Copyright (C) 2003, 2004, 2007, 2008, 2009 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: Eric M. Ludlam <zappo@gnu.org>
|
||||
;; Keywords: project, make
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; Handle .by or .wy files.
|
||||
|
||||
(require 'semantic)
|
||||
(require 'ede/proj)
|
||||
(require 'ede/pmake)
|
||||
(require 'ede/pconf)
|
||||
(require 'ede/proj-elisp)
|
||||
(require 'semantic/grammar)
|
||||
|
||||
;;; Code:
|
||||
(defclass semantic-ede-proj-target-grammar (ede-proj-target-makefile)
|
||||
((menu :initform nil)
|
||||
(keybindings :initform nil)
|
||||
(phony :initform t)
|
||||
(sourcetype :initform
|
||||
(semantic-ede-source-grammar-wisent
|
||||
semantic-ede-source-grammar-bovine
|
||||
))
|
||||
(availablecompilers :initform
|
||||
(semantic-ede-grammar-compiler-wisent
|
||||
semantic-ede-grammar-compiler-bovine
|
||||
))
|
||||
)
|
||||
"This target consists of a group of grammar files.
|
||||
A grammar target consists of grammar files that build Emacs Lisp programs for
|
||||
parsing different languages.")
|
||||
|
||||
(defvar semantic-ede-source-grammar-wisent
|
||||
(ede-sourcecode "semantic-ede-grammar-source-wisent"
|
||||
:name "Wisent Grammar"
|
||||
:sourcepattern "\\.wy$"
|
||||
)
|
||||
"Semantic Grammar source code definition for wisent.")
|
||||
|
||||
(defclass semantic-ede-grammar-compiler-class (ede-compiler)
|
||||
nil
|
||||
"Specialized compiler for semantic grammars.")
|
||||
|
||||
(defvar semantic-ede-grammar-compiler-wisent
|
||||
(semantic-ede-grammar-compiler-class
|
||||
"ede-emacs-wisent-compiler"
|
||||
:name "emacs"
|
||||
:variables '(("EMACS" . "emacs"))
|
||||
:commands
|
||||
'(
|
||||
"@echo \"(add-to-list 'load-path nil)\" > grammar-make-script"
|
||||
"@for loadpath in . ${LOADPATH}; do \\"
|
||||
" echo \"(add-to-list 'load-path \\\"$$loadpath\\\")\" >> grammar-make-script; \\"
|
||||
"done;"
|
||||
"@echo \"(require 'semantic-load)\" >> grammar-make-script"
|
||||
"@echo \"(require 'semantic-grammar)\" >> grammar-make-script"
|
||||
;; "@echo \"(setq debug-on-error t)\" >> grammar-make-script"
|
||||
"\"$(EMACS)\" -batch --no-site-file -l grammar-make-script -f semantic-grammar-batch-build-packages $^"
|
||||
)
|
||||
;; :autoconf '("AM_PATH_LISPDIR")
|
||||
:sourcetype '(semantic-ede-source-grammar-wisent)
|
||||
:objectextention "-wy.elc"
|
||||
)
|
||||
"Compile Emacs Lisp programs.")
|
||||
|
||||
|
||||
(defvar semantic-ede-source-grammar-bovine
|
||||
(ede-sourcecode "semantic-ede-grammar-source-bovine"
|
||||
:name "Bovine Grammar"
|
||||
:sourcepattern "\\.by$"
|
||||
)
|
||||
"Semantic Grammar source code definition for the bovinator.")
|
||||
|
||||
(defvar semantic-ede-grammar-compiler-bovine
|
||||
(semantic-ede-grammar-compiler-class
|
||||
"ede-emacs-wisent-compiler"
|
||||
:name "emacs"
|
||||
:variables '(("EMACS" . "emacs"))
|
||||
:commands
|
||||
'(
|
||||
"@echo \"(add-to-list 'load-path nil)\" > grammar-make-script"
|
||||
"@for loadpath in . ${LOADPATH}; do \\"
|
||||
" echo \"(add-to-list 'load-path \\\"$$loadpath\\\")\" >> grammar-make-script; \\"
|
||||
"done;"
|
||||
"@echo \"(require 'semantic-load)\" >> grammar-make-script"
|
||||
"@echo \"(require 'semantic-grammar)\" >> grammar-make-script"
|
||||
;; "@echo \"(setq debug-on-error t)\" >> grammar-make-script"
|
||||
"\"$(EMACS)\" -batch --no-site-file -l grammar-make-script -f semantic-grammar-batch-build-packages $^"
|
||||
)
|
||||
;; :autoconf '("AM_PATH_LISPDIR")
|
||||
:sourcetype '(semantic-ede-source-grammar-bovine)
|
||||
:objectextention "-by.elc"
|
||||
)
|
||||
"Compile Emacs Lisp programs.")
|
||||
|
||||
;;; Target options.
|
||||
(defmethod ede-buffer-mine ((this semantic-ede-proj-target-grammar) buffer)
|
||||
"Return t if object THIS lays claim to the file in BUFFER.
|
||||
Lays claim to all -by.el, and -wy.el files."
|
||||
;; We need to be a little more careful than this, but at the moment it
|
||||
;; is common to have only one target of this class per directory.
|
||||
(if (string-match "-[bw]y\\.elc?$" (buffer-file-name buffer))
|
||||
t
|
||||
(call-next-method) ; The usual thing.
|
||||
))
|
||||
|
||||
(defmethod project-compile-target ((obj semantic-ede-proj-target-grammar))
|
||||
"Compile all sources in a Lisp target OBJ."
|
||||
(let* ((cb (current-buffer))
|
||||
(proj (ede-target-parent obj))
|
||||
(default-directory (oref proj directory)))
|
||||
(mapc (lambda (src)
|
||||
(save-excursion
|
||||
(set-buffer (find-file-noselect src))
|
||||
(save-excursion
|
||||
(semantic-grammar-create-package))
|
||||
(save-buffer)
|
||||
(let ((cf (concat (semantic-grammar-package) ".el")))
|
||||
(if (or (not (file-exists-p cf))
|
||||
(file-newer-than-file-p src cf))
|
||||
(byte-compile-file cf)))))
|
||||
(oref obj source)))
|
||||
(message "All Semantic Grammar sources are up to date in %s" (object-name obj)))
|
||||
|
||||
;;; Makefile generation functions
|
||||
;;
|
||||
(defmethod ede-proj-makefile-sourcevar ((this semantic-ede-proj-target-grammar))
|
||||
"Return the variable name for THIS's sources."
|
||||
(cond ((ede-proj-automake-p)
|
||||
(error "No Automake support for Semantic Grammars"))
|
||||
(t (concat (ede-pmake-varname this) "_SEMANTIC_GRAMMAR"))))
|
||||
|
||||
(defmethod ede-proj-makefile-insert-variables :AFTER ((this semantic-ede-proj-target-grammar))
|
||||
"Insert variables needed by target THIS."
|
||||
(ede-proj-makefile-insert-loadpath-items
|
||||
(ede-proj-elisp-packages-to-loadpath
|
||||
(list "eieio" "semantic" "inversion" "ede")))
|
||||
;; eieio for object system needed in ede
|
||||
;; semantic because it is
|
||||
;; Inversion for versioning system.
|
||||
;; ede for project regeneration
|
||||
(ede-pmake-insert-variable-shared
|
||||
(concat (ede-pmake-varname this) "_SEMANTIC_GRAMMAR_EL")
|
||||
(insert
|
||||
(mapconcat (lambda (src)
|
||||
(save-excursion
|
||||
(set-buffer (find-file-noselect src))
|
||||
(concat (semantic-grammar-package) ".el")))
|
||||
(oref this source)
|
||||
" ")))
|
||||
)
|
||||
|
||||
(defmethod ede-proj-makefile-insert-rules ((this semantic-ede-proj-target-grammar))
|
||||
"Insert rules needed by THIS target."
|
||||
;; Add in some dependencies.
|
||||
;; (mapc (lambda (src)
|
||||
;; (let ((nm (file-name-sans-extension src)))
|
||||
;; (insert nm "-wy.el: " src "\n"
|
||||
;; nm "-wy.elc: " nm "-wy.el\n\n")
|
||||
;; ))
|
||||
;; (oref this source))
|
||||
;; Call the normal insertion of rules.
|
||||
(call-next-method)
|
||||
)
|
||||
|
||||
(defmethod ede-proj-makefile-insert-dist-dependencies ((this semantic-ede-proj-target-grammar))
|
||||
"Insert dist dependencies, or intermediate targets.
|
||||
This makes sure that all grammar lisp files are created before the dist
|
||||
runs, so they are always up to date.
|
||||
Argument THIS is the target that should insert stuff."
|
||||
(call-next-method)
|
||||
(insert " $(" (ede-pmake-varname this) "_SEMANTIC_GRAMMAR_EL)")
|
||||
)
|
||||
|
||||
;; (autoload 'ede-proj-target-elisp "ede/proj-elisp"
|
||||
;; "Target class for Emacs/Semantic grammar files." nil nil)
|
||||
|
||||
(ede-proj-register-target "semantic grammar"
|
||||
semantic-ede-proj-target-grammar)
|
||||
|
||||
(provide 'semantic/ede-grammar)
|
||||
|
||||
;;; semantic/ede-grammar.el ends here
|
||||
478
lisp/cedet/semantic/grammar-wy.el
Normal file
478
lisp/cedet/semantic/grammar-wy.el
Normal file
|
|
@ -0,0 +1,478 @@
|
|||
;;; semantic/grammar-wy.el --- Generated parser support file
|
||||
|
||||
;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
|
||||
|
||||
;; Author: David Ponce <david@dponce.com>
|
||||
;; Keywords: syntax
|
||||
|
||||
;; This file is part of GNU Emacs.
|
||||
|
||||
;; GNU Emacs is free software: you can redistribute it and/or modify
|
||||
;; it under the terms of the GNU General Public License as published by
|
||||
;; the Free Software Foundation, either version 3 of the License, or
|
||||
;; (at your option) any later version.
|
||||
|
||||
;; GNU Emacs is distributed in the hope that it will be useful,
|
||||
;; but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
;; GNU General Public License for more details.
|
||||
|
||||
;; You should have received a copy of the GNU General Public License
|
||||
;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
;;; Commentary:
|
||||
;;
|
||||
;; This file is generated from the grammar file semantic-grammar.wy in
|
||||
;; the upstream CEDET repository.
|
||||
|
||||
;;; Code:
|
||||
|
||||
(require 'semantic/lex)
|
||||
(defvar semantic-grammar-lex-c-char-re)
|
||||
|
||||
;; Current parsed nonterminal name.
|
||||
(defvar semantic-grammar-wy--nterm nil)
|
||||
;; Index of rule in a nonterminal clause.
|
||||
(defvar semantic-grammar-wy--rindx nil)
|
||||
|
||||
;;; Declarations
|
||||
;;
|
||||
(defconst semantic-grammar-wy--keyword-table
|
||||
(semantic-lex-make-keyword-table
|
||||
'(("%default-prec" . DEFAULT-PREC)
|
||||
("%no-default-prec" . NO-DEFAULT-PREC)
|
||||
("%keyword" . KEYWORD)
|
||||
("%languagemode" . LANGUAGEMODE)
|
||||
("%left" . LEFT)
|
||||
("%nonassoc" . NONASSOC)
|
||||
("%package" . PACKAGE)
|
||||
("%prec" . PREC)
|
||||
("%put" . PUT)
|
||||
("%quotemode" . QUOTEMODE)
|
||||
("%right" . RIGHT)
|
||||
("%scopestart" . SCOPESTART)
|
||||
("%start" . START)
|
||||
("%token" . TOKEN)
|
||||
("%type" . TYPE)
|
||||
("%use-macros" . USE-MACROS))
|
||||
'nil)
|
||||
"Table of language keywords.")
|
||||
|
||||
(defconst semantic-grammar-wy--token-table
|
||||
(semantic-lex-make-type-table
|
||||
'(("punctuation"
|
||||
(GT . ">")
|
||||
(LT . "<")
|
||||
(OR . "|")
|
||||
(SEMI . ";")
|
||||
(COLON . ":"))
|
||||
("close-paren"
|
||||
(RBRACE . "}")
|
||||
(RPAREN . ")"))
|
||||
("open-paren"
|
||||
(LBRACE . "{")
|
||||
(LPAREN . "("))
|
||||
("block"
|
||||
(BRACE_BLOCK . "(LBRACE RBRACE)")
|
||||
(PAREN_BLOCK . "(LPAREN RPAREN)"))
|
||||
("code"
|
||||
(EPILOGUE . "%%...EOF")
|
||||
(PROLOGUE . "%{...%}"))
|
||||
("sexp"
|
||||
(SEXP))
|
||||
("qlist"
|
||||
(PREFIXED_LIST))
|
||||
("char"
|
||||
(CHARACTER))
|
||||
("symbol"
|
||||
(PERCENT_PERCENT . "\\`%%\\'")
|
||||
(SYMBOL))
|
||||
("string"
|
||||
(STRING)))
|
||||
'(("punctuation" :declared t)
|
||||
("block" :declared t)
|
||||
("sexp" matchdatatype sexp)
|
||||
("sexp" syntax "\\=")
|
||||
("sexp" :declared t)
|
||||
("qlist" matchdatatype sexp)
|
||||
("qlist" syntax "\\s'\\s-*(")
|
||||
("qlist" :declared t)
|
||||
("char" syntax semantic-grammar-lex-c-char-re)
|
||||
("char" :declared t)
|
||||
("symbol" syntax ":?\\(\\sw\\|\\s_\\)+")
|
||||
("symbol" :declared t)
|
||||
("string" :declared t)
|
||||
("keyword" :declared t)))
|
||||
"Table of lexical tokens.")
|
||||
|
||||
(defconst semantic-grammar-wy--parse-table
|
||||
(progn
|
||||
(eval-when-compile
|
||||
(require 'semantic/wisent/comp))
|
||||
(wisent-compile-grammar
|
||||
'((DEFAULT-PREC NO-DEFAULT-PREC KEYWORD LANGUAGEMODE LEFT NONASSOC PACKAGE PREC PUT QUOTEMODE RIGHT SCOPESTART START TOKEN TYPE USE-MACROS STRING SYMBOL PERCENT_PERCENT CHARACTER PREFIXED_LIST SEXP PROLOGUE EPILOGUE PAREN_BLOCK BRACE_BLOCK LPAREN RPAREN LBRACE RBRACE COLON SEMI OR LT GT)
|
||||
nil
|
||||
(grammar
|
||||
((prologue))
|
||||
((epilogue))
|
||||
((declaration))
|
||||
((nonterminal))
|
||||
((PERCENT_PERCENT)))
|
||||
(prologue
|
||||
((PROLOGUE)
|
||||
(wisent-raw-tag
|
||||
(semantic-tag-new-code "prologue" nil))))
|
||||
(epilogue
|
||||
((EPILOGUE)
|
||||
(wisent-raw-tag
|
||||
(semantic-tag-new-code "epilogue" nil))))
|
||||
(declaration
|
||||
((decl)
|
||||
(eval $1)))
|
||||
(decl
|
||||
((default_prec_decl))
|
||||
((no_default_prec_decl))
|
||||
((languagemode_decl))
|
||||
((package_decl))
|
||||
((precedence_decl))
|
||||
((put_decl))
|
||||
((quotemode_decl))
|
||||
((scopestart_decl))
|
||||
((start_decl))
|
||||
((keyword_decl))
|
||||
((token_decl))
|
||||
((type_decl))
|
||||
((use_macros_decl)))
|
||||
(default_prec_decl
|
||||
((DEFAULT-PREC)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag "default-prec" 'assoc :value
|
||||
'("t")))))
|
||||
(no_default_prec_decl
|
||||
((NO-DEFAULT-PREC)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag "default-prec" 'assoc :value
|
||||
'("nil")))))
|
||||
(languagemode_decl
|
||||
((LANGUAGEMODE symbols)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',(car $2)
|
||||
'languagemode :rest ',(cdr $2)))))
|
||||
(package_decl
|
||||
((PACKAGE SYMBOL)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag-new-package ',$2 nil))))
|
||||
(precedence_decl
|
||||
((associativity token_type_opt items)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$1 'assoc :type ',$2 :value ',$3))))
|
||||
(associativity
|
||||
((LEFT)
|
||||
(progn "left"))
|
||||
((RIGHT)
|
||||
(progn "right"))
|
||||
((NONASSOC)
|
||||
(progn "nonassoc")))
|
||||
(put_decl
|
||||
((PUT put_name put_value)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$2 'put :value ',(list $3))))
|
||||
((PUT put_name put_value_list)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$2 'put :value ',$3)))
|
||||
((PUT put_name_list put_value)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',(car $2)
|
||||
'put :rest ',(cdr $2)
|
||||
:value ',(list $3))))
|
||||
((PUT put_name_list put_value_list)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',(car $2)
|
||||
'put :rest ',(cdr $2)
|
||||
:value ',$3))))
|
||||
(put_name_list
|
||||
((BRACE_BLOCK)
|
||||
(mapcar 'semantic-tag-name
|
||||
(semantic-parse-region
|
||||
(car $region1)
|
||||
(cdr $region1)
|
||||
'put_names 1))))
|
||||
(put_names
|
||||
((LBRACE)
|
||||
nil)
|
||||
((RBRACE)
|
||||
nil)
|
||||
((put_name)
|
||||
(wisent-raw-tag
|
||||
(semantic-tag $1 'put-name))))
|
||||
(put_name
|
||||
((SYMBOL))
|
||||
((token_type)))
|
||||
(put_value_list
|
||||
((BRACE_BLOCK)
|
||||
(mapcar 'semantic-tag-code-detail
|
||||
(semantic-parse-region
|
||||
(car $region1)
|
||||
(cdr $region1)
|
||||
'put_values 1))))
|
||||
(put_values
|
||||
((LBRACE)
|
||||
nil)
|
||||
((RBRACE)
|
||||
nil)
|
||||
((put_value)
|
||||
(wisent-raw-tag
|
||||
(semantic-tag-new-code "put-value" $1))))
|
||||
(put_value
|
||||
((SYMBOL any_value)
|
||||
(cons $1 $2)))
|
||||
(scopestart_decl
|
||||
((SCOPESTART SYMBOL)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$2 'scopestart))))
|
||||
(quotemode_decl
|
||||
((QUOTEMODE SYMBOL)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$2 'quotemode))))
|
||||
(start_decl
|
||||
((START symbols)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',(car $2)
|
||||
'start :rest ',(cdr $2)))))
|
||||
(keyword_decl
|
||||
((KEYWORD SYMBOL string_value)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$2 'keyword :value ',$3))))
|
||||
(token_decl
|
||||
((TOKEN token_type_opt SYMBOL string_value)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$3 ',(if $2 'token 'keyword)
|
||||
:type ',$2 :value ',$4)))
|
||||
((TOKEN token_type_opt symbols)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',(car $3)
|
||||
'token :type ',$2 :rest ',(cdr $3)))))
|
||||
(token_type_opt
|
||||
(nil)
|
||||
((token_type)))
|
||||
(token_type
|
||||
((LT SYMBOL GT)
|
||||
(progn $2)))
|
||||
(type_decl
|
||||
((TYPE token_type plist_opt)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag ',$2 'type :value ',$3))))
|
||||
(plist_opt
|
||||
(nil)
|
||||
((plist)))
|
||||
(plist
|
||||
((plist put_value)
|
||||
(append
|
||||
(list $2)
|
||||
$1))
|
||||
((put_value)
|
||||
(list $1)))
|
||||
(use_name_list
|
||||
((BRACE_BLOCK)
|
||||
(mapcar 'semantic-tag-name
|
||||
(semantic-parse-region
|
||||
(car $region1)
|
||||
(cdr $region1)
|
||||
'use_names 1))))
|
||||
(use_names
|
||||
((LBRACE)
|
||||
nil)
|
||||
((RBRACE)
|
||||
nil)
|
||||
((SYMBOL)
|
||||
(wisent-raw-tag
|
||||
(semantic-tag $1 'use-name))))
|
||||
(use_macros_decl
|
||||
((USE-MACROS SYMBOL use_name_list)
|
||||
`(wisent-raw-tag
|
||||
(semantic-tag "macro" 'macro :type ',$2 :value ',$3))))
|
||||
(string_value
|
||||
((STRING)
|
||||
(read $1)))
|
||||
(any_value
|
||||
((SYMBOL))
|
||||
((STRING))
|
||||
((PAREN_BLOCK))
|
||||
((PREFIXED_LIST))
|
||||
((SEXP)))
|
||||
(symbols
|
||||
((lifo_symbols)
|
||||
(nreverse $1)))
|
||||
(lifo_symbols
|
||||
((lifo_symbols SYMBOL)
|
||||
(cons $2 $1))
|
||||
((SYMBOL)
|
||||
(list $1)))
|
||||
(nonterminal
|
||||
((SYMBOL
|
||||
(setq semantic-grammar-wy--nterm $1 semantic-grammar-wy--rindx 0)
|
||||
COLON rules SEMI)
|
||||
(wisent-raw-tag
|
||||
(semantic-tag $1 'nonterminal :children $4))))
|
||||
(rules
|
||||
((lifo_rules)
|
||||
(apply 'nconc
|
||||
(nreverse $1))))
|
||||
(lifo_rules
|
||||
((lifo_rules OR rule)
|
||||
(cons $3 $1))
|
||||
((rule)
|
||||
(list $1)))
|
||||
(rule
|
||||
((rhs)
|
||||
(let*
|
||||
((nterm semantic-grammar-wy--nterm)
|
||||
(rindx semantic-grammar-wy--rindx)
|
||||
(rhs $1)
|
||||
comps prec action elt)
|
||||
(setq semantic-grammar-wy--rindx
|
||||
(1+ semantic-grammar-wy--rindx))
|
||||
(while rhs
|
||||
(setq elt
|
||||
(car rhs)
|
||||
rhs
|
||||
(cdr rhs))
|
||||
(cond
|
||||
((vectorp elt)
|
||||
(if prec
|
||||
(error "duplicate %%prec in `%s:%d' rule" nterm rindx))
|
||||
(setq prec
|
||||
(aref elt 0)))
|
||||
((consp elt)
|
||||
(if
|
||||
(or action comps)
|
||||
(setq comps
|
||||
(cons elt comps)
|
||||
semantic-grammar-wy--rindx
|
||||
(1+ semantic-grammar-wy--rindx))
|
||||
(setq action
|
||||
(car elt))))
|
||||
(t
|
||||
(setq comps
|
||||
(cons elt comps)))))
|
||||
(wisent-cook-tag
|
||||
(wisent-raw-tag
|
||||
(semantic-tag
|
||||
(format "%s:%d" nterm rindx)
|
||||
'rule :type
|
||||
(if comps "group" "empty")
|
||||
:value comps :prec prec :expr action))))))
|
||||
(rhs
|
||||
(nil)
|
||||
((rhs item)
|
||||
(cons $2 $1))
|
||||
((rhs action)
|
||||
(cons
|
||||
(list $2)
|
||||
$1))
|
||||
((rhs PREC item)
|
||||
(cons
|
||||
(vector $3)
|
||||
$1)))
|
||||
(action
|
||||
((PAREN_BLOCK))
|
||||
((PREFIXED_LIST))
|
||||
((BRACE_BLOCK)
|
||||
(format "(progn\n%s)"
|
||||
(let
|
||||
((s $1))
|
||||
(if
|
||||
(string-match "^{[
\n ]*" s)
|
||||
(setq s
|
||||
(substring s
|
||||
(match-end 0))))
|
||||
(if
|
||||
(string-match "[
\n ]*}$" s)
|
||||
(setq s
|
||||
(substring s 0
|
||||
(match-beginning 0))))
|
||||
s))))
|
||||
(items
|
||||
((lifo_items)
|
||||
(nreverse $1)))
|
||||
(lifo_items
|
||||
((lifo_items item)
|
||||
(cons $2 $1))
|
||||
((item)
|
||||
(list $1)))
|
||||
(item
|
||||
((SYMBOL))
|
||||
((CHARACTER))))
|
||||
'(grammar prologue epilogue declaration nonterminal rule put_names put_values use_names)))
|
||||
"Parser table.")
|
||||
|
||||
(defun semantic-grammar-wy--install-parser ()
|
||||
"Setup the Semantic Parser."
|
||||
(semantic-install-function-overrides
|
||||
'((parse-stream . wisent-parse-stream)))
|
||||
(setq semantic-parser-name "LALR"
|
||||
semantic--parse-table semantic-grammar-wy--parse-table
|
||||
semantic-debug-parser-source "semantic-grammar.wy"
|
||||
semantic-flex-keywords-obarray semantic-grammar-wy--keyword-table
|
||||
semantic-lex-types-obarray semantic-grammar-wy--token-table)
|
||||
;; Collect unmatched syntax lexical tokens
|
||||
(semantic-make-local-hook 'wisent-discarding-token-functions)
|
||||
(add-hook 'wisent-discarding-token-functions
|
||||
'wisent-collect-unmatched-syntax nil t))
|
||||
|
||||
|
||||
;;; Analyzers
|
||||
|
||||
(define-lex-sexp-type-analyzer semantic-grammar-wy--<sexp>-sexp-analyzer
|
||||
"sexp analyzer for <sexp> tokens."
|
||||
"\\="
|
||||
'SEXP)
|
||||
|
||||
(define-lex-sexp-type-analyzer semantic-grammar-wy--<qlist>-sexp-analyzer
|
||||
"sexp analyzer for <qlist> tokens."
|
||||
"\\s'\\s-*("
|
||||
'PREFIXED_LIST)
|
||||
|
||||
(define-lex-keyword-type-analyzer semantic-grammar-wy--<keyword>-keyword-analyzer
|
||||
"keyword analyzer for <keyword> tokens."
|
||||
"\\(\\sw\\|\\s_\\)+")
|
||||
|
||||
(define-lex-block-type-analyzer semantic-grammar-wy--<block>-block-analyzer
|
||||
"block analyzer for <block> tokens."
|
||||
"\\s(\\|\\s)"
|
||||
'((("(" LPAREN PAREN_BLOCK)
|
||||
("{" LBRACE BRACE_BLOCK))
|
||||
(")" RPAREN)
|
||||
("}" RBRACE))
|
||||
)
|
||||
|
||||
(define-lex-regex-type-analyzer semantic-grammar-wy--<char>-regexp-analyzer
|
||||
"regexp analyzer for <char> tokens."
|
||||
semantic-grammar-lex-c-char-re
|
||||
nil
|
||||
'CHARACTER)
|
||||
|
||||
(define-lex-sexp-type-analyzer semantic-grammar-wy--<string>-sexp-analyzer
|
||||
"sexp analyzer for <string> tokens."
|
||||
"\\s\""
|
||||
'STRING)
|
||||
|
||||
(define-lex-regex-type-analyzer semantic-grammar-wy--<symbol>-regexp-analyzer
|
||||
"regexp analyzer for <symbol> tokens."
|
||||
":?\\(\\sw\\|\\s_\\)+"
|
||||
'((PERCENT_PERCENT . "\\`%%\\'"))
|
||||
'SYMBOL)
|
||||
|
||||
(define-lex-string-type-analyzer semantic-grammar-wy--<punctuation>-string-analyzer
|
||||
"string analyzer for <punctuation> tokens."
|
||||
"\\(\\s.\\|\\s$\\|\\s'\\)+"
|
||||
'((GT . ">")
|
||||
(LT . "<")
|
||||
(OR . "|")
|
||||
(SEMI . ";")
|
||||
(COLON . ":"))
|
||||
'punctuation)
|
||||
|
||||
(provide 'semantic/grammar-wy)
|
||||
|
||||
;;; semantic/grammar-wy.el ends here
|
||||
1912
lisp/cedet/semantic/grammar.el
Normal file
1912
lisp/cedet/semantic/grammar.el
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue