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

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

[elpa] externals/parser-generator cf42e67 288/434: Exported parser passe


From: ELPA Syncer
Subject: [elpa] externals/parser-generator cf42e67 288/434: Exported parser passes test
Date: Mon, 29 Nov 2021 15:59:59 -0500 (EST)

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

    Exported parser passes test
---
 parser-generator-lr.el           | 120 +++++++++++++++++++++++++++++----------
 test/parser-generator-lr-test.el |  16 +++++-
 2 files changed, 105 insertions(+), 31 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 75c86d2..ce22b64 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -195,14 +195,14 @@
         "(defun
   %s-lex-analyzer--get-function (token)
   \"Get information about TOKEN.\"
-  (unless 
+  (unless
     %s-lex-analyzer--get-function
     (error \"Missing lex-analyzer get function!\"))
   (let ((meta-information))
-    (condition-case 
+    (condition-case
       error
       (progn
-        (setq 
+        (setq
           meta-information
           (funcall
             %s-lex-analyzer--get-function
@@ -211,7 +211,7 @@
         namespace
         namespace))
       (insert "
-      (error 
+      (error
         (error
           \"Lex-analyze failed to get token meta-data of %s, error: %s\"
           token
@@ -227,12 +227,12 @@
   %s-lex-analyzer--reset
   ()
   \"Reset Lex-Analyzer.\"
-  (setq 
-    %s-lex-analyzer--index 
+  (setq
+    %s-lex-analyzer--index
     1)
-  (when 
+  (when
     %s-lex-analyzer--reset-function
-    (funcall 
+    (funcall
       %s-lex-analyzer--reset-function)))\n"
                namespace
                namespace
@@ -291,7 +291,7 @@
       ;; Lex-Analyzer Pop Token
       (insert
        (format "
-(defun 
+(defun
   %s-lex-analyzer--pop-token ()
   \"Pop next token via lex-analyzer.\"
   (let ((iteration 0)
@@ -336,15 +336,15 @@
   \"If PRODUCTION-NUMBER exist, return it's production.\"
   (gethash
    production-number
-   %s--table-productions-number-reverse))\n\n"
+   %s--table-productions-number-reverse))\n"
                namespace
                namespace))
 
       ;; Valid symbol p
       (insert
        (format "
-(defun 
-  %s--valid-symbol-p 
+(defun
+  %s--valid-symbol-p
   (symbol)
   \"Return whether SYMBOL is valid or not.\"
   (let ((is-valid t))
@@ -354,7 +354,7 @@
              (%s--valid-non-terminal-p symbol)
              (%s--valid-terminal-p symbol))
       (setq is-valid nil))
-    is-valid))\n\n"
+    is-valid))\n"
                namespace
                namespace
                namespace
@@ -364,53 +364,70 @@
       ;; Valid e-p
       (insert
        (format "
-(defun 
+(defun
   %s--valid-e-p
   (symbol)
   \"Return whether SYMBOL is the e identifier or not.\"
   (eq
    symbol
-   %s--e-identifier))\n\n"
+   %s--e-identifier))\n"
                namespace
                namespace))
 
       ;; Valid EOF-p
       (insert
        (format "
-(defun 
+(defun
   %s--valid-eof-p
   (symbol)
   \"Return whether SYMBOL is the EOF identifier or not.\"
-  (eq 
-    symbol 
-    %s--eof-identifier))\n\n"
+  (eq
+    symbol
+    %s--eof-identifier))\n"
                namespace
                namespace))
 
-      ;; TODO --valid-non-terminal-p
-      ;; TODO --valid-terminal-p
+      ;; Valid non-terminal-p
+      (insert
+       (format "
+(defun %s--valid-non-terminal-p (symbol)
+  \"Return whether SYMBOL is a non-terminal in grammar or not.\"
+  (gethash
+   symbol
+   %s--table-non-terminal-p))\n"
+               namespace
+               namespace))
+
+      ;; Valid terminal-p
+      (insert
+       (format "
+(defun %s--valid-terminal-p (symbol)
+  \"Return whether SYMBOL is a terminal in grammar or not.\"
+  (gethash
+   symbol
+   %s--table-terminal-p))\n"
+               namespace
+               namespace))
 
       ;; Get grammar translation by number
       (insert
        (format "
-(defun 
+(defun
   %s--get-grammar-translation-by-number
   (production-number)
   \"If translation for PRODUCTION-NUMBER exist, return it.\"
-  (gethash 
-    production-number 
-    %s--table-translations))\n\n"
+  (gethash
+    production-number
+    %s--table-translations))\n"
                namespace
                namespace))
 
-      ;; TODO Add simple parse and translate function
-
       ;; Parse / translate function
       (insert
        (format "
-(defun 
+(defun
   %s--parse
-  (&optional 
+  (&optional
     input-tape-index
     pushdown-list
     output
@@ -761,8 +778,51 @@
      output
      translation
      translation-symbol-table
-     history)))\n\n")
+     history)))\n")
 
+      ;; Parse
+      (insert
+       (format "
+(defun %s-parse
+    (&optional
+     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.\"
+  (let ((result
+         (%s--parse
+          input-tape-index
+          pushdown-list
+          output
+          translation
+          history)))
+    (nth 0 result)))\n"
+               namespace
+               namespace))
+
+      ;; Translate
+      (insert
+       (format "
+(defun %s-translate
+    (&optional
+     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.\"
+  (let ((result
+         (%s--parse
+          input-tape-index
+          pushdown-list
+          output
+          translation
+          history)))
+    (nth 1 result)))\n"
+               namespace
+               namespace))
 
       ;; Footer
       (insert
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 704790f..0882a3f 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -1183,7 +1183,21 @@
     '(2 2 2 1 1)
     (parser-generator-lr-parse)))
   (let ((export (parser-generator-lr--export-parser "e--")))
-    (message "export:\n%s\n" export))
+
+    (with-temp-buffer
+      (insert export)
+      (eval-buffer)
+      (should
+       (equal
+        t
+        (fboundp 'e---parse)))
+
+      (when (fboundp 'e---parse)
+        (should
+         (equal
+          '(2 2 2 1 1)
+          (e---parse))))
+      (message "Passed parse for exported parser")))
 
   (message "Passed tests for (parser-generator-lr--export-parser)"))
 



reply via email to

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