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

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

[elpa] externals/parser-generator 1f36aeafdd 74/82: Updated documentatio


From: Christian Johansson
Subject: [elpa] externals/parser-generator 1f36aeafdd 74/82: Updated documentation with translate example for LL(1) grammar
Date: Thu, 12 May 2022 13:28:19 -0400 (EDT)

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

    Updated documentation with translate example for LL(1) grammar
---
 docs/Syntax-Analysis/LL1.md      | 18 +++++++----
 parser-generator-ll.el           | 66 ++++++++++++++--------------------------
 parser-generator.el              |  2 +-
 test/parser-generator-ll-test.el |  2 +-
 4 files changed, 37 insertions(+), 51 deletions(-)

diff --git a/docs/Syntax-Analysis/LL1.md b/docs/Syntax-Analysis/LL1.md
index 50c74d9650..741be84429 100644
--- a/docs/Syntax-Analysis/LL1.md
+++ b/docs/Syntax-Analysis/LL1.md
@@ -11,6 +11,7 @@ Perform a left-parse of input-stream.
 ```emacs-lisp
 (require 'parser-generator-ll)
 (require 'ert)
+
 (parser-generator-set-eof-identifier '$)
 (parser-generator-set-e-identifier 'e)
 (parser-generator-set-look-ahead-number 1)
@@ -19,8 +20,14 @@ Perform a left-parse of input-stream.
    (S A)
    (a b)
    (
-    (S (a A S) b)
-    (A a (b S A))
+    (S
+     (a A S (lambda(a b) (format "alfa %s %s" (nth 1 a) (nth 2 a))))
+     (b (lambda(a b) "beta"))
+     )
+    (A
+     (a (lambda(a b) "delta"))
+     (b S A (lambda(a b) (format "gamma %s %s" (nth 1 a) (nth 2 a))))
+     )
     )
    S
    )
@@ -44,12 +51,11 @@ Perform a left-parse of input-stream.
  parser-generator-lex-analyzer--get-function
  (lambda (token)
    (car token)))
-(parser-generator-ll-parse)
 (should
  (equal
-  '(0 3 1 2 1) ;; Example is indexed from 1 so that is why they have '(1 4 2 3 
2)
-  (parser-generator-ll-parse)))
-(message "Passed example 5.5 p. 340")
+  "beta"
+  (parser-generator-ll-translate)))
+(message "Passed translation test 3")
 ```
 
 ## Translate
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 2012cfce19..72cf781191 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -345,27 +345,21 @@
 
          ((parser-generator--valid-non-terminal-p
            rhs-item)
-          (let* ((non-terminal-value-list
-                 (gethash rhs-item symbol-table))
-                (non-terminal-value
-                 (pop non-terminal-value-list)))
+          (let ((non-terminal-value
+                 (gethash rhs-item symbol-table)))
             (push
              (car non-terminal-value)
              args-1)
             (push
              (car (cdr non-terminal-value))
-             args-2)
-            (puthash
-             rhs-item
-             non-terminal-value-list
-             symbol-table)))
+             args-2)))
 
          ((parser-generator--valid-terminal-p
            rhs-item)
           (push
            (parser-generator-lex-analyzer--get-function
             (nth terminal-index terminals))
-            args-1)
+           args-1)
           (push
            (nth terminal-index terminals)
            args-2)
@@ -398,25 +392,18 @@
                 args-2)))
           (parser-generator--debug
            (message
-           "\ntranslation-symbol-table: %S = %S (processed)\n"
+            "\ntranslation-symbol-table: %S = %S (processed)\n"
+            production-lhs
+            partial-translation))
+          (puthash
            production-lhs
+           (list
+            partial-translation
+            args-2)
+           symbol-table)
+          (setq
+           translation
            partial-translation))
-          (let ((symbol-translations
-                 (gethash
-                  production-lhs
-                  symbol-table)))
-            (push
-             (list
-              partial-translation
-              args-2)
-             symbol-translations)
-            (puthash
-             production-lhs
-             symbol-translations
-             symbol-table)
-            (setq
-             translation
-             partial-translation)))
 
       ;; When no translation is specified just use popped contents as 
translation
       (let ((partial-translation
@@ -425,23 +412,16 @@
               args-2)))
         (parser-generator--debug
          (message
-         "\ntranslation-symbol-table: %S = %S (generic)\n"
+          "\ntranslation-symbol-table: %S = %S (generic)\n"
+          production-lhs
+          partial-translation))
+        (puthash
          production-lhs
-         partial-translation))
-        (let ((symbol-translations
-               (gethash
-                production-lhs
-                symbol-table)))
-          (push
-           partial-translation
-           symbol-translations)
-          (puthash
-           production-lhs
-           symbol-translations
-           symbol-table)
-          (setq
-           translation
-           (car partial-translation)))))
+         partial-translation
+         symbol-table)
+        (setq
+         translation
+         (car partial-translation))))
 
     translation))
 
diff --git a/parser-generator.el b/parser-generator.el
index dfd698663e..4b749f7f31 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -45,7 +45,7 @@
 
 (defvar
   parser-generator--debug
-  t
+  nil
   "Whether to print debug messages or not.")
 
 (defvar
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index e5cf346430..da731424ba 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -517,7 +517,7 @@
      (car token)))
   (should
    (equal
-    "delta sven laval"
+    "beta"
     (parser-generator-ll-translate)))
   (message "Passed translation test 3")
 



reply via email to

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