branch: externals/parser-generator commit 47fb35eb4727f62dc0845bf3dcd0f6ddf22eb869 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
More work on a more generalized LR Parser --- parser-generator-lr.el | 13 +++++++------ test/parser-generator-lr-test.el | 36 ++++++++++++++++++------------------ 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/parser-generator-lr.el b/parser-generator-lr.el index 4048b33..369b4eb 100644 --- a/parser-generator-lr.el +++ b/parser-generator-lr.el @@ -261,7 +261,7 @@ (parser-generator--debug (message "Set already exists in: %s" goto)) (push - `(,(car symbol) ,goto) + `(,symbol ,goto) goto-table-table)) (parser-generator--debug @@ -272,7 +272,7 @@ ;; then add a' to S as an unmarked set of items (push - `(,(car symbol) ,lr-item-set-new-index) + `(,symbol ,lr-item-set-new-index) goto-table-table) (push `(,lr-item-set-new-index ,prefix-lr-items) @@ -821,8 +821,8 @@ ;; there is no next input symbol or g(a) is undefined, halt ;; and declare error. - (let ((a (list (car look-ahead))) - (a-full (list (car look-ahead-full)))) + (let ((a look-ahead) + (a-full look-ahead-full)) (let ((goto-table (gethash table-index @@ -837,7 +837,7 @@ searching-match (< goto-index goto-table-length)) (let ((goto-item (nth goto-index goto-table))) - (let ((goto-item-symbol (list (car goto-item))) + (let ((goto-item-symbol (car goto-item)) (goto-item-next-index (car (cdr goto-item)))) (push goto-item-symbol possible-look-aheads) @@ -850,6 +850,7 @@ (setq searching-match nil)))) (setq goto-index (1+ goto-index))) + (parser-generator--debug (message "next-index: %s" next-index)) @@ -972,7 +973,7 @@ searching-match (< goto-index goto-table-length)) (let ((goto-item (nth goto-index goto-table))) - (let ((goto-item-symbol (list (car goto-item))) + (let ((goto-item-symbol (car goto-item)) (goto-item-next-index (car (cdr goto-item)))) (parser-generator--debug (message "goto-item: %s" goto-item) diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index f54d4d0..79b537a 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -65,13 +65,13 @@ (should (equal - '((0 ((S 1))) - (1 ((a 2))) - (2 ((S 3))) - (3 ((a 4) (b 5))) - (4 ((S 6))) + '((0 (((S) 1))) + (1 (((a) 2))) + (2 (((S) 3))) + (3 (((a) 4) ((b) 5))) + (4 (((S) 6))) (5 nil) - (6 ((a 4) (b 7))) + (6 (((a) 4) ((b) 7))) (7 nil)) (parser-generator--hash-to-list parser-generator-lr--goto-tables))) @@ -140,13 +140,13 @@ (should (equal - '((0 ((S 1))) - (1 ((a 2))) - (2 ((S 3))) - (3 ((a 4) (b 5))) - (4 ((S 6))) + '((0 (((S) 1))) + (1 (((a) 2))) + (2 (((S) 3))) + (3 (((a) 4) ((b) 5))) + (4 (((S) 6))) (5 nil) - (6 ((a 4) (b 7))) + (6 (((a) 4) ((b) 7))) (7 nil)) (parser-generator--hash-to-list parser-generator-lr--goto-tables))) @@ -182,13 +182,13 @@ (should (equal - '((0 ((S 1))) - (1 (("a" 2))) - (2 ((S 3))) - (3 (("a" 4) ("b" 5))) - (4 ((S 6))) + '((0 (((S) 1))) + (1 ((("a") 2))) + (2 (((S) 3))) + (3 ((("a") 4) (("b") 5))) + (4 (((S) 6))) (5 nil) - (6 (("a" 4) ("b" 7))) + (6 ((("a") 4) (("b") 7))) (7 nil)) (parser-generator--hash-to-list parser-generator-lr--goto-tables))) (message "Passed GOTO-tables with tokens as strings")