[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator f0de6698b9 29/82: Added todo item
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator f0de6698b9 29/82: Added todo item |
Date: |
Thu, 12 May 2022 13:28:15 -0400 (EDT) |
branch: externals/parser-generator
commit f0de6698b984d8ed07fe07e66b36158407eb1dd7
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added todo item
---
parser-generator-ll.el | 16 +++++++--
parser-generator.el | 2 +-
test/parser-generator-ll-test.el | 71 ++++++++++++++++++++++++++++++++++++----
3 files changed, 79 insertions(+), 10 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 58d6d10576..82f4e383f7 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -59,7 +59,7 @@
(list
(list start)
start-rhs
- nil)
+ (list parser-generator--eof-identifier))
stack))))
(setq stack (nreverse stack))
(parser-generator--debug
@@ -79,6 +79,10 @@
(parser-generator--first parent-follow nil t t))
(look-aheads)
(sets))
+ (parser-generator--debug
+ (message "\nproduction-lhs: %S" production-lhs)
+ (message "production-rhs: %S" production-rhs)
+ (message "parent-follow: %S" parent-follow))
(cond
((and first-rhs
@@ -106,6 +110,9 @@
"Unexpected empty FIRST for production: %S and parent-follow: %S"
production
parent-follow)))
+ (parser-generator--debug
+ (message "look-aheads: %S" look-aheads))
+ ;; TODO merge-max-terminal-sets should do the right thing
;; For each non-terminal in the production right-hand side
;; push a new item to stack with a local-follow
@@ -116,6 +123,9 @@
(let ((sub-symbol (nth sub-symbol-index production-rhs)))
(when (parser-generator--valid-non-terminal-p
sub-symbol)
+ (parser-generator--debug
+ (message
+ "\nnon-terminal sub-symbol: %S" sub-symbol))
(let* ((follow-set
(nthcdr (1+ sub-symbol-index) production-rhs))
(merged-follow
@@ -127,7 +137,7 @@
sub-symbol)))
(parser-generator--debug
(message
- "\nfollow-set: %S for %S in %S"
+ "follow-set: %S for %S in %S"
follow-set
(nth sub-symbol-index production-rhs)
production-rhs)
@@ -189,6 +199,8 @@
item-hash-key
t
distinct-item-p)
+ (parser-generator--debug
+ (message "new table: %S" table))
(if (gethash
table-hash-key
tables)
diff --git a/parser-generator.el b/parser-generator.el
index d995fcbf7d..602391eb10 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -45,7 +45,7 @@
(defvar
parser-generator--debug
- nil
+ t
"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 3a1d455f77..6f103ef8f8 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -33,27 +33,27 @@
)
(parser-generator-process-grammar)
(let ((tables (parser-generator-ll--generate-tables)))
- ;; (message "tables: %S" tables)
+ (message "tables: %S" tables)
(should
(equal
tables
'(
(
- ((A) (b a))
+ ((A) (b a)) ;; T A,{ba}
(
((b b) (b) nil)
((b a) (e) nil)
)
)
(
- ((A) (a a))
+ ((A) (a a)) ;; T A,{aa}
(
((a a) (e) nil)
((b a) (b) nil)
)
)
(
- ((S) nil)
+ ((S) ($)) ;; T0
(
((a b) (a A a a) ((a a)))
((a a) (a A a a) ((a a)))
@@ -61,8 +61,66 @@
)
)
)
+ )
+ ))
+
+ ;; TODO Pass Example 5.17 here
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 2)
+ (parser-generator-set-grammar
+ '(
+ (S A)
+ (a b)
+ (
+ (S e (a b A))
+ (A (S a a) b)
+ )
+ S
+ )
+ )
+ (parser-generator-process-grammar)
+ (let* ((tables
+ (parser-generator-ll--generate-tables)))
+ (message "tables: %S" tables)
+ (should
+ (equal
+ tables
+ '(
+ (
+ ((S) nil) ;; T0
+ (
+ (($ $) (e) nil)
+ ((a b) (a b A) $)
+ )
+ )
+ (
+ ((A) nil) ;; T1
+ (
+ ((b $) (b) nil)
+ ((a a) (S a a) ((a a)))
+ ((a b) (S a a) ((a a)))
+ )
+ )
+ (
+ ((S) (a a)) ;; T2
+ (
+ ((a a) (e) nil)
+ ((a b) (a B a) ((a a)))
+ )
+ )
+ (
+ ((A) (a a)) ;; T3
+ (
+ ((a a) (S a a) ((a a)))
+ ((a b) (S a a) ((a a)))
+ ((b a) (b) nil)
+ )
+ )
+ )
))
- tables)
+ )
+
(message "Passed tests for (parser-generator-ll--generate-tables)"))
@@ -171,11 +229,10 @@
)
(parser-generator-process-grammar)
(let* ((tables
- (parser-generator-ll--generate-tables))
+ (parser-generator-ll--generate-tables)) ;; TODO Replace with
hard-coded value here
(parser-tables
(parser-generator-ll--generate-parsing-table
tables)))
- (message "tables: %S" tables)
(message "parser-tables: %S" parser-tables)
(should
(equal
- [elpa] externals/parser-generator 0856bb7784 58/82: Started on refactor were k=1 will be treated with different algorithm, (continued)
- [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, 2022/05/12
- [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 <=
- [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
- [elpa] externals/parser-generator de7c45c511 78/82: Started with LL-export functions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5be162966b 80/82: Fixed byte-compilation issue in exported LL parser, Christian Johansson, 2022/05/12