[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator ecbbf21 290/434: Added test for export
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator ecbbf21 290/434: Added test for exported translator |
Date: |
Mon, 29 Nov 2021 16:00:00 -0500 (EST) |
branch: externals/parser-generator
commit ecbbf21e09b1813ebba0234734de11825691040d
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added test for exported translator
---
parser-generator-lex-analyzer.el | 2 +-
parser-generator-lr-export.el | 31 ++++++++---------
test/parser-generator-lr-export-test.el | 60 +++++++++++++++++++++++++++++++--
3 files changed, 73 insertions(+), 20 deletions(-)
diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index bce7d04..2f3dff7 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -97,7 +97,7 @@
(error
"Lex-analyze failed to peek next look-ahead at %s, error: %s"
index
- (car (cdr error))))))
+ error))))
(nreverse look-ahead)))
(defun parser-generator-lex-analyzer--pop-token ()
diff --git a/parser-generator-lr-export.el b/parser-generator-lr-export.el
index 9ecd2b7..4df6e21 100644
--- a/parser-generator-lr-export.el
+++ b/parser-generator-lr-export.el
@@ -54,56 +54,56 @@
;; Action-tables
(insert
(format
- "(defconst\n %s--action-tables\n %s\n \"Generated
action-tables.\")\n\n"
+ "(defconst\n %s--action-tables\n %S\n \"Generated
action-tables.\")\n\n"
namespace
parser-generator-lr--action-tables))
;; Goto-tables
(insert
(format
- "(defconst\n %s--goto-tables\n %s\n \"Generated goto-tables.\")\n\n"
+ "(defconst\n %s--goto-tables\n %S\n \"Generated goto-tables.\")\n\n"
namespace
parser-generator-lr--goto-tables))
;; Table production-number
(insert
(format
- "(defconst\n %s--table-productions-number-reverse\n %s\n
\"Hash-table indexed by production-number and value is production.\")\n\n"
+ "(defconst\n %s--table-productions-number-reverse\n %S\n
\"Hash-table indexed by production-number and value is production.\")\n\n"
namespace
parser-generator--table-productions-number-reverse))
;; Table look-aheads
(insert
(format
- "(defconst\n %s--table-look-aheads\n %s\n \"Hash-table of valid
look-aheads.\")\n\n"
+ "(defconst\n %s--table-look-aheads\n %S\n \"Hash-table of valid
look-aheads.\")\n\n"
namespace
parser-generator--table-look-aheads-p))
;; Table terminals
(insert
(format
- "(defconst\n %s--table-terminal-p\n %s\n \"Hash-table of valid
terminals.\")\n\n"
+ "(defconst\n %s--table-terminal-p\n %S\n \"Hash-table of valid
terminals.\")\n\n"
namespace
parser-generator--table-non-terminal-p))
;; Table non-terminals
(insert
(format
- "(defconst\n %s--table-non-terminal-p\n %s\n \"Hash-table of valid
non-terminals.\")\n\n"
+ "(defconst\n %s--table-non-terminal-p\n %S\n \"Hash-table of valid
non-terminals.\")\n\n"
namespace
parser-generator--table-non-terminal-p))
;; Table translations
(insert
(format
- "(defconst\n %s--table-translations\n %s\n \"Hash-table of
translations.\")\n\n"
+ "(defconst\n %s--table-translations\n %S\n \"Hash-table of
translations.\")\n\n"
namespace
parser-generator--table-translations))
;; Lex-Analyzer Get Function
(insert
(format
- "(defconst\n %s-lex-analyzer--get-function\n (lambda %s %s)\n
\"Lex-Analyzer Get Function.\")\n\n"
+ "(defconst\n %s-lex-analyzer--get-function\n (lambda %S %S)\n
\"Lex-Analyzer Get Function.\")\n\n"
namespace
(nth 2 parser-generator-lex-analyzer--get-function)
(nth 3 parser-generator-lex-analyzer--get-function)))
@@ -111,7 +111,7 @@
;; Lex-Analyzer Function
(insert
(format
- "(defconst\n %s-lex-analyzer--function\n (lambda %s %s)\n
\"Lex-Analyzer Function.\")\n\n"
+ "(defconst\n %s-lex-analyzer--function\n (lambda %S %S)\n
\"Lex-Analyzer Function.\")\n\n"
namespace
(nth 2 parser-generator-lex-analyzer--function)
(nth 3 parser-generator-lex-analyzer--function)))
@@ -124,7 +124,7 @@
(if parser-generator-lex-analyzer--reset-function
(insert
(format
- "(lambda %s %s)\n"
+ "(lambda %S %S)\n"
(nth 2 parser-generator-lex-analyzer--reset-function)
(nth 3 parser-generator-lex-analyzer--reset-function)))
(insert "nil\n"))
@@ -133,21 +133,21 @@
;; E-identifier
(insert
(format
- "(defconst\n %s--e-identifier\n '%s\n \"e-identifier\")\n\n"
+ "(defconst\n %s--e-identifier\n '%S\n \"e-identifier\")\n\n"
namespace
parser-generator--e-identifier))
;; EOF-identifier
(insert
(format
- "(defconst\n %s--eof-identifier\n '%s\n \"EOF-identifier.\")\n\n"
+ "(defconst\n %s--eof-identifier\n '%S\n \"EOF-identifier.\")\n\n"
namespace
parser-generator--eof-identifier))
;; Look-ahead number
(insert
(format
- "(defconst\n %s--look-ahead-number\n %s\n \"Look-ahead
number.\")\n\n"
+ "(defconst\n %s--look-ahead-number\n %S\n \"Look-ahead
number.\")\n\n"
namespace
parser-generator--look-ahead-number))
@@ -169,9 +169,6 @@
"(defun
%s-lex-analyzer--get-function (token)
\"Get information about TOKEN.\"
- (unless
- %s-lex-analyzer--get-function
- (error \"Missing lex-analyzer get function!\"))
(let ((meta-information))
(condition-case
error
@@ -259,7 +256,7 @@
(error
\"Lex-analyze failed to peek next look-ahead at %s, error: %s\"
index
- (car (cdr error))))))
+ error))))
(nreverse look-ahead)))\n")
;; Lex-Analyzer Pop Token
diff --git a/test/parser-generator-lr-export-test.el
b/test/parser-generator-lr-export-test.el
index f03b70c..0b81d8a 100644
--- a/test/parser-generator-lr-export-test.el
+++ b/test/parser-generator-lr-export-test.el
@@ -33,16 +33,18 @@
(push (nth (1- index) string) tokens)
(setq index (1+ index)))
(nreverse tokens))))
+
(setq
parser-generator-lex-analyzer--get-function
(lambda (token)
(car token)))
- ;; Test parser
+ ;; Test parse
(should
(equal
'(2 2 2 1 1)
(parser-generator-lr-parse)))
+ (message "Passed parse before export")
;; Export parser
(let ((export (parser-generator-lr-export-to-elisp "e--")))
@@ -54,7 +56,6 @@
(equal
t
(fboundp 'e---parse)))
-
(when (fboundp 'e---parse)
(should
(equal
@@ -62,6 +63,61 @@
(e---parse))))
(message "Passed parse for exported parser")))
+ (let ((buffer (generate-new-buffer "*a*")))
+ (switch-to-buffer buffer)
+ (insert "aabb")
+
+ (parser-generator-set-grammar '((Sp S) ("a" "b") ((Sp S) (S (S "a" S "b"
(lambda(args) (let ((list "")) (dolist (item args) (when item (setq list
(format "%s%s" item list)))) list)))) (S e)) Sp))
+ (parser-generator-set-look-ahead-number 1)
+ (parser-generator-process-grammar)
+ (parser-generator-lr-generate-parser-tables)
+
+ (setq
+ parser-generator-lex-analyzer--function
+ (lambda (index)
+ (with-current-buffer "*a*"
+ (when (<= (+ index 1) (point-max))
+ (let ((start index)
+ (end (+ index 1)))
+ (let ((token (buffer-substring-no-properties start end)))
+ `(,token ,start . ,end)))))))
+
+ (setq
+ parser-generator-lex-analyzer--get-function
+ (lambda (token)
+ (with-current-buffer "*a*"
+ (let ((start (car (cdr token)))
+ (end (cdr (cdr token))))
+ (when (<= end (point-max))
+ (buffer-substring-no-properties start end))))))
+
+ (should
+ (equal
+ "bbaaba"
+ (parser-generator-lr-translate)))
+
+ (message "Passed translate before export")
+
+ ;; Export parser
+ (let ((export (parser-generator-lr-export-to-elisp "fa")))
+ (message "export:\n%s\n" export)
+ (with-temp-buffer
+ (insert export)
+ (eval-buffer)
+ (should
+ (equal
+ t
+ (fboundp 'fa-translate))))
+
+ (message "Executing exported translater")
+
+ (when (fboundp 'fa-translate)
+ (should
+ (equal
+ "bbaaba"
+ (fa-translate))))
+ (message "Passed translate for exported parser")))
+
(message "Passed tests for (parser-generator-lr-export-to-elisp)"))
(defun parser-generator-lr-export-test ()
- [elpa] externals/parser-generator ddd5967 221/434: Passed test for nested translations, (continued)
- [elpa] externals/parser-generator ddd5967 221/434: Passed test for nested translations, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bc817d1 224/434: Passing all tests for k=1 again, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2f1d7a 236/434: More debugging k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 16f6586 242/434: Fixed bug in lr-item generation were look-ahead was disregarded, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 36701c0 238/434: Optimized closure algorithm to only use possible next-symbols instead of iterating all symbols, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3e096f7 258/434: Improved translation handling for each production, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 96cd5de 259/434: Improved validation of grammar structure, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bbdbd18 269/434: Started on test for LR Parse k=0, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 56363c1 263/434: Fixed last TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 175a579 275/434: Passed test for generation action-table LR(0) grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ecbbf21 290/434: Added test for exported translator,
ELPA Syncer <=
- [elpa] externals/parser-generator cecf8fd 287/434: More TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 688e685 291/434: Lex-analyzer index is now buffer-local variable, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0702765 293/434: Added incremental unit test for exported parser/translator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 552c0c5 304/434: Using better hash-key for goto-tables generation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d0d3201 299/434: FIRST calculation now handles cyclic productions, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5145cda 306/434: Improved hash-key integrity for LRk Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2227cae 313/434: Moved validation of valid lr-item set to generation of goto-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a86c658 305/434: Improved output, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator dcbbdee 315/434: Started on support for symbol attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0c1b8b6 316/434: Passing tests for symbol attributes, ELPA Syncer, 2021/11/29