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

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

[elpa] externals/parser-generator 33634dd 193/434: Passing all tests aft


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 33634dd 193/434: Passing all tests after refactor
Date: Mon, 29 Nov 2021 15:59:39 -0500 (EST)

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

    Passing all tests after refactor
---
 parser-generator-lex-analyzer.el           | 40 ++++++++++++++++++------------
 test/parser-generator-lex-analyzer-test.el |  8 +++---
 test/parser-generator-lr-test.el           | 36 ++++++++++++++++++---------
 3 files changed, 53 insertions(+), 31 deletions(-)

diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index 6f0609f..e2aa7e4 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -58,7 +58,7 @@
   (unless parser-generator-lex-analyzer--function
     (error "Missing lex-analyzer function!"))
   (unless parser-generator--look-ahead-number
-    (error "Missing look-ahead number!"))
+    (error "Missing look-ahead-number!"))
   (let ((look-ahead)
         (look-ahead-length 0)
         (index parser-generator-lex-analyzer--index))
@@ -97,21 +97,29 @@
     (error "Missing lex-analyzer index!"))
   (unless parser-generator-lex-analyzer--function
     (error "Missing lex-analyzer function!"))
-  (condition-case error
-      (progn
-        (let ((token (funcall
-                      parser-generator-lex-analyzer--function
-                      parser-generator-lex-analyzer--index)))
-          (unless (listp (car token))
-            (setq token (list token)))
-          (let ((first-token (car token)))
-            (setq parser-generator-lex-analyzer--index
-                  (cdr (cdr first-token)))
-            first-token)))
-    (error (error
-            "Lex-analyze failed to pop token at %s, error: %s"
-            parser-generator-lex-analyzer--index
-            (car (cdr error))))))
+  (unless parser-generator--look-ahead-number
+    (error "Missing look-ahead-number!"))
+  (let ((iteration 0)
+        (tokens))
+    (while (< iteration parser-generator--look-ahead-number)
+      (condition-case error
+          (progn
+            (let ((token
+                   (funcall
+                    parser-generator-lex-analyzer--function
+                    parser-generator-lex-analyzer--index)))
+              (unless (listp (car token))
+                (setq token (list token)))
+              (let ((first-token (car token)))
+                (setq parser-generator-lex-analyzer--index
+                      (cdr (cdr first-token)))
+                (push first-token tokens))))
+        (error (error
+                "Lex-analyze failed to pop token at %s, error: %s"
+                parser-generator-lex-analyzer--index
+                (car (cdr error)))))
+      (setq iteration (1+ iteration)))
+    (nreverse tokens)))
 
 (defun parser-generator-lex-analyzer--reset ()
   "Reset lex-analyzer."
diff --git a/test/parser-generator-lex-analyzer-test.el 
b/test/parser-generator-lex-analyzer-test.el
index e3fcc9c..5cee3f0 100644
--- a/test/parser-generator-lex-analyzer-test.el
+++ b/test/parser-generator-lex-analyzer-test.el
@@ -113,17 +113,19 @@
 
   (message "Passed failing lex analysis 2")
 
+  (setq parser-generator--look-ahead-number 1)
+
   (should
    (equal
-    '("a" 1 . 2)
+    '(("a" 1 . 2))
     (parser-generator-lex-analyzer--pop-token)))
   (should
    (equal
-    '("b" 2 . 3)
+    '(("b" 2 . 3))
     (parser-generator-lex-analyzer--pop-token)))
   (should
    (equal
-    nil
+    '(nil)
     (parser-generator-lex-analyzer--pop-token)))
 
   (message "Ended tests for (parser-generator-lex-analyzer--pop-token)"))
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index f0327b4..89fe758 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -272,7 +272,6 @@
   (parser-generator-set-look-ahead-number 1)
   (parser-generator-process-grammar)
   (parser-generator-lr-generate-parser-tables)
-
   (setq
    parser-generator-lex-analyzer--function
    (lambda (index)
@@ -286,12 +285,10 @@
          (push (nth (1- index) string) tokens)
          (setq index (1+ index)))
        (nreverse tokens))))
-
   (should
    (equal
     '(2 2 2 1 1)
     (parser-generator-lr-parse)))
-
   (message "Passed test with terminals as symbols")
 
   (setq
@@ -307,19 +304,14 @@
          (push (nth (1- index) string) tokens)
          (setq index (1+ index)))
        (nreverse tokens))))
-
   (should-error
    (parser-generator-lr--parse))
-
   (message "Passed test with terminals as symbols, invalid syntax")
 
-  ;; Test with terminals as strings here
-
   (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b")) 
(S e)) Sp))
   (parser-generator-set-look-ahead-number 1)
   (parser-generator-process-grammar)
   (parser-generator-lr-generate-parser-tables)
-
   (setq
    parser-generator-lex-analyzer--function
    (lambda (index)
@@ -333,12 +325,10 @@
          (push (nth (1- index) string) tokens)
          (setq index (1+ index)))
        (nreverse tokens))))
-
   (should
    (equal
     '(2 2 2 1 1)
     (parser-generator-lr-parse)))
-
   (message "Passed test with terminals as string")
 
   (setq
@@ -354,10 +344,8 @@
          (push (nth (1- index) string) tokens)
          (setq index (1+ index)))
        (nreverse tokens))))
-
   (should-error
    (parser-generator-lr--parse))
-
   (message "Passed test with terminals as string, invalid syntax")
 
   (setq
@@ -378,6 +366,30 @@
 
   (message "Passed incremental-tests")
 
+  ;; (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S 
"b")) (S e)) Sp))
+  ;; (parser-generator-set-look-ahead-number 2)
+  ;; (parser-generator-process-grammar)
+  ;; (parser-generator-lr-generate-parser-tables)
+  ;; (setq
+  ;;  parser-generator-lex-analyzer--function
+  ;;  (lambda (index)
+  ;;    (let* ((string '(("a" 1 . 2) ("a" 2 . 3) ("b" 3 . 4) ("b" 4 . 5)))
+  ;;           (string-length (length string))
+  ;;           (max-index index)
+  ;;           (tokens))
+  ;;      (while (and
+  ;;              (< (1- index) string-length)
+  ;;              (< (1- index) max-index))
+  ;;        (push (nth (1- index) string) tokens)
+  ;;        (setq index (1+ index)))
+  ;;      (nreverse tokens))))
+  ;; (should
+  ;;  (equal
+  ;;   '(2 2 2 1 1)
+  ;;   (parser-generator-lr-parse)))
+  ;; (message "Passed test with terminals as string with look-ahead-number 2")
+
+
   (message "Passed tests for (parser-generator-lr--parse)"))
 
 (defun parser-generator-lr-test-translate ()



reply via email to

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