[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")
- [elpa] externals/parser-generator 5be162966b 80/82: Fixed byte-compilation issue in exported LL parser, (continued)
- [elpa] externals/parser-generator 5be162966b 80/82: Fixed byte-compilation issue in exported LL parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2869417d78 31/82: Made new helper functions to make LL-parsing easier, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 23805731c1 34/82: More work on LL-parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 8cc2a5b315 44/82: More work on LLk parsing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5aeee49bd0 48/82: Added another todo note, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4c93e895b3 49/82: Added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ec0711fa84 53/82: Tweaks on internal functions of LLk parsing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ed9933eeba 57/82: Passing a lot of LLk tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 87ded78c28 63/82: LL(1) parser passes test for generating tables and parsing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1ccc742678 72/82: LLk parser passes translation tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1f36aeafdd 74/82: Updated documentation with translate example for LL(1) grammar,
Christian Johansson <=
- [elpa] externals/parser-generator 5e6ee66f1f 77/82: Added failing parse tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 0a86c69ef1 19/82: More work on LL-table generation, Christian Johansson, 2022/05/12