branch: externals/parser-generator
commit 47fb35eb4727f62dc0845bf3dcd0f6ddf22eb869
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
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")