[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 34ab0f1718 21/82: More various tweaks
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 34ab0f1718 21/82: More various tweaks |
Date: |
Thu, 12 May 2022 13:28:14 -0400 (EDT) |
branch: externals/parser-generator
commit 34ab0f171829eb984597852c08b895259ef66ac2
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More various tweaks
---
parser-generator-ll.el | 27 +++++++++++++++++++++------
test/parser-generator-ll-test.el | 40 +++++++++++++++++++++++++++++++---------
2 files changed, 52 insertions(+), 15 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 4356d5f906..5ec448db43 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -232,13 +232,28 @@
(dolist (table tables)
(let* ((key (nth 0 table))
(value (nth 1 table))
- (stack-symbol (car (nth 0 key)))
- (local-follow-set (nth 1 key)))
+ (key-stack-symbol (car (nth 0 key)))
+ (key-parent-follow-set (nth 1 key))
+ (parse-table))
(dolist (look-ahead-row value)
- (let ((look-ahead (nth 0 look-ahead-row))
- (right-hand-side (nth 1 look-ahead-row)))
- (dolist (right-hand-symbol right-hand-side))
- ))))
+ (let* ((look-ahead (nth 0 look-ahead-row))
+ (right-hand-side (nth 1 look-ahead-row))
+ (local-follow-sets (nth 2 look-ahead-row))
+ (non-terminal-index 0)
+ (sub-symbol-index 0)
+ (sub-symbol-length (length right-hand-side)))
+ (while (< sub-symbol-index sub-symbol-length)
+ (let ((sub-symbol (nth sub-symbol-index right-hand-side)))
+ (when (parser-generator--valid-non-terminal-p
+ sub-symbol)
+ (let ((local-follow (nth non-terminal-index
local-follow-sets)))
+ )
+ (setq
+ non-terminal-index
+ (1+ non-terminal-index))))
+ (setq
+ sub-symbol-index
+ (1+ sub-symbol-index)))))))
;;
;; (2) M(a, av) = pop for all v in E where |E| = k-1 -> move to parser
logic
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 6585373579..7a5f86dbe2 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -74,9 +74,31 @@
(parser-generator-set-e-identifier 'e)
(parser-generator-set-look-ahead-number 2)
(let* ((tables
- '((((A) (b a)) (((b b) (b) nil) ((b a) (e) nil)))
- (((A) (a a)) (((a a) (e) nil) ((b a) (b) nil)))
- (((S) nil) (((a b) (a A a a) ((a a))) ((a a) (a A a a) ((a a)))
((b b) (b A b a) ((b a)))))))
+ '(
+ (
+ ((A) (b a))
+ (
+ ((b b) (b) nil)
+ ((b a) (e) nil)
+ )
+ )
+ (
+ ((A) (a a))
+ (
+ ((a a) (e) nil)
+ ((b a) (b) nil)
+ )
+ )
+ (
+ ((S) nil)
+ (
+ ((a b) (a A a a) ((a a)))
+ ((a a) (a A a a) ((a a)))
+ ((b b) (b A b a) ((b a)))
+ )
+ )
+ )
+ )
(parser-tables
(parser-generator-ll--generate-parsing-table
tables)))
@@ -87,22 +109,22 @@
(equal
'(
(
- ((S) nil)
+ ((S) nil) ;; T0
(
- ((a a) reduce (a T1 a a) 1)
- ((a b) reduce (a T1 a a) 1)
- ((b b) reduce (b T2 b a) 2)
+ ((a a) reduce (a ((A) (a a)) a a) 1)
+ ((a b) reduce (a ((A) (a a)) a a) 1)
+ ((b b) reduce (b ((A) (b a)) b a) 2)
)
)
(
- ((A) (a a))
+ ((A) (a a)) ;; T1
(
((a a) reduce (e) 4)
((b a) reduce (b) 3)
)
)
(
- ((A) (a b))
+ ((A) (a b)) ;; T2
(
((b a) reduce (e) 4)
((b b) reduce (b) 3)
- [elpa] externals/parser-generator 2598402cc7 56/82: Added TODO item, (continued)
- [elpa] externals/parser-generator 2598402cc7 56/82: Added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7f3c384b6d 55/82: Passing more LLk tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 0856bb7784 58/82: Started on refactor were k=1 will be treated with different algorithm, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2181545d26 64/82: Implemented test for validation of LL(1) grammar, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4051737aeb 65/82: Added TODO item for LL(k) translation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08af836006 69/82: More work on SDT for LL grammar, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7d87a2d154 79/82: Implemented exported LL(k) and LL(1) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 75323b10e5 81/82: Merge branch 'feature/llk-parser', Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator db91a5f203 82/82: Removed unused function, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 315e40eff8 10/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 34ab0f1718 21/82: More various tweaks,
Christian Johansson <=
- [elpa] externals/parser-generator 064bd259ff 26/82: Passing LLk validation tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f0de6698b9 29/82: Added todo item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 97919972a7 35/82: Improved debug message, added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator e55a3f8a37 38/82: Updated TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7ee5504003 45/82: More work on LLk parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator fd2f90dd81 47/82: Added TODO-item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b41b2dbffe 68/82: Removed debug output, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 566228f16c 71/82: More work on LLk translation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 234a6ca2db 70/82: More work on LLk SDT, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ff261d9a4e 75/82: Using stack for symbols value in SDT, Christian Johansson, 2022/05/12