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

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

[elpa] externals/phps-mode 4dbd9a2 54/96: Automatically parsing of globa


From: Christian Johansson
Subject: [elpa] externals/phps-mode 4dbd9a2 54/96: Automatically parsing of global declaration from YACC
Date: Fri, 29 Oct 2021 11:14:45 -0400 (EDT)

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

    Automatically parsing of global declaration from YACC
---
 admin/phps-mode-automation.el            |  10 +-
 phps-mode-automation-grammar.el          |  38 --------
 phps-mode-automation-parser-generator.el | 157 ++++++++++++-------------------
 3 files changed, 64 insertions(+), 141 deletions(-)

diff --git a/admin/phps-mode-automation.el b/admin/phps-mode-automation.el
index 93d0322..9ac043e 100644
--- a/admin/phps-mode-automation.el
+++ b/admin/phps-mode-automation.el
@@ -39,6 +39,11 @@
         ;; 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)))
 
         ;; Prepare export
         (when (fboundp 'parser-generator-set-grammar)
@@ -101,11 +106,6 @@
            parser-generator-lr--precedence-comparison-function
            phps-mode-automation-grammar--precedence-comparison-function))
 
-        (when (boundp 'parser-generator--global-declaration)
-          (setq
-           parser-generator--global-declaration
-           phps-mode-automation-grammar--global-declaration))
-
         (when (fboundp 'parser-generator-process-grammar)
           (parser-generator-process-grammar))
 
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index aa1c080..7f3e5e9 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -48,44 +48,6 @@
   "The LR-parser's list of global precedence attributes.")
 
 (defvar
-  phps-mode-automation-grammar--global-declaration
-  '(
-    (%precedence T_THROW)
-    (%precedence PREC_ARROW_FUNCTION)
-    (%precedence T_INCLUDE T_INCLUDE_ONCE T_REQUIRE T_REQUIRE_ONCE)
-    (%left T_LOGICAL_OR)
-    (%left T_LOGICAL_XOR)
-    (%left T_LOGICAL_AND)
-    (%precedence T_PRINT)
-    (%precedence T_YIELD)
-    (%precedence T_DOUBLE_ARROW)
-    (%precedence T_YIELD_FROM)
-    (%precedence "=" T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL 
T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL 
T_SR_EQUAL T_POW_EQUAL T_COALESCE_EQUAL)
-    (%left "?" ":")
-    (%right T_COALESCE)
-    (%left T_BOOLEAN_OR)
-    (%left T_BOOLEAN_AND)
-    (%left "|")
-    (%left "^")
-    (%left "&")
-    (%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL 
T_SPACESHIP)
-    (%nonassoc "<" T_IS_SMALLER_OR_EQUAL ">" T_IS_GREATER_OR_EQUAL)
-    (%left ".")
-    (%left T_SL T_SR)
-    (%left "+" "-")
-    (%left "*" "/" "%")
-    (%precedence "!")
-    (%precedence T_INSTANCEOF)
-    (%precedence "~" T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST 
T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST "@" )
-    (%right T_POW)
-    (%precedence T_CLONE)
-    (%precedence T_NOELSE)
-    (%precedence T_ELSEIF)
-    (%precedence T_ELSE)
-    )
-  "Declaration for grammar.")
-
-(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 22062a0..f8b2403 100644
--- a/phps-mode-automation-parser-generator.el
+++ b/phps-mode-automation-parser-generator.el
@@ -466,29 +466,44 @@
    nil)
   (parser-generator-set-grammar
    '(
-     (Start Declarations Declaration Type Symbols Symbol)
-     (type symbol literal)
+     (Start Declarations-Block Declarations Declaration Type Symbols Symbol)
+     (type symbol literal comment)
      (
       (Start
-       Declarations
+       Declarations-Block
        )
+      (Declarations-Block
+       (Declarations
+        (lambda(args)
+          (format "'(\n%s)" args))))
       (Declarations
-       Declaration
-       (Declaration Declarations)
+       (Declaration
+        (lambda(args) (format "%s" args)))
+       (Declaration Declarations
+                    (lambda(args) (format "%s%s" (nth 0 args) (nth 1 args))))
        )
       (Declaration
-       (Type Symbols)
+       (comment
+        (lambda(args) ""))
+       (Type Symbols
+             (lambda(args) (format "  (%s %s)\n" (nth 0 args) (nth 1 args))))
        )
       (Type
-       type
+       (type
+        (lambda(args) (format "%s" args)))
        )
       (Symbols
-       Symbol
-       (Symbol Symbols)
+       (Symbol
+        (lambda(args) (format "%s" args)))
+       (Symbol Symbols
+               (lambda(args) (format "%s %s" (nth 0 args) (nth 1 args))))
        )
       (Symbol
-       symbol
-       literal
+       (symbol
+        (lambda(args) (format "%s" args)))
+       (literal
+        (lambda(args)
+          (format "\"%s\"" (substring args 1 2))))
        )
       )
      Start))
@@ -519,86 +534,29 @@
             ((looking-at "\\(%[a-z]+\\)")
              (setq
               token
-              `(comment ,comment-start . ,comment-end)))
-
-            ((looking-at "\\({\\)")
-             (let ((nesting-stack 1)
-                   (logic-start (match-beginning 0))
-                   (logic-end)
-                   (continue t))
-               (forward-char 1)
-               (while (and
-                       continue
-                       (> nesting-stack 0)
-                       (< (point) (point-max)))
-                 (let ((next-stop (search-forward-regexp "\\({\\|}\\|/\\*\\)" 
nil t)))
-                   (let ((match (buffer-substring-no-properties 
(match-beginning 0) (match-end 0))))
-                     (cond
-
-                      ((not next-stop)
-                       (setq
-                        continue
-                        nil))
-
-                      ((string= match "{")
-                       (setq
-                        nesting-stack
-                        (1+ nesting-stack)))
-
-                      ((string= match "}")
-                       (setq
-                        nesting-stack
-                        (1- nesting-stack))
-                       (when
-                           (= nesting-stack 0)
-                         (setq
-                          logic-end
-                          (point))))
-
-                      ((string= match "/*")
-                       (let (
-                             (comment-start (match-beginning 0))
-                             (comment-end
-                              (search-forward-regexp "\\*/" nil t)))
-                         (unless comment-end
-                           (error
-                            "Failed to find end of comment started at %S (2))"
-                            comment-start))))
-                      
-
-                      ))))
-               (unless logic-end
-                 (error
-                  "Failed to find end of logic started at %S"
-                  logic-start))
-               (setq
-                token
-                `(logic ,logic-start . ,logic-end))))
-
-            ((looking-at "\\(:\\|;\\||\\)")
-             (setq
-              token
-              `(
-                ,(buffer-substring-no-properties
-                  (match-beginning 0)
-                  (match-end 0))
-                ,(match-beginning 0)
-                . ,(match-end 0))))
+              `(type ,(match-beginning 0) . ,(match-end 0))))
 
-            ((looking-at "\\(%%\\)")
+            ((looking-at "\\('.'\\)")
              (setq
               token
-              `(productions-delimiter ,(match-beginning 0) . ,(match-end 0))))
+              `(literal ,(match-beginning 0) . ,(match-end 0))))
 
-            ((looking-at "\\([%a-zA-Z_]+\\)")
+            ((looking-at "\\([a-zA-Z_]+\\)")
              (setq
               token
               `(symbol ,(match-beginning 0) . ,(match-end 0))))
 
-            ((looking-at "\\('.'\\)")
-             (setq
-              token
-              `(literal ,(match-beginning 0) . ,(match-end 0))))
+            ((looking-at "\\(/\\*\\)")
+             (let ((comment-start (match-beginning 0))
+                   (comment-end
+                    (search-forward-regexp "\\(\\*/\\)" nil t)))
+               (unless comment-end
+                 (error
+                  "Failed to find end of comment started at %S (1)"
+                  comment-start))
+               (setq
+                token
+                `(comment ,comment-start . ,comment-end))))
 
             ))
 
@@ -606,7 +564,9 @@
            (let ((token-data
                   (buffer-substring-no-properties
                    (car (cdr token))
-                   (cdr (cdr token)))))))
+                   (cdr (cdr token)))))
+             ;; (message "token-data: %S" token-data)
+             ))
          token))))
 
   (setq
@@ -616,14 +576,7 @@
        (let ((start (car (cdr token)))
              (end (cdr (cdr token))))
          (when (<= end (point-max))
-           (let ((symbol
-                  (buffer-substring-no-properties start end)))
-             (when
-                 (string-match-p "^\\([0-9]+\\.[0-9]+\\|[0-9]+\\)$" symbol)
-               (setq
-                symbol
-                (string-to-number symbol)))
-             symbol))))))
+           (buffer-substring-no-properties start end))))))
 
   (parser-generator-process-grammar)
   (parser-generator-lr-generate-parser-tables)
@@ -632,15 +585,23 @@
     (switch-to-buffer buffer)
     (insert-file (expand-file-name "zend_language_parser.y"))
     (goto-char (point-min))
-    (let ((delimiter-start (search-forward "%%")))
+    (let ((delimiter-start (search-forward "%precedence")))
       (setq
        delimiter-start
-       (- delimiter-start 2))
-      (kill-region (point-min) delimiter-start))
-    (let ((delimiter-start (search-forward "%%")))
-      (kill-region delimiter-start (point-max)))
+       (- delimiter-start 11))
+      (kill-region
+       (point-min)
+       delimiter-start))
+    (let ((delimiter-start (search-forward "%token")))
+      (setq
+       delimiter-start
+       (- delimiter-start 6))
+      (kill-region
+       delimiter-start
+       (point-max)))
     (goto-char (point-min))
-    (let ((productions (eval (car (read-from-string 
(parser-generator-lr-translate))))))))
+    (let ((global-declaration (eval (car (read-from-string 
(parser-generator-lr-translate))))))
+      global-declaration)))
 
 (provide 'phps-mode-automation-parser-generator)
 ;;; phps-mode-automation-parser-generator.el ends here



reply via email to

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