branch: externals/parser-generator commit 57c6fdda2fcc5c6f0288c3f1a64c0a16ed922926 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Passing test for generating LL-parser hash-table --- parser-generator-ll.el | 2 +- parser-generator.el | 5 ++++- test/parser-generator-ll-test.el | 15 +++++++++++---- 3 files changed, 16 insertions(+), 6 deletions(-) diff --git a/parser-generator-ll.el b/parser-generator-ll.el index 7ce053e521..d22a23fb3a 100644 --- a/parser-generator-ll.el +++ b/parser-generator-ll.el @@ -99,7 +99,7 @@ state-action-table) (setq possible-look-aheads - (sort state-action-table)) + (sort state-action-table 'string>)) (signal 'error (format diff --git a/parser-generator.el b/parser-generator.el index 8425475186..7ee5f722d6 100644 --- a/parser-generator.el +++ b/parser-generator.el @@ -367,7 +367,10 @@ (if (hash-table-p hash-table) (progn (maphash - (lambda (k v) (push (list k v) result)) + (lambda (k v) + (if (hash-table-p v) + (push (list k (parser-generator--hash-to-list v un-sorted)) result) + (push (list k v) result))) hash-table) (if un-sorted (nreverse result) diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el index f2c6f0554d..8e0277a8e0 100644 --- a/test/parser-generator-ll-test.el +++ b/test/parser-generator-ll-test.el @@ -305,12 +305,19 @@ ) (parser-generator-process-grammar) (parser-generator-ll-generate-parser-tables) - (message "parser-generator-ll--parsing-table: %S" parser-generator-ll--parsing-table) (should (equal - #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data (((S) ($)) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data ((a b) (reduce (a b ((A) ($))) 1) ($ $) (reduce (e) 0))) ((A) ($)) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125 data ((b $) (reduce (b) 3) (a a) (reduce (((S) (a a)) a a) 2) (a b) (reduce (((S) (a a)) a a) 2))) ((S) (a a)) #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.81 [...] - parser-generator-ll--parsing-table)) - ;; TODO Make this pass + '( + (((S) ($)) (((a b) (reduce (a b ((A) ($))) 1)) (($ $) (reduce (e) 0)))) + (((A) ($)) (((b $) (reduce (b) 3)) ((a a) (reduce (((S) (a a)) a a) 2)) ((a b) (reduce (((S) (a a)) a a) 2)))) + (((S) (a a)) (((a a) (reduce (e) 0)) ((a b) (reduce (a b ((A) (a a))) 1)))) + (((A) (a a)) (((b a) (reduce (b) 3)) ((a a) (reduce (((S) (a a)) a a) 2)) ((a b) (reduce (((S) (a a)) a a) 2)))) + (b (((b b) pop) ((b a) pop) ((b $) pop))) + (a (((a b) pop) ((a a) pop) ((a $) pop))) + ($ ((($ $) accept)))) + (parser-generator--hash-to-list + parser-generator-ll--parsing-table + t))) (message "Passed tests for (parser-generator-ll-generate-parser-tables)"))