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

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

[elpa] externals/parser-generator af71d8b 285/434: Lex-analyzer is now e


From: ELPA Syncer
Subject: [elpa] externals/parser-generator af71d8b 285/434: Lex-analyzer is now exported
Date: Mon, 29 Nov 2021 15:59:59 -0500 (EST)

branch: externals/parser-generator
commit af71d8b0f766ddcc1fd87e767a1a8dc35fb58512
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    Lex-analyzer is now exported
---
 parser-generator-lr.el           | 89 +++++++++++++++++++++++++++++++++++++++-
 test/parser-generator-lr-test.el |  2 +-
 2 files changed, 89 insertions(+), 2 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index da4a18f..99f5de1 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -182,7 +182,7 @@
       ;; Lex-analyzer index
       (insert
        (format
-        "(defvar\n  %s-lex-analyzer-index\n  0\n  \"Current index of 
lex-analyzer.\")\n\n"
+        "(defvar\n  %s-lex-analyzer--index\n  0\n  \"Current index of 
lex-analyzer.\")\n\n"
         namespace))
 
       (insert "\n;;; Functions:\n\n\n")
@@ -225,6 +225,7 @@
        (format "
 (defun
   %s-lex-analyzer-reset
+  ()
   \"Reset Lex-Analyzer.\"
   (setq 
     %s-lex-analyzer--index 
@@ -238,6 +239,92 @@
                namespace
                namespace))
 
+      ;; Lex-Analyzer Peek Next Look Ahead
+      (insert
+       (format "
+(defun
+  %s-lex-analyzer--peek-next-look-ahead
+  ()
+  \"Peek next look-ahead number of tokens via lex-analyzer.\"
+  (let ((look-ahead)
+        (look-ahead-length 0)
+        (index %s-lex-analyzer--index)
+        (k (max
+            1
+            %s-look-ahead-number)))
+    (while (<
+            look-ahead-length
+            k)
+      (condition-case error
+          (progn
+            (let ((next-look-ahead
+                   (funcall
+                    %s-lex-analyzer--function
+                    index)))
+              (if next-look-ahead
+                  (progn
+                    (unless (listp (car next-look-ahead))
+                      (setq next-look-ahead (list next-look-ahead)))
+                    (dolist (next-look-ahead-item next-look-ahead)
+                      (when (<
+                             look-ahead-length
+                             k)
+                        (push next-look-ahead-item look-ahead)
+                        (setq look-ahead-length (1+ look-ahead-length))
+                        (setq index (cdr (cdr next-look-ahead-item))))))
+                (push (list %s-eof-identifier) look-ahead)
+                (setq look-ahead-length (1+ look-ahead-length))
+                (setq index (1+ index)))))"
+               namespace
+               namespace
+               namespace
+               namespace
+               namespace))
+      (insert "
+        (error
+         (error
+          \"Lex-analyze failed to peek next look-ahead at %s, error: %s\"
+          index
+          (car (cdr error))))))
+    (nreverse look-ahead)))\n")
+
+      ;; Lex-Analyzer Pop Token
+      (insert
+       (format "
+(defun 
+  %s-lex-analyzer--pop-token ()
+  \"Pop next token via lex-analyzer.\"
+  (let ((iteration 0)
+        (tokens))
+    (while (< iteration 1)
+      (condition-case error
+          (progn
+            (let ((token
+                   (funcall
+                    %s-lex-analyzer--function
+                    %s-lex-analyzer--index)))
+              (when token
+                (unless (listp (car token))
+                  (setq token (list token)))
+                (let ((first-token (car token)))
+                  (setq
+                   %s-lex-analyzer--index
+                   (cdr (cdr first-token)))
+                  (push first-token tokens)))))"
+               namespace
+               namespace
+               namespace
+               namespace))
+      (insert "
+        (error (error
+                \"Lex-analyze failed to pop token at %s, error: %s\"")
+      (insert (format "
+                %s-lex-analyzer--index
+                (car (cdr error)))))
+      (setq iteration (1+ iteration)))
+    (nreverse tokens)))\n\n"
+                      namespace))
+
       (insert "\n;;; Syntax-Analyzer / Parser:\n\n\n");
 
       ;; TODO Functions
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index cac4994..704790f 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -1183,7 +1183,7 @@
     '(2 2 2 1 1)
     (parser-generator-lr-parse)))
   (let ((export (parser-generator-lr--export-parser "e--")))
-    (message "export: %s" export))
+    (message "export:\n%s\n" export))
 
   (message "Passed tests for (parser-generator-lr--export-parser)"))
 



reply via email to

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