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

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

[elpa] externals/phps-mode eced7be 77/96: Parser now not dependent on le


From: Christian Johansson
Subject: [elpa] externals/phps-mode eced7be 77/96: Parser now not dependent on lex-analyzer variables
Date: Fri, 29 Oct 2021 11:14:55 -0400 (EDT)

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

    Parser now not dependent on lex-analyzer variables
---
 phps-mode-automation-grammar.el | 105 ++++++++--------------------------------
 phps-mode-parser.el             |  78 ++++-------------------------
 test/phps-mode-test-parser.el   |  43 ++++++++++++++--
 3 files changed, 70 insertions(+), 156 deletions(-)

diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index 2d160e6..790760b 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -24,8 +24,6 @@
 ;;; Code:
 
 
-(require 'phps-mode-lexer)
-
 ;; Just to stop linter from complaining
 (defvar
  phps-mode-parser-position
@@ -33,9 +31,9 @@
  "Position of parser.")
 
 (defvar
- phps-mode-parser-tokens
- nil
- "Reversed list of tokens.")
+  phps-mode-parser-tokens
+  nil
+  "Tokens for parser.")
 
 (defvar
   phps-mode-automation-grammar--lr--allow-default-conflict-resolution
@@ -54,7 +52,7 @@
 
 (defvar
   phps-mode-automation-grammar--header
-  "(require 'phps-mode-lexer)\n(require 'semantic)\n(require 
'semantic/lex)\n\n(defvar-local\n phps-mode-parser-position\n nil\n \"Position 
of parser.\")\n(defvar-local\n phps-mode-parser-tokens\n nil\n \"Reversed list 
of lexer tokens.\")\n"
+  "\n\n(defvar-local\n phps-mode-parser-position\n nil\n \"Position of 
parser.\")\n\n(defvar-local\n phps-mode-parser-tokens\n nil\n \"Tokens for 
parser.\")\n\n"
   "Header contents for parser.")
 
 (defvar
@@ -68,78 +66,6 @@
   "The EOF-identifier of grammar.")
 
 (defvar
-  phps-mode-automation-grammar--lex-analyzer-reset-function
-  (lambda()
-    (let ((generated-tokens-p)
-          (generated-tokens-list))
-
-      ;; Create lexer buffer if none exists
-      (unless (get-buffer "*PHPs Lexer*")
-        (generate-new-buffer "*PHPs Lexer*")
-        (let ((old-buffer
-               (buffer-substring-no-properties
-                (point-min)
-                (point-max))))
-          (with-current-buffer "*PHPs Lexer*"
-            (insert old-buffer))))
-
-      (with-current-buffer "*PHPs Lexer*"
-        ;; Unless we have lexed the buffer
-        (unless phps-mode-parser-tokens
-          (unless phps-mode-lexer--generated-tokens
-            ;; Reset lexer
-            (setq-local
-             phps-mode-lexer--generated-tokens
-             nil)
-            (setq-local
-             phps-mode-lexer--state
-             'ST_INITIAL)
-            (setq-local
-             phps-mode-lexer--states
-             nil)
-            (setq-local
-             phps-mode-lexer--state-stack
-             nil)
-            (setq-local
-             phps-mode-lexer--heredoc-label
-             nil)
-            (setq-local
-             phps-mode-lexer--heredoc-label-stack
-             nil)
-            (setq-local
-             phps-mode-lexer--nest-location-stack
-             nil)
-            (goto-char (point-min))
-
-            ;; Run lexer on entire buffer here
-            (let ((index (point))
-                  (max-index (point-max)))
-              (while (< index max-index)
-                (phps-mode-lexer--re2c)
-                (setq
-                 index
-                 semantic-lex-end-point)
-                (goto-char index))))
-          (setq
-           generated-tokens-p
-           t)
-          (setq
-           generated-tokens-list
-           (reverse
-            phps-mode-lexer--generated-tokens))))
-
-      (when generated-tokens-p
-        (setq-local
-         phps-mode-parser-tokens
-         generated-tokens-list))
-
-      ;; Reset buffer-index to token-list-index connections
-      (setq-local
-       phps-mode-parser-position
-       nil)))
-  "The reset function.")
-
-(defvar
   phps-mode-automation-grammar--lex-analyzer-function
   (lambda (buffer-index)
     (let ((token-list-index))
@@ -240,6 +166,16 @@
   "The custom lex-analyzer.")
 
 (defvar
+  phps-mode-automation-grammar--lex-analyzer-reset-function
+  (lambda()
+    (progn
+      ;; Reset buffer-index to token-list-index connections
+      (setq-local
+       phps-mode-parser-position
+       nil)))
+  "The reset function.")
+
+(defvar
   phps-mode-automation-grammar--precedence-comparison-function
   (lambda(a-type a-value _b-type b-value)
     (cond
@@ -284,13 +220,12 @@
 (defvar
   phps-mode-automation-grammar--lex-analyzer-get-function
   (lambda (token)
-    (with-current-buffer "*PHPs Lexer*"
-      (let ((start (car (cdr token)))
-            (end (cdr (cdr token))))
-        (when (<= end (point-max))
-          (buffer-substring-no-properties
-           start
-           end)))))
+    (let ((start (car (cdr token)))
+          (end (cdr (cdr token))))
+      (when (<= end (point-max))
+        (buffer-substring-no-properties
+         start
+         end))))
   "Fetch token meta data.")
 
 
diff --git a/phps-mode-parser.el b/phps-mode-parser.el
index b9db0b6..2c9739a 100644
--- a/phps-mode-parser.el
+++ b/phps-mode-parser.el
@@ -6,18 +6,17 @@
 
 ;;; Code:
 
-(require 'phps-mode-lexer)
-(require 'semantic)
-(require 'semantic/lex)
 
 (defvar-local
  phps-mode-parser-position
  nil
  "Position of parser.")
+
 (defvar-local
  phps-mode-parser-tokens
  nil
- "Reversed list of lexer tokens.")
+ "Tokens for parser.")
+
 
 ;;; Constants:
 
@@ -97,7 +96,12 @@
 
 (defvar
   phps-mode-parser-lex-analyzer--get-function
-  (lambda (token) (save-current-buffer (set-buffer "*PHPs Lexer*") (let 
((start (car (cdr token))) (end (cdr (cdr token)))) (if (<= end (point-max)) 
(progn (buffer-substring-no-properties start end))))))
+  (lambda (token) (let ((start (car (cdr token)))
+          (end (cdr (cdr token))))
+      (when (<= end (point-max))
+        (buffer-substring-no-properties
+         start
+         end))))
   "The lex-analyzer get function.")
 
 (defvar
@@ -203,69 +207,7 @@
 (defvar
   phps-mode-parser-lex-analyzer--reset-function
   (lambda()
-    (let ((generated-tokens-p)
-          (generated-tokens-list))
-
-      ;; Create lexer buffer if none exists
-      (unless (get-buffer "*PHPs Lexer*")
-        (generate-new-buffer "*PHPs Lexer*")
-        (let ((old-buffer
-               (buffer-substring-no-properties
-                (point-min)
-                (point-max))))
-          (with-current-buffer "*PHPs Lexer*"
-            (insert old-buffer))))
-
-      (with-current-buffer "*PHPs Lexer*"
-        ;; Unless we have lexed the buffer
-        (unless phps-mode-parser-tokens
-          (unless phps-mode-lexer--generated-tokens
-            ;; Reset lexer
-            (setq-local
-             phps-mode-lexer--generated-tokens
-             nil)
-            (setq-local
-             phps-mode-lexer--state
-             'ST_INITIAL)
-            (setq-local
-             phps-mode-lexer--states
-             nil)
-            (setq-local
-             phps-mode-lexer--state-stack
-             nil)
-            (setq-local
-             phps-mode-lexer--heredoc-label
-             nil)
-            (setq-local
-             phps-mode-lexer--heredoc-label-stack
-             nil)
-            (setq-local
-             phps-mode-lexer--nest-location-stack
-             nil)
-            (goto-char (point-min))
-
-            ;; Run lexer on entire buffer here
-            (let ((index (point))
-                  (max-index (point-max)))
-              (while (< index max-index)
-                (phps-mode-lexer--re2c)
-                (setq
-                 index
-                 semantic-lex-end-point)
-                (goto-char index))))
-          (setq
-           generated-tokens-p
-           t)
-          (setq
-           generated-tokens-list
-           (reverse
-            phps-mode-lexer--generated-tokens))))
-
-      (when generated-tokens-p
-        (setq-local
-         phps-mode-parser-tokens
-         generated-tokens-list))
-
+    (progn
       ;; Reset buffer-index to token-list-index connections
       (setq-local
        phps-mode-parser-position
diff --git a/test/phps-mode-test-parser.el b/test/phps-mode-test-parser.el
index 22f1de5..90451dc 100644
--- a/test/phps-mode-test-parser.el
+++ b/test/phps-mode-test-parser.el
@@ -27,18 +27,55 @@
 
 (require 'ert)
 (require 'phps-mode)
-(require 'phps-mode-lexer)
+(require 'phps-mode-lex-analyzer)
 (require 'phps-mode-parser)
 
 (defun phps-mode-test-parser--buffer-contents (buffer-contents name logic)
   (with-temp-buffer
-    (when (get-buffer "*PHPs Lexer*")
-      (kill-buffer "*PHPs Lexer*"))
+    ;; Setup buffer
     (insert buffer-contents)
     (message
      "Testing buffer %S with buffer-contents:\n%S\n"
      name
      (buffer-substring-no-properties (point-min) (point-max)))
+    
+    ;; Setup lexer
+    (setq
+     phps-mode-lexer--generated-tokens
+     nil)
+    (setq
+     phps-mode-lexer--state
+     'ST_INITIAL)
+    (setq
+     phps-mode-lexer--states
+     nil)
+    (setq
+     phps-mode-lexer--state-stack
+     nil)
+    (setq
+     phps-mode-lexer--heredoc-label
+     nil)
+    (setq
+     phps-mode-lexer--heredoc-label-stack
+     nil)
+    (setq
+     phps-mode-lexer--nest-location-stack
+     nil)
+
+    ;; Run lexer
+    (setq
+     semantic-lex-analyzer
+     #'phps-mode-lex-analyzer--re2c-lex)
+    (setq
+     semantic-lex-syntax-table
+     phps-mode-syntax-table)
+    (semantic-lex-buffer)
+    (setq
+     phps-mode-parser-tokens
+     (reverse phps-mode-lexer--generated-tokens))
+    (message "Lexer tokens:\n%S\n" phps-mode-parser-tokens)
+
+    ;; Run test
     (funcall logic)
     (message "Passed %s" name)))
 



reply via email to

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