[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 08ed55d35a 62/82: More work on k=1
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 08ed55d35a 62/82: More work on k=1 |
Date: |
Thu, 12 May 2022 13:28:18 -0400 (EDT) |
branch: externals/parser-generator
commit 08ed55d35a7fb5bb7d02e5a8a08ad2b0b2beede3
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on k=1
---
parser-generator-ll.el | 13 ++-
test/parser-generator-ll-test.el | 179 ++++++++++-----------------------------
2 files changed, 51 insertions(+), 141 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index c33f8082f1..c65e0b0b4a 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -554,13 +554,12 @@
(let ((sub-symbol (nth sub-symbol-index right-hand-side)))
(if (parser-generator--valid-non-terminal-p
sub-symbol)
- (let ((local-follow-set (nth non-terminal-index
local-follow-sets)))
- (dolist (local-follow local-follow-set)
- (push
- (list
- (list sub-symbol)
- local-follow)
- modified-right-hand-side))
+ (let ((local-follow (nth non-terminal-index
local-follow-sets)))
+ (push
+ (list
+ (list sub-symbol)
+ local-follow)
+ modified-right-hand-side)
(setq
non-terminal-index
(1+ non-terminal-index)))
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index a03fc43558..b0f3318796 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -140,10 +140,13 @@
)
)
(parser-generator-process-grammar)
- (let ((parser-tables
- (parser-generator-ll--generate-action-table-k-gt-1
- (parser-generator-ll--generate-goto-table-k-gt-1))))
- (message "parser-tables: %S" parser-tables)
+ (let* ((goto-table
+ (parser-generator-ll--generate-goto-table-k-gt-1))
+ (action-table
+ (parser-generator-ll--generate-action-table-k-gt-1
+ goto-table)))
+ ;; (message "goto-table: %S" goto-table)
+ ;; (message "action-table: %S" action-table)
(should
(equal
'(
@@ -173,7 +176,7 @@
(a (((a b) pop) ((a a) pop) ((a $) pop)))
($ ((($ $) accept)))
)
- parser-tables)))
+ action-table)))
(message "Passed Example 5.15 p. 351 and 5.16 p. 352")
(parser-generator-set-eof-identifier '$)
@@ -191,13 +194,13 @@
)
)
(parser-generator-process-grammar)
- (let* ((tables
+ (let* ((goto-table
(parser-generator-ll--generate-goto-table-k-gt-1))
- (parser-tables
+ (action-table
(parser-generator-ll--generate-action-table-k-gt-1
- tables)))
- ;; (message "tables: %S" tables)
- ;; (message "parser-tables: %S" parser-tables)
+ goto-table)))
+ ;; (message "goto-tables: %S" goto-table)
+ ;; (message "action-table: %S" action-table)
(should
(equal
'(
@@ -235,7 +238,7 @@
(a (((a b) pop) ((a a) pop) ((a $) pop)))
($ ((($ $) accept)))
)
- parser-tables)))
+ action-table)))
(message "Passed Example 5.17 p. 356")
(message "Passed tests for
(parser-generator-ll--generate-action-table-k-gt-1)"))
@@ -525,10 +528,6 @@
"Test `parser-generator-ll--generate-table-k-eq-1'."
(message "Started tests for (parser-generator-ll--generate-table-k-eq-1)")
- ;; TODO Implement this
-
- ;; Move below to separate test
-
(parser-generator-set-eof-identifier '$)
(parser-generator-set-e-identifier 'e)
(parser-generator-set-look-ahead-number 1)
@@ -546,30 +545,31 @@
(parser-generator-process-grammar)
(let* ((tables
(parser-generator-ll--generate-table-k-eq-1)))
- (message "tables: %S" tables)
+ ;; (message "tables: %S" tables)
(should
(equal
- tables
'(
- (
- (A)
+ (A
(
- ((a) (a))
- ((b) (b S A))
+ ((b) reduce (b S A) 3)
+ ((a) reduce (a) 2)
)
)
- (
- (S)
+ (S
(
- ((a) (a A S))
- ((b) (b))
+ ((b) reduce (b) 1)
+ ((a) reduce (a A S) 0)
)
)
+ (b (((b) pop)))
+ (a (((a) pop)))
+ ($ ((($) accept)))
)
- )
- ))
+ tables
+ )))
(message "Passed Example 5.5 p. 340")
+ ;; TODO Make this pass
(parser-generator-set-eof-identifier '$)
(parser-generator-set-e-identifier 'e)
(parser-generator-set-look-ahead-number 1)
@@ -593,126 +593,38 @@
(should
(equal
'(
- (
- (F)
- (
- (("(") ("(" E ")"))
- (("a") ("a"))
- )
- )
- (
- (T2)
- (
- (($) (e))
- (("*") ("*" F T2))
- )
- )
- (
- (T)
- (
- (("(") (F T2))
- (("a") (F T2))
- )
- )
- (
- (E2)
- (
- ((")") (e))
- (("+") ("+" T E2))
- )
- )
- (
- (E)
- (
- (("(") (T E2))
- (("a") (T E2))
- )
- )
- )
- tables)))
- (message "Passed Example 5.12 p. 346-347")
-
-
- (parser-generator-set-eof-identifier '$)
- (parser-generator-set-e-identifier 'e)
- (parser-generator-set-look-ahead-number 1)
- (parser-generator-set-grammar
- '(
- (E E2 T T2 F)
- ("a" "(" ")" "+" "*")
- (
- (E (T E2))
- (E2 ("+" T E2) e)
- (T (F T2))
- (T2 ("*" F T2) e)
- (F ("(" E ")") "a")
- )
- E
- )
- )
- (parser-generator-process-grammar)
- (parser-generator-process-grammar)
- (let ((parser-tables (parser-generator-ll--generate-action-table-k-eq-1)))
- ;; (message "parser-tables: %S" parser-tables)
- (should
- (equal
- '(
- (
- ((E) ($))
- (
- (("a") reduce (((T) ($)) ((T) ("+")) ((E2) ($))) 0)
- (("(") reduce (((T) ($)) ((T) ("+")) ((E2) ($))) 0)
- )
- )
- (
- ((E2) ($))
- (
- (("+") reduce ("+" ((T) ($)) ((T) ("+")) ((E2) ($))) 1)
- (($) reduce (e) 2)
- )
- )
- (
- ((T) ("+"))
+ (F
(
- (("a") reduce (((F) ("*")) ((F) ("+")) ((T2) ("+"))) 3)
- (("(") reduce (((F) ("*")) ((F) ("+")) ((T2) ("+"))) 3)
+ (("a") reduce ("a") 7)
+ (("(") reduce ("(" E ")") 6)
)
)
- (
- ((T2) ("+"))
+ (T2
(
- (("+") reduce (e) 5)
- (("*") reduce ("*" ((F) ("*")) ((F) ("+")) ((T2) ("+"))) 4)
+ ((e) reduce (e) 5)
+ ((")") reduce (e) 5)
+ (("*") reduce ("*" F T2) 4)
)
)
- (
- ((F) ("+"))
+ (T
(
- (("a") reduce ("a") 7)
- (("(") reduce ("(" ((E) (")")) ")") 6)
+ (("a") reduce (F T2) 3)
+ (("(") reduce (F T2) 3)
)
)
- (
- ((E) (")"))
+ (E2
(
- (("a") reduce (((T) (")")) ((T) ("+")) ((E2) (")"))) 0)
- (("(") reduce (((T) (")")) ((T) ("+")) ((E2) (")"))) 0)
+ ((e) reduce (e) 2)
+ ((")") reduce (e) 2)
+ (("+") reduce ("+" T E2) 1)
)
)
- (
- ((E2) (")"))
+ (E
(
- (("+") reduce ("+" ((T) (")")) ((T) ("+")) ((E2) (")"))) 1)
- ((")") reduce (e) 2)
+ (("a") reduce (T E2) 0)
+ (("(") reduce (T E2) 0)
)
)
- (((T) (")")) ((("a") reduce (((F) (")")) ((F) ("*")) ((T2) (")"))) 3)
(("(") reduce (((F) (")")) ((F) ("*")) ((T2) (")"))) 3)))
- (((T2) (")")) ((("*") reduce ("*" ((F) (")")) ((F) ("*")) ((T2)
(")"))) 4) ((")") reduce (e) 5)))
- (((F) (")")) ((("a") reduce ("a") 7) (("(") reduce ("(" ((E) (")"))
")") 6)))
- (((F) ("*")) ((("a") reduce ("a") 7) (("(") reduce ("(" ((E) (")"))
")") 6)))
- (((T) ($)) ((("a") reduce (((F) ($)) ((F) ("*")) ((T2) ($))) 3) (("(")
reduce (((F) ($)) ((F) ("*")) ((T2) ($))) 3)))
- (((T2) ($)) ((("*") reduce ("*" ((F) ($)) ((F) ("*")) ((T2) ($))) 4)
(($) reduce (e) 5)))
- (((F) ($)) ((("a") reduce ("a") 7) (("(") reduce ("(" ((E) (")")) ")")
6)))
("a" ((("a") pop)))
("+" ((("+") pop)))
("*" ((("*") pop)))
@@ -720,8 +632,7 @@
("(" ((("(") pop)))
($ ((($) accept)))
)
- parser-tables)))
- ;; TODO Verify above
+ tables)))
(message "Passed Example 5.12 p. 346-347")
(message "Passed tests for (parser-generator-ll--generate-table-k-eq-1)"))
- [elpa] externals/parser-generator 221446d647 24/82: Started implementation of LLk validation, (continued)
- [elpa] externals/parser-generator 221446d647 24/82: Started implementation of LLk validation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 04eb4d066c 27/82: Started on test for Example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-table generation example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1290048b84 39/82: Improved documentation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 57c6fdda2f 43/82: Passing test for generating LL-parser hash-table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator af3740c46a 59/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 3d373f4dfa 60/82: Updated docs, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 020969094c 61/82: More refactoring, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08ed55d35a 62/82: More work on k=1,
Christian Johansson <=
- [elpa] externals/parser-generator 4f85cc5616 66/82: Passes byte-compilation tests, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7a265c9a84 67/82: LL-tests now runs on make tests command, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator a046c8584d 73/82: Started on documentation for LL(k) and LL(1), Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator f07939a440 76/82: Added example from Wikipedia and passing test, Christian Johansson, 2022/05/12
- [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