[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator e6f9ac545f 37/82: Cleanup after byte-c
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator e6f9ac545f 37/82: Cleanup after byte-compilation |
Date: |
Thu, 12 May 2022 13:28:15 -0400 (EDT) |
branch: externals/parser-generator
commit e6f9ac545f64f140908c42901be4bd9d12e1cf1f
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Cleanup after byte-compilation
---
parser-generator-ll.el | 27 ++++------
parser-generator.el | 2 +-
test/parser-generator-ll-test.el | 114 +++++++++++++++++++++++----------------
3 files changed, 79 insertions(+), 64 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index c31b8ec216..4df259ef93 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -28,10 +28,11 @@
(defun parser-generator-ll-generate-parser-tables ()
"Generate parsing tables for grammar."
(message "\n;; Starting generation of LL(k) parser-tables..\n")
- (unless (parser-generator-ll--valid-llk-p parser-generator--grammar)
+ (unless (parser-generator-ll--valid-grammar-p)
(error "Invalid grammar specified!"))
- (let* ((tables (parser-generator-ll--generate-tables))
- (parsing-table (parser-generator-ll--generate-parsing-table)))
+ (let ((parsing-table
+ (parser-generator-ll--generate-parsing-table
+ (parser-generator-ll--generate-tables))))
(setq
parser-generator-ll--parsing-table
parsing-table)
@@ -48,16 +49,13 @@
(distinct-item-p (make-hash-table :test 'equal))
(stack)
(distinct-stack-item-p (make-hash-table :test 'equal))
- (stack-item)
- (k (max 1 parser-generator--look-ahead-number)))
+ (stack-item))
;; (1) Construct T_0, the LL(k) table associated with S {e}
(let* ((start (parser-generator--get-grammar-start))
(start-rhss (parser-generator--get-grammar-rhs start)))
(dolist (start-rhs start-rhss)
- (let* ((production
- (list (list start) start-rhs))
- (initial-stack-item
+ (let* ((initial-stack-item
(list
(list start)
start-rhs
@@ -122,7 +120,7 @@
first-parent-follow)))
(t (error
"Unexpected empty FIRST for production: %S and parent-follow: %S"
- production
+ (list production-lhs production-rhs)
parent-follow)))
(parser-generator--debug
@@ -185,9 +183,7 @@
local-follow
sets)
(dolist (sub-symbol-rhs sub-symbol-rhss)
- (let* ((sub-symbol-production
- (list (list sub-symbol) sub-symbol-rhs))
- (new-stack-item
+ (let* ((new-stack-item
(list
(list sub-symbol)
sub-symbol-rhs
@@ -328,8 +324,6 @@
(dolist (table tables)
(let* ((key (nth 0 table))
(value (nth 1 table))
- (key-stack-symbol (car (nth 0 key)))
- (key-parent-follow-set (nth 1 key))
(left-hand-side (nth 0 key))
(parse-table))
(dolist (look-ahead-row value)
@@ -388,7 +382,6 @@
"Test for LL(k)-ness. Output t if grammar is LL(k). nil otherwise."
(let ((stack)
(stack-item)
- (k (max 1 parser-generator--look-ahead-number))
(distinct-production-p (make-hash-table :test 'equal))
(valid t))
@@ -412,9 +405,7 @@
stack
valid)
(setq stack-item (pop stack))
- (let ((production-lhs
- (nth 0 stack-item))
- (production-rhs
+ (let ((production-rhs
(nth 1 stack-item)))
;; For each non-terminal in the production right-hand side
diff --git a/parser-generator.el b/parser-generator.el
index 2b0b760717..8425475186 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -45,7 +45,7 @@
(defvar
parser-generator--debug
- t
+ nil
"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 fd6f70c598..58829b2f18 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -31,7 +31,6 @@
)
(parser-generator-process-grammar)
(let ((tables (parser-generator-ll--generate-tables)))
- ;; (message "tables 1: %S" tables)
(should
(equal
tables
@@ -126,44 +125,29 @@
"Test `parser-generator-ll--generate-parsing-table'."
(message "Started tests for (parser-generator-ll--generate-parsing-table)")
- (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 (a A a a) (b A b a))
+ (A b e)
+ )
+ S
+ )
+ )
(parser-generator-process-grammar)
- (let* ((tables
- '(
- (
- ((A) (b a))
- (
- ((b b) (b) nil)
- ((b a) (e) nil)
- )
- )
- (
- ((A) (a a))
- (
- ((a a) (e) nil)
- ((b a) (b) nil)
- )
- )
- (
- ((S) nil)
- (
- ((a b) (a A a a) ((a a)))
- ((a a) (a A a a) ((a a)))
- ((b b) (b A b a) ((b a)))
- )
- )
- )
- )
- (parser-tables
- (parser-generator-ll--generate-parsing-table
- tables)))
+ (let ((parser-tables
+ (parser-generator-ll--generate-parsing-table
+ (parser-generator-ll--generate-tables))))
+ ;; (message "parser-tables: %S" parser-tables)
(should
(equal
'(
(
- ((S) nil) ;; T0
+ ((S) ($)) ;; T0
(
((b b) reduce (b ((A) (b a)) b a) 1)
((a a) reduce (a ((A) (a a)) a a) 0)
@@ -178,7 +162,7 @@
)
)
(
- ((A) (b a));; T2
+ ((A) (b a)) ;; T2
(
((b a) reduce (e) 3)
((b b) reduce (b) 2)
@@ -206,9 +190,8 @@
)
)
parser-tables)))
- (message "Passed Example 5.16 p. 352")
+ (message "Passed Example 5.15 p. 351 and 5.16 p. 352")
- ;; TODO Make this pass
(parser-generator-set-eof-identifier '$)
(parser-generator-set-e-identifier 'e)
(parser-generator-set-look-ahead-number 2)
@@ -224,25 +207,66 @@
)
)
(parser-generator-process-grammar)
- (let* ((tables
- (parser-generator-ll--generate-tables)) ;; TODO Replace with
hard-coded value here
- (parser-tables
- (parser-generator-ll--generate-parsing-table
- tables)))
- (message "parser-tables: %S" parser-tables)
+ (let ((parser-tables
+ (parser-generator-ll--generate-parsing-table
+ (parser-generator-ll--generate-tables))))
+ ;; (message "parser-tables: %S" parser-tables)
(should
(equal
'(
(
- ((S) nil)
+ ((S) ($)) ;; T0
+ (
+ ((a b) reduce (a b ((A) ($))) 1)
+ (($ $) reduce (e) 0)
+ )
+ )
+ (
+ ((A) ($)) ;; T1
+ (
+ ((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)) ;; T2
+ (
+ ((a a) reduce (e) 0)
+ ((a b) reduce (a b ((A) (a a))) 1)
+ )
+ )
+ (
+ ((A) (a a)) ;; T3
+ (
+ ((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) reduce ()
- )
+ ((a b) pop)
+ ((a a) pop)
+ ((a $) pop)
)
)
+ (
+ $
+ (($ $) accept)
+ )
)
parser-tables)))
- (message "Passed example 5.17 p. 354")
+ (message "Passed example 5.17 p. 356")
(message "Passed tests for (parser-generator-ll--generate-parsing-table)"))
- [elpa] externals/parser-generator 03a11c4369 14/82: Started test for LL(k) parser-table generation, (continued)
- [elpa] externals/parser-generator 03a11c4369 14/82: Started test for LL(k) parser-table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 9d6ca94d0e 02/82: More work on LL(k) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 6ce0dd9429 04/82: Improved function to calculate merge max terminal sets, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 52734d7160 16/82: Updated TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7b77032f71 22/82: Parser table generation for LLk now works for productions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator fe728f8ad8 23/82: Passing test for generating LLk parser table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 3b9977b51b 28/82: More work on LLk test, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f23bc217d8 30/82: More wrestling, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 6e91a4b498 32/82: More work on helper functions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 80dd506b65 33/82: More work on LL-helper functions, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator e6f9ac545f 37/82: Cleanup after byte-compilation,
Christian Johansson <=
- [elpa] externals/parser-generator cf4332ef0e 40/82: Started on LLk parsing algorithm, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f5f7b2c82b 41/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2e76c4b57e 42/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 8f9e4d4537 46/82: Passing 2 parse examples with k=2, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator fe0decba88 50/82: Passed one test for LLk where k=1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 72bbadddc0 51/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2e2496d51f 54/82: Added notes, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2598402cc7 56/82: Added TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7f3c384b6d 55/82: Passing more LLk tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 0856bb7784 58/82: Started on refactor were k=1 will be treated with different algorithm, Christian Johansson, 2022/05/12