diff options
author | Lars Ingebrigtsen <larsi@gnus.org> | 2019-06-18 16:05:08 +0200 |
---|---|---|
committer | Lars Ingebrigtsen <larsi@gnus.org> | 2019-06-18 16:05:08 +0200 |
commit | f21ec24524c705e18674a2e9e4db37b11fa3ebab (patch) | |
tree | 4d3f1ad27a88122e2e2a965dfd05edcdbb2e8a55 /lisp/cedet/semantic | |
parent | 90b44f336caf7d70721f44ac2497a38ff69d6c7d (diff) | |
download | emacs-f21ec24524c705e18674a2e9e4db37b11fa3ebab.tar.gz |
Add a mechanism to specify expected shift/reduce .wy conflicts
* admin/grammars/python.wy: Set the expected number of
shift/reduce conflicts to four.
* lisp/cedet/semantic/grammar.el
(semantic-grammar-expected-conflicts): New function.
* lisp/cedet/semantic/wisent/comp.el (wisent-total-conflicts): Use
it to suppress warnings about the expected number of shift/reduce
conflicts.
Diffstat (limited to 'lisp/cedet/semantic')
-rw-r--r-- | lisp/cedet/semantic/grammar.el | 9 | ||||
-rw-r--r-- | lisp/cedet/semantic/wisent/comp.el | 18 |
2 files changed, 19 insertions, 8 deletions
diff --git a/lisp/cedet/semantic/grammar.el b/lisp/cedet/semantic/grammar.el index 8ffa4c6d83e..39161420f98 100644 --- a/lisp/cedet/semantic/grammar.el +++ b/lisp/cedet/semantic/grammar.el @@ -277,6 +277,13 @@ foo.by it is foo-by." (i (string-match (format "\\([.]\\)%s\\'" ext) file))) (concat (substring file 0 i) "-" ext)))) +(defun semantic-grammar-expected-conflicts () + "Return the number of expected shift/reduce conflicts in the package." + (let ((conflicts (semantic-grammar-tag-symbols 'expectedconflicts))) + (if conflicts + (string-to-number conflicts) + 0))) + (defsubst semantic-grammar-languagemode () "Return the %languagemode value as a list of symbols or nil." (semantic-grammar-tag-symbols 'languagemode)) @@ -987,7 +994,7 @@ Return non-nil if there were no errors, nil if errors." (vc-handled-backends nil)) (setq semanticdb-new-database-class 'semanticdb-project-database) (semantic-mode 1) - (semantic-grammar-create-package))) + (semantic-grammar-create-package t))) (error (message "%s" (error-message-string err)) nil)))) diff --git a/lisp/cedet/semantic/wisent/comp.el b/lisp/cedet/semantic/wisent/comp.el index 051b898ed78..ff434f555da 100644 --- a/lisp/cedet/semantic/wisent/comp.el +++ b/lisp/cedet/semantic/wisent/comp.el @@ -2264,24 +2264,28 @@ there are any reduce/reduce conflicts." :group 'wisent :type '(choice (const nil) integer)) +(declare-function semantic-grammar-expected-conflicts "semantic/grammar") + (defun wisent-total-conflicts () "Report the total number of conflicts." + (require 'semantic/grammar) (unless (and (zerop rrc-total) (or (zerop src-total) (= src-total (or wisent-expected-conflicts 0)))) (let* ((src (wisent-source)) (src (if src (concat " in " src) "")) (msg (format "Grammar%s contains" src))) - (if (> src-total 0) - (setq msg (format "%s %d shift/reduce conflict%s" - msg src-total (if (> src-total 1) - "s" "")))) + (when (and (> src-total 0) + (not (= rrc-total (semantic-grammar-expected-conflicts)))) + (setq msg (format "%s %d shift/reduce conflict%s" + msg src-total (if (> src-total 1) + "s" "")))) (if (and (> src-total 0) (> rrc-total 0)) (setq msg (format "%s and" msg))) (if (> rrc-total 0) - (setq msg (format "%s %d reduce/reduce conflict%s" - msg rrc-total (if (> rrc-total 1) - "s" "")))) + (setq msg (format "%s %d reduce/reduce conflict%s" + msg rrc-total (if (> rrc-total 1) + "s" "")))) (message msg)))) (defun wisent-print-conflicts () |