]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't version-control generated file `grammat-wy.el`
authorStefan Monnier <monnier@iro.umontreal.ca>
Tue, 13 Apr 2021 01:55:50 +0000 (21:55 -0400)
committerStefan Monnier <monnier@iro.umontreal.ca>
Tue, 13 Apr 2021 02:10:38 +0000 (22:10 -0400)
This file is needed for CEDET's bootstrap, tho, so we now keep a copy of it
under version control in `gram-wy-boot.el`, very much like we do with
the `ldefs-boot.el` copy of `loaddefs.el`.

* lisp/cedet/semantic/grm-wy-boot.el: Rename from
`lisp/cedet/semantic/grammar-wy.el`.

* lisp/cedet/semantic/grammar.el: Load `grm-wy-boot.el` if
`grammar-wy.el` hasn't been generated yet.

* admin/update_autogen: Also refresh `grm-wy-boot.el`.

* admin/grammars/Makefile.in (WISENT): Add `grammar-wy.el` to the
generated files.

* .gitignore: Add `grammar-wy.el`.

.gitignore
admin/grammars/Makefile.in
admin/update_autogen
lisp/cedet/semantic/grammar-wy.el [deleted file]
lisp/cedet/semantic/grammar.el
lisp/cedet/semantic/grm-wy-boot.el [new file with mode: 0644]
lisp/emacs-lisp/eieio-base.el

index a1e3cb92f87f984cca27cbe5b456fee7300da875..c262f39126dd403ca9f9fe4cd89d7e076f119dde 100644 (file)
@@ -88,6 +88,7 @@ lisp/cedet/semantic/wisent/javat-wy.el
 lisp/cedet/semantic/wisent/js-wy.el
 lisp/cedet/semantic/wisent/python-wy.el
 lisp/cedet/srecode/srt-wy.el
+lisp/cedet/semantic/grammar-wy.el
 lisp/eshell/esh-groups.el
 lisp/finder-inf.el
 lisp/leim/ja-dic/
index 35ce55461f33cfb570d1d9290bfde28adea45279..4172411e0349c7aa146de9f554e59014dac0ad7c 100644 (file)
@@ -51,14 +51,11 @@ BOVINE = \
        ${bovinedir}/make-by.el \
        ${bovinedir}/scm-by.el
 
-## FIXME Should include this one too:
-##     ${cedetdir}/semantic/grammar-wy.el
-## but semantic/grammar.el (which is what we use to generate grammar-wy.el)
-## requires it!  https://debbugs.gnu.org/16008
-WISENT = \
-       ${wisentdir}/javat-wy.el \
-       ${wisentdir}/js-wy.el \
-       ${wisentdir}/python-wy.el \
+WISENT =                                  \
+       ${cedetdir}/semantic/grammar-wy.el \
+       ${wisentdir}/javat-wy.el           \
+       ${wisentdir}/js-wy.el              \
+       ${wisentdir}/python-wy.el          \
        ${cedetdir}/srecode/srt-wy.el
 
 ALL = ${BOVINE} ${WISENT}
index 35c391da19e3edb00edfd8037309c5b33984b269..11c4313ae37fbcd479a326553e339d0b5a0834a1 100755 (executable)
@@ -317,7 +317,7 @@ EOF
 echo "Finding loaddef targets..."
 
 find lisp -name '*.el' -exec grep '^;.*generated-autoload-file:' {} + | \
-    sed -e '/loaddefs\|esh-groups/d' -e 's|/[^/]*: "|/|' -e 's/"//g' \
+    sed -e '/loaddefs\|esh-groups/d' -e 's|/[^/]*: "|/|' -e 's/"//g'    \
     >| $tempfile || die "Error finding targets"
 
 genfiles=
@@ -363,17 +363,23 @@ make -C lisp "$@" autoloads EMACS=../src/bootstrap-emacs || die "make src error"
 
 
 ## Ignore comment differences.
-[ ! "$lboot_flag" ] || \
+[ ! "$lboot_flag" ] ||                      \
     diff -q -I '^;' $ldefs_in $ldefs_out || \
     cp $ldefs_in $ldefs_out || die "cp ldefs_boot error"
 
+# Refresh the prebuilt grammar-wy.el
+grammar_in=lisp/cedet/semantic/grammar-wy.el
+grammar_out=lisp/cedet/semantic/grm-wy-boot.el
+make -C admin/grammars/ ../../$grammar_in
+cp $grammar_in $grammar_out || die "cp grm_wy_boot error"
+
 
 echo "Checking status of loaddef files..."
 
 ## It probably would be fine to just check+commit lisp/, since
 ## making autoloads should not effect any other files.  But better
 ## safe than sorry.
-modified=$(status $genfiles $ldefs_out) || die
+modified=$(status $genfiles $ldefs_out $grammar_out) || die
 
 
 commit "loaddefs" $modified || die "commit error"
diff --git a/lisp/cedet/semantic/grammar-wy.el b/lisp/cedet/semantic/grammar-wy.el
deleted file mode 100644 (file)
index b301403..0000000
+++ /dev/null
@@ -1,503 +0,0 @@
-;;; semantic/grammar-wy.el --- Generated parser support file  -*- lexical-binding:t -*-
-
-;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
-
-;; 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 <https://www.gnu.org/licenses/>.
-
-;;; Commentary:
-;;
-;; This file was generated from admin/grammars/grammar.wy.
-
-;;; Code:
-
-(require 'semantic/lex)
-(require 'semantic/wisent)
-\f
-;;; Prologue
-;;
-(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)
-\f
-;;; Declarations
-;;
-(eval-and-compile (defconst semantic-grammar-wy--expected-conflicts
-                    nil
-                    "The number of expected shift/reduce conflicts in this grammar."))
-
-(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)
-     ("%expectedconflicts" . EXPECTEDCONFLICTS)
-     ("%provide" . PROVIDE)
-     ("%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
-  (wisent-compiled-grammar
-   ((DEFAULT-PREC NO-DEFAULT-PREC KEYWORD LANGUAGEMODE LEFT NONASSOC PACKAGE EXPECTEDCONFLICTS PROVIDE 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 t)))
-    (decl
-     ((default_prec_decl))
-     ((no_default_prec_decl))
-     ((languagemode_decl))
-     ((package_decl))
-     ((expectedconflicts_decl))
-     ((provide_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))))
-    (expectedconflicts_decl
-     ((EXPECTEDCONFLICTS symbols)
-      `(wisent-raw-tag
-        (semantic-tag ',(car $2)
-                     'expectedconflicts :rest ',(cdr $2)))))
-    (provide_decl
-     ((PROVIDE SYMBOL)
-      `(wisent-raw-tag
-        (semantic-tag ',$2 'provide))))
-    (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 "^{[\r\n        ]*" s)
-                   (setq s
-                         (substring s
-                                    (match-end 0))))
-               (if
-                   (string-match "[\r\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
-   '((semantic-parse-stream . wisent-parse-stream)))
-  (setq semantic-parser-name "LALR"
-        semantic--parse-table semantic-grammar-wy--parse-table
-        semantic-debug-parser-source "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
-  (add-hook 'wisent-discarding-token-functions
-            #'wisent-collect-unmatched-syntax nil t))
-
-\f
-;;; Analyzers
-;;
-(define-lex-regex-type-analyzer semantic-grammar-wy--<symbol>-regexp-analyzer
-  "regexp analyzer for <symbol> tokens."
-  ":?\\(\\sw\\|\\s_\\)+"
-  '((PERCENT_PERCENT . "\\`%%\\'"))
-  'SYMBOL)
-
-(define-lex-keyword-type-analyzer semantic-grammar-wy--<keyword>-keyword-analyzer
-  "keyword analyzer for <keyword> tokens."
-  "\\(\\sw\\|\\s_\\)+")
-
-(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--<qlist>-sexp-analyzer
-  "sexp analyzer for <qlist> tokens."
-  "\\s'\\s-*("
-  'PREFIXED_LIST)
-
-(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-string-type-analyzer semantic-grammar-wy--<punctuation>-string-analyzer
-  "string analyzer for <punctuation> tokens."
-  "\\(\\s.\\|\\s$\\|\\s'\\)+"
-  '((GT . ">")
-    (LT . "<")
-    (OR . "|")
-    (SEMI . ";")
-    (COLON . ":"))
-  'punctuation)
-
-(define-lex-sexp-type-analyzer semantic-grammar-wy--<string>-sexp-analyzer
-  "sexp analyzer for <string> tokens."
-  "\\s\""
-  'STRING)
-
-(define-lex-sexp-type-analyzer semantic-grammar-wy--<sexp>-sexp-analyzer
-  "sexp analyzer for <sexp> tokens."
-  "\\="
-  'SEXP)
-
-\f
-;;; Epilogue
-;;
-
-
-
-
-(provide 'semantic/grammar-wy)
-
-;; Local Variables:
-;; version-control: never
-;; no-update-autoloads: t
-;; End:
-
-;;; semantic/grammar-wy.el ends here
index dba289fdd75560bc2284ee1ce8c3fc9ec599384b..4c3bb6c238b51c2b5d94a308f5763fdc00314dbb 100644 (file)
 (require 'semantic/format)
 ;; FIXME this is a generated file, but we need to load this file to
 ;; generate it!
-(require 'semantic/grammar-wy)
+;; We need `semantic/grammar-wy.el' but we're also needed to generate
+;; that file from `grammar.wy', so to break the dependency, we keep
+;; a bootstrap copy of `grammar-wy.el' in `grm-wy-boot.el'.  See bug#16008.
+(eval-and-compile
+  (unless (require 'semantic/grammar-wy nil t)
+    (load "semantic/grm-wy-boot")))
 (require 'semantic/idle)
 (require 'help-fns)
 (require 'semantic/analyze)
diff --git a/lisp/cedet/semantic/grm-wy-boot.el b/lisp/cedet/semantic/grm-wy-boot.el
new file mode 100644 (file)
index 0000000..b301403
--- /dev/null
@@ -0,0 +1,503 @@
+;;; semantic/grammar-wy.el --- Generated parser support file  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
+
+;; 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 <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; This file was generated from admin/grammars/grammar.wy.
+
+;;; Code:
+
+(require 'semantic/lex)
+(require 'semantic/wisent)
+\f
+;;; Prologue
+;;
+(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)
+\f
+;;; Declarations
+;;
+(eval-and-compile (defconst semantic-grammar-wy--expected-conflicts
+                    nil
+                    "The number of expected shift/reduce conflicts in this grammar."))
+
+(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)
+     ("%expectedconflicts" . EXPECTEDCONFLICTS)
+     ("%provide" . PROVIDE)
+     ("%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
+  (wisent-compiled-grammar
+   ((DEFAULT-PREC NO-DEFAULT-PREC KEYWORD LANGUAGEMODE LEFT NONASSOC PACKAGE EXPECTEDCONFLICTS PROVIDE 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 t)))
+    (decl
+     ((default_prec_decl))
+     ((no_default_prec_decl))
+     ((languagemode_decl))
+     ((package_decl))
+     ((expectedconflicts_decl))
+     ((provide_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))))
+    (expectedconflicts_decl
+     ((EXPECTEDCONFLICTS symbols)
+      `(wisent-raw-tag
+        (semantic-tag ',(car $2)
+                     'expectedconflicts :rest ',(cdr $2)))))
+    (provide_decl
+     ((PROVIDE SYMBOL)
+      `(wisent-raw-tag
+        (semantic-tag ',$2 'provide))))
+    (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 "^{[\r\n        ]*" s)
+                   (setq s
+                         (substring s
+                                    (match-end 0))))
+               (if
+                   (string-match "[\r\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
+   '((semantic-parse-stream . wisent-parse-stream)))
+  (setq semantic-parser-name "LALR"
+        semantic--parse-table semantic-grammar-wy--parse-table
+        semantic-debug-parser-source "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
+  (add-hook 'wisent-discarding-token-functions
+            #'wisent-collect-unmatched-syntax nil t))
+
+\f
+;;; Analyzers
+;;
+(define-lex-regex-type-analyzer semantic-grammar-wy--<symbol>-regexp-analyzer
+  "regexp analyzer for <symbol> tokens."
+  ":?\\(\\sw\\|\\s_\\)+"
+  '((PERCENT_PERCENT . "\\`%%\\'"))
+  'SYMBOL)
+
+(define-lex-keyword-type-analyzer semantic-grammar-wy--<keyword>-keyword-analyzer
+  "keyword analyzer for <keyword> tokens."
+  "\\(\\sw\\|\\s_\\)+")
+
+(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--<qlist>-sexp-analyzer
+  "sexp analyzer for <qlist> tokens."
+  "\\s'\\s-*("
+  'PREFIXED_LIST)
+
+(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-string-type-analyzer semantic-grammar-wy--<punctuation>-string-analyzer
+  "string analyzer for <punctuation> tokens."
+  "\\(\\s.\\|\\s$\\|\\s'\\)+"
+  '((GT . ">")
+    (LT . "<")
+    (OR . "|")
+    (SEMI . ";")
+    (COLON . ":"))
+  'punctuation)
+
+(define-lex-sexp-type-analyzer semantic-grammar-wy--<string>-sexp-analyzer
+  "sexp analyzer for <string> tokens."
+  "\\s\""
+  'STRING)
+
+(define-lex-sexp-type-analyzer semantic-grammar-wy--<sexp>-sexp-analyzer
+  "sexp analyzer for <sexp> tokens."
+  "\\="
+  'SEXP)
+
+\f
+;;; Epilogue
+;;
+
+
+
+
+(provide 'semantic/grammar-wy)
+
+;; Local Variables:
+;; version-control: never
+;; no-update-autoloads: t
+;; End:
+
+;;; semantic/grammar-wy.el ends here
index ec1077d447e89689fd09226994a98b4e25cda26a..641882c9026167823f1a9df38aaa76e38ef171b5 100644 (file)
@@ -1,7 +1,6 @@
 ;;; eieio-base.el --- Base classes for EIEIO.  -*- lexical-binding:t -*-
 
-;;; Copyright (C) 2000-2002, 2004-2005, 2007-2021 Free Software
-;;; Foundation, Inc.
+;; Copyright (C) 2000-2021  Free Software Foundation, Inc.
 
 ;; Author: Eric M. Ludlam <zappo@gnu.org>
 ;; Keywords: OO, lisp