[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 7f3c384b6d 55/82: Passing more LLk tes
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 7f3c384b6d 55/82: Passing more LLk tests |
Date: |
Thu, 12 May 2022 13:28:17 -0400 (EDT) |
branch: externals/parser-generator
commit 7f3c384b6dc9f73328f0cbff11eeb6295ac96059
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passing more LLk tests
---
parser-generator-ll.el | 3 +-
parser-generator.el | 2 +-
test/parser-generator-ll-test.el | 171 ++++++++++++++++++++++-----------------
3 files changed, 99 insertions(+), 77 deletions(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index 63c3088f28..4dbd6bdfbe 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -76,7 +76,8 @@
(list
(list
(parser-generator--get-grammar-start))
- (list
+ (parser-generator--generate-list-of-symbol
+ parser-generator--look-ahead-number
parser-generator--eof-identifier))
parser-generator--eof-identifier))
(output)
diff --git a/parser-generator.el b/parser-generator.el
index dfd698663e..4b749f7f31 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 70ecb06606..1061e0fc60 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -330,7 +330,7 @@
(let ((parser-tables
(parser-generator-ll--generate-parsing-table
(parser-generator-ll--generate-tables))))
- (message "parser-tables: %S" parser-tables)
+ ;; (message "parser-tables: %S" parser-tables)
(should
(equal
'(
@@ -383,15 +383,15 @@
(parser-tables
(parser-generator-ll--generate-parsing-table
tables)))
- (message "tables: %S" tables)
- (message "parser-tables: %S" parser-tables)
+ ;; (message "tables: %S" tables)
+ ;; (message "parser-tables: %S" parser-tables)
(should
(equal
'(
(
((S) ($ $)) ;; T0
(
- ((a b) reduce (a b ((A) ($))) 1)
+ ((a b) reduce (a b ((A) (($ $)))) 1)
(($ $) reduce (e) 0)
)
)
@@ -399,51 +399,31 @@
((A) ($ $)) ;; T1
(
((b $) reduce (b) 3)
- ((a a) reduce (((S) (a a)) a a) 2)
- ((a b) reduce (((S) (a a)) a a) 2)
+ ((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 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) pop)
- ((a a) pop)
- ((a $) pop)
- )
- )
- (
- $
- (
- (($ $) accept)
+ ((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) pop) ((a a) pop) ((a $) pop)))
+ ($ ((($ $) accept)))
)
parser-tables)))
(message "Passed Example 5.17 p. 356")
- ;; TODO Make this pass
(parser-generator-set-eof-identifier '$)
(parser-generator-set-e-identifier 'e)
@@ -464,68 +444,121 @@
)
(parser-generator-process-grammar)
(parser-generator-process-grammar)
- (let ((parser-tables
- (parser-generator-ll--generate-parsing-table
- (parser-generator-ll--generate-tables))))
- (message "parser-tables: %S" parser-tables)
+ (let* ((tables
+ (parser-generator-ll--generate-tables))
+ (parser-tables
+ (parser-generator-ll--generate-parsing-table
+ tables)))
+ ;; (message "tables: %S" tables)
+ ;; (message "parser-tables: %S" parser-tables)
(should
(equal
'(
(
((E) ($))
(
- (("a") reduce (((T) ("+")) ((E2) nil)) 0) ;; TODO Verify this
- (("(") reduce (((T) ("+")) ((E2) nil)) 0) ;; TODO Verify this
+ (("a") reduce (((T) (($) ("+"))) ((E2) (($)))) 0)
+ (("(") reduce (((T) (($) ("+"))) ((E2) (($)))) 0)
)
)
(
((E2) ($))
(
- (("+") reduce ("+" ((T) ("+")) ((E2) nil)) 1)
+ (("+") reduce ("+" ((T) (($) ("+"))) ((E2) (($)))) 1)
(($) reduce (e) 2)
)
)
(
((T) ("+"))
(
- (("a") reduce (((F) ("*")) ((T2) nil)) 3)
- (("(") reduce (((F) ("*")) ((T2) nil)) 3)
+ (("a") reduce (((F) (("*") ("+"))) ((T2) (("+")))) 3)
+ (("(") reduce (((F) (("*") ("+"))) ((T2) (("+")))) 3)
)
)
(
((T2) ("+"))
(
(("+") reduce (e) 5)
- (("*") reduce ("*" ((F) ("*")) ((T2) nil)) 4)
+ (("*") reduce ("*" ((F) (("*") ("+"))) ((T2) (("+")))) 4)
)
)
(
- ((F) ("*"))
+ ((F) ("+"))
(
(("a") reduce ("a") 7)
- (("(") reduce ("(" ((E) (")")) ")") 6)
+ (("(") reduce ("(" ((E) ((")"))) ")") 6)
)
)
(
((E) (")"))
(
- (("a") reduce (((T) ("+")) ((E2) nil)) 0)
- (("(") reduce (((T) ("+")) ((E2) nil)) 0)
+ (("a") reduce (((T) ((")") ("+"))) ((E2) ((")")))) 0)
+ (("(") reduce (((T) ((")") ("+"))) ((E2) ((")")))) 0)
)
)
(
((E2) (")"))
(
- (("+") reduce ("+" ((T) ("+")) ((E2) nil)) 1)
+ (("+") reduce ("+" ((T) ((")") ("+"))) ((E2) ((")")))) 1)
((")") reduce (e) 2)
)
)
+ (
+ ((T) (")"))
+ (
+ (("a") reduce (((F) ((")") ("*"))) ((T2) ((")")))) 3)
+ (("(") reduce (((F) ((")") ("*"))) ((T2) ((")")))) 3)
+ )
+ )
+ (
+ ((T2) (")"))
+ (
+ (("*") reduce ("*" ((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) (($) ("*"))) ((T2) (($)))) 3)
+ (("(") reduce (((F) (($) ("*"))) ((T2) (($)))) 3)
+ )
+ )
+ (
+ ((T2) ($))
+ (
+ (("*") reduce ("*" ((F) (($) ("*"))) ((T2) (($)))) 4)
+ (($) reduce (e) 5)
+ )
+ )
+ (
+ ((F) ($))
+ (
+ (("a") reduce ("a") 7)
+ (("(") reduce ("(" ((E) ((")"))) ")") 6)
+ )
+ )
("a" ((("a") pop)))
("+" ((("+") pop)))
("*" ((("*") pop)))
(")" (((")") pop)))
("(" ((("(") pop)))
- ($ ((($) accept))))
+ ($ ((($) accept)))
+ )
parser-tables)))
;; TODO Verify above
(message "Passed Example 5.12 p. 346-347")
@@ -569,6 +602,9 @@
parser-generator-lex-analyzer--get-function
(lambda (token)
(car token)))
+ (message "parsing-table: %S" (parser-generator--hash-to-list
+ parser-generator-ll--parsing-table
+ t))
(should
(equal
'(1 3) ;; Example is indexed from 1 so that is why they have '(2 4)
@@ -720,54 +756,39 @@
)
(parser-generator-process-grammar)
(parser-generator-ll-generate-parser-tables)
+ ;; (message "parsing-table: %S" (parser-generator--hash-to-list
parser-generator-ll--parsing-table t))
(should
(equal
'(
- ("((S) ($))"
+ ("((S) ($ $))"
(
- ("(a b)" (reduce (a b ((A) ($))) 1))
+ ("(a b)" (reduce (a b ((A) (($ $)))) 1))
("($ $)" (reduce (e) 0))
)
)
- ("((A) ($))"
+ ("((A) ($ $))"
(
("(b $)" (reduce (b) 3))
- ("(a a)" (reduce (((S) (a a)) a a) 2))
- ("(a b)" (reduce (((S) (a a)) a a) 2))
+ ("(a a)" (reduce (((S) ((a a))) a a) 2))
+ ("(a b)" (reduce (((S) ((a a))) a a) 2))
)
)
("((S) (a a))"
(
("(a a)" (reduce (e) 0))
- ("(a b)" (reduce (a b ((A) (a a))) 1))
+ ("(a b)" (reduce (a b ((A) ((a a)))) 1))
)
)
("((A) (a a))"
(
("(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)" pop)
- ("(a a)" pop)
- ("(a $)" pop)
- )
- )
- ("$"
- (
- ("($ $)" accept)
+ ("(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)" pop) ("(a a)" pop) ("(a $)" pop)))
+ ("$" (("($ $)" accept)))
)
(parser-generator--hash-to-list
parser-generator-ll--parsing-table
- [elpa] externals/parser-generator 80dd506b65 33/82: More work on LL-helper functions, (continued)
- [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, 2022/05/12
- [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 <=
- [elpa] externals/parser-generator 0856bb7784 58/82: Started on refactor were k=1 will be treated with different algorithm, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 2181545d26 64/82: Implemented test for validation of LL(1) grammar, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4051737aeb 65/82: Added TODO item for LL(k) translation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 08af836006 69/82: More work on SDT for LL grammar, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7d87a2d154 79/82: Implemented exported LL(k) and LL(1) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 75323b10e5 81/82: Merge branch 'feature/llk-parser', Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator db91a5f203 82/82: Removed unused function, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 315e40eff8 10/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 34ab0f1718 21/82: More various tweaks, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 064bd259ff 26/82: Passing LLk validation tests, Christian Johansson, 2022/05/12