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

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

[elpa] externals/parser-generator ecbbf21 290/434: Added test for export


From: ELPA Syncer
Subject: [elpa] externals/parser-generator ecbbf21 290/434: Added test for exported translator
Date: Mon, 29 Nov 2021 16:00:00 -0500 (EST)

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

    Added test for exported translator
---
 parser-generator-lex-analyzer.el        |  2 +-
 parser-generator-lr-export.el           | 31 ++++++++---------
 test/parser-generator-lr-export-test.el | 60 +++++++++++++++++++++++++++++++--
 3 files changed, 73 insertions(+), 20 deletions(-)

diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index bce7d04..2f3dff7 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -97,7 +97,7 @@
          (error
           "Lex-analyze failed to peek next look-ahead at %s, error: %s"
           index
-          (car (cdr error))))))
+          error))))
     (nreverse look-ahead)))
 
 (defun parser-generator-lex-analyzer--pop-token ()
diff --git a/parser-generator-lr-export.el b/parser-generator-lr-export.el
index 9ecd2b7..4df6e21 100644
--- a/parser-generator-lr-export.el
+++ b/parser-generator-lr-export.el
@@ -54,56 +54,56 @@
       ;; Action-tables
       (insert
        (format
-        "(defconst\n  %s--action-tables\n  %s\n  \"Generated 
action-tables.\")\n\n"
+        "(defconst\n  %s--action-tables\n  %S\n  \"Generated 
action-tables.\")\n\n"
         namespace
         parser-generator-lr--action-tables))
 
       ;; Goto-tables
       (insert
        (format
-        "(defconst\n  %s--goto-tables\n  %s\n  \"Generated goto-tables.\")\n\n"
+        "(defconst\n  %s--goto-tables\n  %S\n  \"Generated goto-tables.\")\n\n"
         namespace
         parser-generator-lr--goto-tables))
 
       ;; Table production-number
       (insert
        (format
-        "(defconst\n  %s--table-productions-number-reverse\n  %s\n  
\"Hash-table indexed by production-number and value is production.\")\n\n"
+        "(defconst\n  %s--table-productions-number-reverse\n  %S\n  
\"Hash-table indexed by production-number and value is production.\")\n\n"
         namespace
         parser-generator--table-productions-number-reverse))
 
       ;; Table look-aheads
       (insert
        (format
-        "(defconst\n  %s--table-look-aheads\n  %s\n  \"Hash-table of valid 
look-aheads.\")\n\n"
+        "(defconst\n  %s--table-look-aheads\n  %S\n  \"Hash-table of valid 
look-aheads.\")\n\n"
         namespace
         parser-generator--table-look-aheads-p))
 
       ;; Table terminals
       (insert
        (format
-        "(defconst\n  %s--table-terminal-p\n  %s\n  \"Hash-table of valid 
terminals.\")\n\n"
+        "(defconst\n  %s--table-terminal-p\n  %S\n  \"Hash-table of valid 
terminals.\")\n\n"
         namespace
         parser-generator--table-non-terminal-p))
 
       ;; Table non-terminals
       (insert
        (format
-        "(defconst\n  %s--table-non-terminal-p\n  %s\n  \"Hash-table of valid 
non-terminals.\")\n\n"
+        "(defconst\n  %s--table-non-terminal-p\n  %S\n  \"Hash-table of valid 
non-terminals.\")\n\n"
         namespace
         parser-generator--table-non-terminal-p))
 
       ;; Table translations
       (insert
        (format
-        "(defconst\n  %s--table-translations\n  %s\n  \"Hash-table of 
translations.\")\n\n"
+        "(defconst\n  %s--table-translations\n  %S\n  \"Hash-table of 
translations.\")\n\n"
         namespace
         parser-generator--table-translations))
 
       ;; Lex-Analyzer Get Function
       (insert
        (format
-        "(defconst\n  %s-lex-analyzer--get-function\n  (lambda %s %s)\n  
\"Lex-Analyzer Get Function.\")\n\n"
+        "(defconst\n  %s-lex-analyzer--get-function\n  (lambda %S %S)\n  
\"Lex-Analyzer Get Function.\")\n\n"
         namespace
         (nth 2 parser-generator-lex-analyzer--get-function)
         (nth 3 parser-generator-lex-analyzer--get-function)))
@@ -111,7 +111,7 @@
       ;; Lex-Analyzer Function
       (insert
        (format
-        "(defconst\n  %s-lex-analyzer--function\n  (lambda %s %s)\n  
\"Lex-Analyzer Function.\")\n\n"
+        "(defconst\n  %s-lex-analyzer--function\n  (lambda %S %S)\n  
\"Lex-Analyzer Function.\")\n\n"
         namespace
         (nth 2 parser-generator-lex-analyzer--function)
         (nth 3 parser-generator-lex-analyzer--function)))
@@ -124,7 +124,7 @@
       (if parser-generator-lex-analyzer--reset-function
           (insert
            (format
-            "(lambda %s %s)\n"
+            "(lambda %S %S)\n"
             (nth 2 parser-generator-lex-analyzer--reset-function)
             (nth 3 parser-generator-lex-analyzer--reset-function)))
         (insert "nil\n"))
@@ -133,21 +133,21 @@
       ;; E-identifier
       (insert
        (format
-        "(defconst\n  %s--e-identifier\n  '%s\n  \"e-identifier\")\n\n"
+        "(defconst\n  %s--e-identifier\n  '%S\n  \"e-identifier\")\n\n"
         namespace
         parser-generator--e-identifier))
 
       ;; EOF-identifier
       (insert
        (format
-        "(defconst\n  %s--eof-identifier\n  '%s\n  \"EOF-identifier.\")\n\n"
+        "(defconst\n  %s--eof-identifier\n  '%S\n  \"EOF-identifier.\")\n\n"
         namespace
         parser-generator--eof-identifier))
 
       ;; Look-ahead number
       (insert
        (format
-        "(defconst\n  %s--look-ahead-number\n  %s\n  \"Look-ahead 
number.\")\n\n"
+        "(defconst\n  %s--look-ahead-number\n  %S\n  \"Look-ahead 
number.\")\n\n"
         namespace
         parser-generator--look-ahead-number))
 
@@ -169,9 +169,6 @@
         "(defun
   %s-lex-analyzer--get-function (token)
   \"Get information about TOKEN.\"
-  (unless
-    %s-lex-analyzer--get-function
-    (error \"Missing lex-analyzer get function!\"))
   (let ((meta-information))
     (condition-case
       error
@@ -259,7 +256,7 @@
          (error
           \"Lex-analyze failed to peek next look-ahead at %s, error: %s\"
           index
-          (car (cdr error))))))
+          error))))
     (nreverse look-ahead)))\n")
 
       ;; Lex-Analyzer Pop Token
diff --git a/test/parser-generator-lr-export-test.el 
b/test/parser-generator-lr-export-test.el
index f03b70c..0b81d8a 100644
--- a/test/parser-generator-lr-export-test.el
+++ b/test/parser-generator-lr-export-test.el
@@ -33,16 +33,18 @@
          (push (nth (1- index) string) tokens)
          (setq index (1+ index)))
        (nreverse tokens))))
+
   (setq
    parser-generator-lex-analyzer--get-function
    (lambda (token)
      (car token)))
 
-  ;; Test parser
+  ;; Test parse
   (should
    (equal
     '(2 2 2 1 1)
     (parser-generator-lr-parse)))
+  (message "Passed parse before export")
 
   ;; Export parser
   (let ((export (parser-generator-lr-export-to-elisp "e--")))
@@ -54,7 +56,6 @@
        (equal
         t
         (fboundp 'e---parse)))
-
       (when (fboundp 'e---parse)
         (should
          (equal
@@ -62,6 +63,61 @@
           (e---parse))))
       (message "Passed parse for exported parser")))
 
+  (let ((buffer (generate-new-buffer "*a*")))
+    (switch-to-buffer buffer)
+    (insert "aabb")
+
+    (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b" 
(lambda(args) (let ((list "")) (dolist (item args) (when item (setq list 
(format "%s%s" item list)))) list)))) (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)
+       (with-current-buffer "*a*"
+         (when (<= (+ index 1) (point-max))
+           (let ((start index)
+                 (end (+ index 1)))
+             (let ((token (buffer-substring-no-properties start end)))
+               `(,token ,start . ,end)))))))
+
+    (setq
+     parser-generator-lex-analyzer--get-function
+     (lambda (token)
+       (with-current-buffer "*a*"
+         (let ((start (car (cdr token)))
+               (end (cdr (cdr token))))
+           (when (<= end (point-max))
+             (buffer-substring-no-properties start end))))))
+
+    (should
+     (equal
+      "bbaaba"
+      (parser-generator-lr-translate)))
+
+    (message "Passed translate before export")
+
+    ;; Export parser
+    (let ((export (parser-generator-lr-export-to-elisp "fa")))
+      (message "export:\n%s\n" export)
+      (with-temp-buffer
+        (insert export)
+        (eval-buffer)
+        (should
+         (equal
+          t
+          (fboundp 'fa-translate))))
+
+      (message "Executing exported translater")
+
+      (when (fboundp 'fa-translate)
+        (should
+         (equal
+          "bbaaba"
+          (fa-translate))))
+      (message "Passed translate for exported parser")))
+
   (message "Passed tests for (parser-generator-lr-export-to-elisp)"))
 
 (defun parser-generator-lr-export-test ()



reply via email to

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