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

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

[elpa] externals/parser-generator e598f652a7 04/19: Made some more tests


From: Christian Johansson
Subject: [elpa] externals/parser-generator e598f652a7 04/19: Made some more tests pass after lex-analyzer refactor
Date: Wed, 10 Jan 2024 15:35:21 -0500 (EST)

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

    Made some more tests pass after lex-analyzer refactor
---
 parser-generator-lex-analyzer.el | 12 ++++-----
 parser-generator-lr-export.el    | 31 +----------------------
 parser-generator-lr.el           | 54 ++++++++--------------------------------
 test/parser-generator-lr-test.el | 22 +++++++++-------
 4 files changed, 30 insertions(+), 89 deletions(-)

diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index 9f1ff4f4c7..74d9d95840 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -91,11 +91,11 @@
 (defun parser-generator-lex-analyzer--peek-next-look-ahead ()
   "Peek next look-ahead number of tokens via lex-analyzer."
   (unless parser-generator-lex-analyzer--index
-    (error "Missing lex-analyzer index!"))
+    (error "Missing lex-analyzer index when peeking!"))
   (unless parser-generator-lex-analyzer--function
-    (error "Missing lex-analyzer function!"))
+    (error "Missing lex-analyzer function when peeking!"))
   (unless parser-generator--look-ahead-number
-    (error "Missing look-ahead-number!"))
+    (error "Missing look-ahead-number when peeking!"))
   (let ((look-ahead)
         (look-ahead-length 0)
         (index parser-generator-lex-analyzer--index)
@@ -151,11 +151,11 @@
 (defun parser-generator-lex-analyzer--pop-token ()
   "Pop next token via lex-analyzer."
   (unless parser-generator-lex-analyzer--index
-    (error "Missing lex-analyzer index!"))
+    (error "Missing lex-analyzer index when popping!"))
   (unless parser-generator-lex-analyzer--function
-    (error "Missing lex-analyzer function!"))
+    (error "Missing lex-analyzer function when popping!"))
   (unless parser-generator--look-ahead-number
-    (error "Missing look-ahead-number!"))
+    (error "Missing look-ahead-number when popping!"))
   (let ((continue t)
         (tokens))
     (while continue
diff --git a/parser-generator-lr-export.el b/parser-generator-lr-export.el
index aa4a03ec0a..97df7f5361 100644
--- a/parser-generator-lr-export.el
+++ b/parser-generator-lr-export.el
@@ -499,35 +499,9 @@
     (unless %s--distinct-goto-tables
       (error \"Missing distinct GOTO-tables for grammar!\"))
 
-    (let ((accept)
-          (pre-index 0))
+    (let ((accept))
       (while (not accept)
 
-        ;; Save history when index has changed to enable incremental parsing / 
translating
-        (when
-            (>
-             %s-lex-analyzer--index
-             pre-index)
-          ;; We make a copy of the hash-table here to avoid passing same
-          ;; hash-table every-time with pointer
-          (let ((translation-symbol-table-list))
-            (maphash
-             (lambda (key value)
-               (push
-                `(,key ,value)
-                translation-symbol-table-list))
-             translation-symbol-table)
-            (push
-             `(,%s-lex-analyzer--index
-               ,pushdown-list
-               ,output
-               ,translation
-               ,translation-symbol-table-list)
-             history)
-            (setq
-             pre-index
-             %s-lex-analyzer--index)))
-
         ;; (1) The look-ahead string u, consisting of the next k input 
symbols, is determined.
         (let ((look-ahead
                (%s-lex-analyzer--peek-next-look-ahead))
@@ -563,9 +537,6 @@
                namespace
                namespace
                namespace
-               namespace
-               namespace
-               namespace
                namespace))
 
       (insert "
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 47c0baa3b3..0a7e1e2a6a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -1680,17 +1680,15 @@
      input-tape-index
      pushdown-list
      output
-     translation
-     history)
-  "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with 
PUSHDOWN-LIST, OUTPUT, TRANSLATION and HISTORY."
+     translation)
+  "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with 
PUSHDOWN-LIST, OUTPUT, TRANSLATION."
   (let ((result
          (parser-generator-lr--parse
           nil
           input-tape-index
           pushdown-list
           output
-          translation
-          history)))
+          translation)))
     (nth 0 result)))
 
 (defun parser-generator-lr-translate
@@ -1698,17 +1696,15 @@
      input-tape-index
      pushdown-list
      output
-     translation
-     history)
-  "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with 
PUSHDOWN-LIST, OUTPUT, TRANSLATION and HISTORY."
+     translation)
+  "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with 
PUSHDOWN-LIST, OUTPUT, TRANSLATION."
   (let ((result
          (parser-generator-lr--parse
           t
           input-tape-index
           pushdown-list
           output
-          translation
-          history)))
+          translation)))
     (nth 1 result)))
 
 ;; Algorithm 5.7, p. 375
@@ -1719,9 +1715,8 @@
      pushdown-list
      output
      translation
-     translation-symbol-table-list
-     history)
-  "Perform a LR-parse via lex-analyzer, optionally PERFORM-SDT means to 
perform syntax-directed translation and optioanlly start at INPUT-TAPE-INDEX 
with PUSHDOWN-LIST, OUTPUT, TRANSLATION, TRANSLATION-SYMBOL-TABLE-LIST and 
HISTORY."
+     translation-symbol-table-list)
+  "Perform a LR-parse via lex-analyzer, optionally PERFORM-SDT means to 
perform syntax-directed translation and optioanlly start at INPUT-TAPE-INDEX 
with PUSHDOWN-LIST, OUTPUT, TRANSLATION, TRANSLATION-SYMBOL-TABLE-LIST."
   (unless input-tape-index
     (setq input-tape-index 1))
   (unless pushdown-list
@@ -1754,35 +1749,9 @@
     (unless parser-generator-lr--distinct-goto-tables
       (error "Missing distinct GOTO-tables for grammar!"))
 
-    (let ((accept)
-          (pre-index 0))
+    (let ((accept))
       (while (not accept)
 
-        ;; Save history when index has changed to enable incremental parsing / 
translating
-        (when
-            (>
-             parser-generator-lex-analyzer--index
-             pre-index)
-          ;; We make a copy of the hash-table here to avoid passing same
-          ;; hash-table every-time with pointer
-          (let ((translation-symbol-table-list))
-            (maphash
-             (lambda (key value)
-               (push
-                `(,key ,value)
-                translation-symbol-table-list))
-             translation-symbol-table)
-            (push
-             `(,parser-generator-lex-analyzer--index
-               ,pushdown-list
-               ,output
-               ,translation
-               ,translation-symbol-table-list)
-             history)
-            (setq
-             pre-index
-             parser-generator-lex-analyzer--index)))
-
         ;; (1) The look-ahead string u, consisting of the next k input 
symbols, is determined.
         (let ((look-ahead
                (parser-generator-lex-analyzer--peek-next-look-ahead))
@@ -2201,8 +2170,6 @@
            "Parsed entire string without getting accepting! Output: %s"
            (reverse output))
           (reverse output)))))
-    (when history
-      (setq history (reverse history)))
     (when output
       (setq output (reverse output)))
     (let ((translation-symbol-table-list))
@@ -2216,8 +2183,7 @@
       (list
        output
        translation
-       translation-symbol-table-list
-       history))))
+       translation-symbol-table-list))))
 
 (provide 'parser-generator-lr)
 
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 60b71a0a13..da5be50b33 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -186,7 +186,7 @@
   (parser-generator-process-grammar)
   (should-error
    (parser-generator-lr-generate-parser-tables))
-  (message "Conflicted grammar caused expected exception")
+  (message "Passed test conflicted grammar caused expected exception")
 
   (setq
    parser-generator--global-attributes
@@ -215,7 +215,7 @@
   (parser-generator-process-grammar)
   (should-error
    (parser-generator-lr-generate-parser-tables))
-  (message "Conflicted grammar caused expected exception 2")
+  (message "Passed test conflicted grammar caused expected exception 2")
 
   (setq
    parser-generator-lr--context-sensitive-precedence-attribute
@@ -265,7 +265,7 @@
    (equal
     '((0 (((a) shift))) (1 (((c) shift))) (2 ((($) reduce 2))) (3 ((($) 
accept))) (4 (((b) shift))) (5 (((c) shift))) (6 ((($) reduce 4))) (7 ((($) 
reduce 1))))
     (parser-generator-lr--get-expanded-action-tables)))
-  (message "Grammar not conflicting anymore solution #1")
+  (message "Passed test grammar not conflicting anymore solution #1")
 
   ;; Example parse "a b c"
   ;; stack: 0
@@ -301,7 +301,7 @@
    (equal
     '((0 (((a) shift))) (1 (((c) shift))) (2 ((($) reduce 2))) (3 ((($) 
accept))) (4 (((b) shift))) (5 (((c) reduce 3))) (6 ((($) reduce 4))) (7 ((($) 
reduce 1))))
     (parser-generator-lr--get-expanded-action-tables)))
-  (message "Grammar not conflicting anymore solution #2")
+  (message "Passed test grammar not conflicting anymore solution #2")
 
   ;; Example parse "a b c"
   ;; stack: 0
@@ -339,6 +339,9 @@
 
            (cond
             ((looking-at "\\([0-9]+\\.[0-9]+\\|[0-9]+\\)")
+             (setq
+              new-index
+              (match-end 0))
              (setq
               token
               `(NUM ,(match-beginning 0) . ,(match-end 0))))
@@ -353,8 +356,8 @@
                (setq
                 token
                 `(,symbol ,(match-beginning 0) . ,(match-end 0)))))
-            (t (error "Unexpected input at %d!" index))))
-         (list token nil new-index nil)))))
+            (t (error "Unexpected input at %d!" index)))
+           (list token nil new-index nil) )))))
 
   (setq
    parser-generator-lex-analyzer--get-function
@@ -414,7 +417,7 @@
   (parser-generator-process-grammar)
   (should-error
    (parser-generator-lr-generate-parser-tables))
-  (message "Grammar caused expected conflict 3")
+  (message "Passed test grammar caused expected conflict 3")
 
   (setq
    parser-generator-lr--global-precedence-attributes
@@ -423,7 +426,7 @@
    parser-generator-lr--context-sensitive-precedence-attribute
    '%prec)
   (parser-generator-lr-generate-parser-tables)
-  (message "Grammar not conflicting anymore")
+  (message "Passed test grammar not conflicting anymore")
 
   ;; Parse: 1+1*2\n
   ;;
@@ -464,12 +467,13 @@
        (equal
         '(1 5 5 5 8 6 4 2)
         parse)))
+    (message "Passed parse with correct precedence of 2+3*5 = 2+(3*5)")
     (let ((translate (parser-generator-lr-translate)))
       (should
        (equal
         17.0
         translate)))
-    (message "Passed correct precedence of 2+3*5 = 2+(3*5) = 17")
+    (message "Passed translation with correct precedence of 2+3*5 = 2+(3*5) = 
17")
 
     (kill-region (point-min) (point-max))
     (insert "2*3+5\n")



reply via email to

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