[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 8cc2a5b315 44/82: More work on LLk par
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 8cc2a5b315 44/82: More work on LLk parsing |
Date: |
Thu, 12 May 2022 13:28:16 -0400 (EDT) |
branch: externals/parser-generator
commit 8cc2a5b3153d7f500cb4089c55b9db704b915821
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on LLk parsing
---
parser-generator-ll.el | 30 +++++++++++++++++++---------
test/parser-generator-ll-test.el | 42 +++++++++++++++++++++++++++++++++++++++-
2 files changed, 62 insertions(+), 10 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index d22a23fb3a..649ebd26a4 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -74,17 +74,28 @@
(stack
(list
(list
- (parser-generator--get-grammar-start)
- parser-generator--eof-identifier)))
+ (list
+ (parser-generator--get-grammar-start))
+ (list
+ parser-generator--eof-identifier))))
(output))
- (while accept
+ (parser-generator-lex-analyzer--reset)
+ (while (not accept)
(let* ((state (car stack))
(state-action-table
(gethash
state
parser-generator-ll--parsing-table))
- (look-ahead
- (parser-generator-lex-analyzer--peek-next-look-ahead)))
+ (look-ahead-list
+ (parser-generator-lex-analyzer--peek-next-look-ahead))
+ (look-ahead))
+
+ (unless state-action-table
+ (signal
+ 'error
+ (format
+ "State action table lacks actions for state: '%S'!"
+ state)))
(unless look-ahead
(signal
@@ -92,14 +103,15 @@
(format
"Reached end of input without accepting!")))
+ (setq
+ look-ahead
+ (car (car look-ahead-list)))
+
(unless (gethash look-ahead state-action-table)
(let ((possible-look-aheads))
(maphash
(lambda (k _v) (push k possible-look-aheads))
state-action-table)
- (setq
- possible-look-aheads
- (sort state-action-table 'string>))
(signal
'error
(format
@@ -115,7 +127,7 @@
(cond
((equal action-type 'pop)
(push
- (parser-generator-lex-analyzer--pop-token)
+ (car (parser-generator-lex-analyzer--pop-token))
stack))
((equal action-type 'reduce)
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 8e0277a8e0..2f260c10d6 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -118,7 +118,6 @@
)
(message "Passed Example 5.17 p. 354")
-
(message "Passed tests for (parser-generator-ll--generate-tables)"))
(defun parser-generator-ll-test--generate-parsing-table ()
@@ -278,7 +277,48 @@
"Test `parser-generator-ll-parse'."
(message "Started tests for (parser-generator-ll-parse)")
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-set-grammar
+ '(
+ (S A)
+ (a b)
+ (
+ (S (a A S) b)
+ (A a (b S a))
+ )
+ S
+ )
+ )
+ (parser-generator-process-grammar)
+ (parser-generator-ll-generate-parser-tables)
+ (message "parser-generator-ll--parsing-table: %S"
parser-generator-ll--parsing-table)
+ (setq
+ parser-generator-lex-analyzer--function
+ (lambda (index)
+ (let* ((string '((a 1 . 2) (b 2 . 3) (b 3 . 4) (a 4 . 5) (b 5 . 6)))
+ (string-length (length string))
+ (max-index index)
+ (tokens))
+ (while (and
+ (< (1- index) string-length)
+ (< (1- index) max-index))
+ (push (nth (1- index) string) tokens)
+ (setq index (1+ index)))
+ (nreverse tokens))))
+ (setq
+ parser-generator-lex-analyzer--get-function
+ (lambda (token)
+ (car token)))
+ (parser-generator-ll-parse)
+ (should
+ (equal
+ '(1 4 2 3 2)
+ (parser-generator-ll-parse)))
;; TODO Test example 5.5 p. 340
+
+
;; TODO Test example 5.12 p. 346-347
;; TODO Test example 5.16 p. 352
;; TODO Test example 5.17 p. 355
- [elpa] externals/parser-generator 7ee5504003 45/82: More work on LLk parser, (continued)
- [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
- [elpa] externals/parser-generator 2869417d78 31/82: Made new helper functions to make LL-parsing easier, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 23805731c1 34/82: More work on LL-parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 8cc2a5b315 44/82: More work on LLk parsing,
Christian Johansson <=
- [elpa] externals/parser-generator 5aeee49bd0 48/82: Added another todo note, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4c93e895b3 49/82: Added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ec0711fa84 53/82: Tweaks on internal functions of LLk parsing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ed9933eeba 57/82: Passing a lot of LLk tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 87ded78c28 63/82: LL(1) parser passes test for generating tables and parsing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1ccc742678 72/82: LLk parser passes translation tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1f36aeafdd 74/82: Updated documentation with translate example for LL(1) grammar, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5e6ee66f1f 77/82: Added failing parse tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 0a86c69ef1 19/82: More work on LL-table generation, Christian Johansson, 2022/05/12