emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/phps-mode 024e8d4 55/96: Setting up context-sensitive a


From: Christian Johansson
Subject: [elpa] externals/phps-mode 024e8d4 55/96: Setting up context-sensitive attributes automatically
Date: Fri, 29 Oct 2021 11:14:46 -0400 (EDT)

branch: externals/phps-mode
commit 024e8d435378364cb672ce95fd83b5c415c498cc
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    Setting up context-sensitive attributes automatically
---
 admin/phps-mode-automation.el            | 49 +++++++++++++++-----------------
 phps-mode-automation-grammar.el          | 10 -------
 phps-mode-automation-parser-generator.el | 34 ++++++++++++++++++----
 3 files changed, 51 insertions(+), 42 deletions(-)

diff --git a/admin/phps-mode-automation.el b/admin/phps-mode-automation.el
index 9ac043e..d244293 100644
--- a/admin/phps-mode-automation.el
+++ b/admin/phps-mode-automation.el
@@ -35,20 +35,37 @@
   "Generate parser."
   (if (fboundp 'parser-generator-lr-export-to-elisp)
       (progn
-        ;; TODO Generate here
-        ;; phps-mode-automation-grammar--global-attributes
-        ;; phps-mode-automation-grammar--lr-global-precedence-attributes
-        ;; phps-mode-automation-grammar--global-declaration
+
         (let ((global-declaration 
(phps-mode-automation-parser-generator--global-declaration)))
           (when (boundp 'parser-generator--global-declaration)
             (setq
              parser-generator--global-declaration
-             global-declaration)))
+             global-declaration))
+
+          (when (boundp 'parser-generator--global-attributes)
+            (setq
+             parser-generator--global-attributes
+             phps-mode-automation-parser-generator--attributes))
+
+          (when (boundp 'parser-generator-lr--global-precedence-attributes)
+            (setq
+             parser-generator-lr--global-precedence-attributes
+             phps-mode-automation-parser-generator--attributes)))
 
         ;; Prepare export
         (when (fboundp 'parser-generator-set-grammar)
           (parser-generator-set-grammar
-           (phps-mode-automation-parser-generator--grammar)))
+           (phps-mode-automation-parser-generator--grammar))
+
+          (when (boundp 'parser-generator--context-sensitive-attributes)
+            (setq
+             parser-generator--context-sensitive-attributes
+             
phps-mode-automation-parser-generator--context-sensitive-attributes))
+
+          (when (boundp 
'parser-generator-lr--context-sensitive-precedence-attribute)
+            (setq
+             parser-generator-lr--context-sensitive-precedence-attribute
+             (car 
phps-mode-automation-parser-generator--context-sensitive-attributes))))
 
         (when (fboundp 'parser-generator-set-look-ahead-number)
           (parser-generator-set-look-ahead-number
@@ -76,31 +93,11 @@
            parser-generator-lex-analyzer--get-function
            phps-mode-automation-grammar--lex-analyzer-get-function))
 
-        (when (boundp 'parser-generator--global-attributes)
-          (setq
-           parser-generator--global-attributes
-           phps-mode-automation-grammar--global-attributes))
-
-        (when (boundp 'parser-generator-lr--global-precedence-attributes)
-          (setq
-           parser-generator-lr--global-precedence-attributes
-           phps-mode-automation-grammar--lr-global-precedence-attributes))
-
         (when (boundp 'parser-generator-lr--allow-default-conflict-resolution)
           (setq
            parser-generator-lr--allow-default-conflict-resolution
            
phps-mode-automation-grammar--lr--allow-default-conflict-resolution))
 
-        (when (boundp 'parser-generator--context-sensitive-attributes)
-          (setq
-           parser-generator--context-sensitive-attributes
-           
phps-mode-automation-parser-generator--context-sensitive-attributes))
-
-        (when (boundp 
'parser-generator-lr--context-sensitive-precedence-attribute)
-          (setq
-           parser-generator-lr--context-sensitive-precedence-attribute
-           (car 
phps-mode-automation-parser-generator--context-sensitive-attributes)))
-
         (when (boundp 'parser-generator-lr--precedence-comparison-function)
           (setq
            parser-generator-lr--precedence-comparison-function
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index 7f3e5e9..9b38c97 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -38,16 +38,6 @@
  "Reversed list of tokens.")
 
 (defvar
-  phps-mode-automation-grammar--global-attributes
-  '(%left %nonassoc %precedence %right)
-  "List of valid global attributes.")
-
-(defvar
-  phps-mode-automation-grammar--lr-global-precedence-attributes
-  '(%left %nonassoc %precedence %right)
-  "The LR-parser's list of global precedence attributes.")
-
-(defvar
   phps-mode-automation-grammar--lr--allow-default-conflict-resolution
   t
   "Allow shift resolution to shift/reduce conflicts were precedence is 
missing.")
diff --git a/phps-mode-automation-parser-generator.el 
b/phps-mode-automation-parser-generator.el
index f8b2403..da445c3 100644
--- a/phps-mode-automation-parser-generator.el
+++ b/phps-mode-automation-parser-generator.el
@@ -24,9 +24,9 @@
 ;;; Code:
 
 (defvar
-  phps-mode-automation-parser-generator--global-declaration
+  phps-mode-automation-parser-generator--attributes
   nil
-  "Global declaration of grammar.")
+  "Attributes of grammar.")
 
 (defvar
   phps-mode-automation-parser-generator--start
@@ -383,6 +383,7 @@
 
   (let ((buffer (generate-new-buffer "*buffer*")))
     (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
     (insert-file (expand-file-name "zend_language_parser.y"))
     (goto-char (point-min))
     (let ((delimiter-start (search-forward "%%")))
@@ -444,9 +445,8 @@
   (phps-mode-automation-parser-generator--ensure-yacc-grammar-is-available)
 
   (setq
-   phps-mode-automation-parser-generator--global-declaration
-   nil)
-
+   phps-mode-automation-parser-generator--attributes
+   (make-hash-table :test 'equal))
   (parser-generator-set-look-ahead-number
    1)
   (setq
@@ -490,7 +490,16 @@
        )
       (Type
        (type
-        (lambda(args) (format "%s" args)))
+        (lambda(args)
+          (unless
+              (gethash
+               args
+               phps-mode-automation-parser-generator--attributes)
+            (puthash
+             args
+             t
+             phps-mode-automation-parser-generator--attributes))
+          (format "%s" args)))
        )
       (Symbols
        (Symbol
@@ -583,6 +592,7 @@
 
   (let ((buffer (generate-new-buffer "*buffer*")))
     (switch-to-buffer buffer)
+    (kill-region (point-min) (point-max))
     (insert-file (expand-file-name "zend_language_parser.y"))
     (goto-char (point-min))
     (let ((delimiter-start (search-forward "%precedence")))
@@ -601,6 +611,18 @@
        (point-max)))
     (goto-char (point-min))
     (let ((global-declaration (eval (car (read-from-string 
(parser-generator-lr-translate))))))
+
+      (let ((attributes))
+        (maphash
+         (lambda (k _v)
+           (push
+            (intern k)
+            attributes))
+         phps-mode-automation-parser-generator--attributes)
+        (setq
+         phps-mode-automation-parser-generator--attributes
+         attributes))
+      
       global-declaration)))
 
 (provide 'phps-mode-automation-parser-generator)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]