[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator cf42e67 288/434: Exported parser passe
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator cf42e67 288/434: Exported parser passes test |
Date: |
Mon, 29 Nov 2021 15:59:59 -0500 (EST) |
branch: externals/parser-generator
commit cf42e67d02ee9d83a275ed6f7c436e1d777a4412
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Exported parser passes test
---
parser-generator-lr.el | 120 +++++++++++++++++++++++++++++----------
test/parser-generator-lr-test.el | 16 +++++-
2 files changed, 105 insertions(+), 31 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 75c86d2..ce22b64 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -195,14 +195,14 @@
"(defun
%s-lex-analyzer--get-function (token)
\"Get information about TOKEN.\"
- (unless
+ (unless
%s-lex-analyzer--get-function
(error \"Missing lex-analyzer get function!\"))
(let ((meta-information))
- (condition-case
+ (condition-case
error
(progn
- (setq
+ (setq
meta-information
(funcall
%s-lex-analyzer--get-function
@@ -211,7 +211,7 @@
namespace
namespace))
(insert "
- (error
+ (error
(error
\"Lex-analyze failed to get token meta-data of %s, error: %s\"
token
@@ -227,12 +227,12 @@
%s-lex-analyzer--reset
()
\"Reset Lex-Analyzer.\"
- (setq
- %s-lex-analyzer--index
+ (setq
+ %s-lex-analyzer--index
1)
- (when
+ (when
%s-lex-analyzer--reset-function
- (funcall
+ (funcall
%s-lex-analyzer--reset-function)))\n"
namespace
namespace
@@ -291,7 +291,7 @@
;; Lex-Analyzer Pop Token
(insert
(format "
-(defun
+(defun
%s-lex-analyzer--pop-token ()
\"Pop next token via lex-analyzer.\"
(let ((iteration 0)
@@ -336,15 +336,15 @@
\"If PRODUCTION-NUMBER exist, return it's production.\"
(gethash
production-number
- %s--table-productions-number-reverse))\n\n"
+ %s--table-productions-number-reverse))\n"
namespace
namespace))
;; Valid symbol p
(insert
(format "
-(defun
- %s--valid-symbol-p
+(defun
+ %s--valid-symbol-p
(symbol)
\"Return whether SYMBOL is valid or not.\"
(let ((is-valid t))
@@ -354,7 +354,7 @@
(%s--valid-non-terminal-p symbol)
(%s--valid-terminal-p symbol))
(setq is-valid nil))
- is-valid))\n\n"
+ is-valid))\n"
namespace
namespace
namespace
@@ -364,53 +364,70 @@
;; Valid e-p
(insert
(format "
-(defun
+(defun
%s--valid-e-p
(symbol)
\"Return whether SYMBOL is the e identifier or not.\"
(eq
symbol
- %s--e-identifier))\n\n"
+ %s--e-identifier))\n"
namespace
namespace))
;; Valid EOF-p
(insert
(format "
-(defun
+(defun
%s--valid-eof-p
(symbol)
\"Return whether SYMBOL is the EOF identifier or not.\"
- (eq
- symbol
- %s--eof-identifier))\n\n"
+ (eq
+ symbol
+ %s--eof-identifier))\n"
namespace
namespace))
- ;; TODO --valid-non-terminal-p
- ;; TODO --valid-terminal-p
+ ;; Valid non-terminal-p
+ (insert
+ (format "
+(defun %s--valid-non-terminal-p (symbol)
+ \"Return whether SYMBOL is a non-terminal in grammar or not.\"
+ (gethash
+ symbol
+ %s--table-non-terminal-p))\n"
+ namespace
+ namespace))
+
+ ;; Valid terminal-p
+ (insert
+ (format "
+(defun %s--valid-terminal-p (symbol)
+ \"Return whether SYMBOL is a terminal in grammar or not.\"
+ (gethash
+ symbol
+ %s--table-terminal-p))\n"
+ namespace
+ namespace))
;; Get grammar translation by number
(insert
(format "
-(defun
+(defun
%s--get-grammar-translation-by-number
(production-number)
\"If translation for PRODUCTION-NUMBER exist, return it.\"
- (gethash
- production-number
- %s--table-translations))\n\n"
+ (gethash
+ production-number
+ %s--table-translations))\n"
namespace
namespace))
- ;; TODO Add simple parse and translate function
-
;; Parse / translate function
(insert
(format "
-(defun
+(defun
%s--parse
- (&optional
+ (&optional
input-tape-index
pushdown-list
output
@@ -761,8 +778,51 @@
output
translation
translation-symbol-table
- history)))\n\n")
+ history)))\n")
+ ;; Parse
+ (insert
+ (format "
+(defun %s-parse
+ (&optional
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ history)
+ \"Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT, TRANSLATION and HISTORY.\"
+ (let ((result
+ (%s--parse
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ history)))
+ (nth 0 result)))\n"
+ namespace
+ namespace))
+
+ ;; Translate
+ (insert
+ (format "
+(defun %s-translate
+ (&optional
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ history)
+ \"Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT, TRANSLATION and HISTORY.\"
+ (let ((result
+ (%s--parse
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ history)))
+ (nth 1 result)))\n"
+ namespace
+ namespace))
;; Footer
(insert
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 704790f..0882a3f 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -1183,7 +1183,21 @@
'(2 2 2 1 1)
(parser-generator-lr-parse)))
(let ((export (parser-generator-lr--export-parser "e--")))
- (message "export:\n%s\n" export))
+
+ (with-temp-buffer
+ (insert export)
+ (eval-buffer)
+ (should
+ (equal
+ t
+ (fboundp 'e---parse)))
+
+ (when (fboundp 'e---parse)
+ (should
+ (equal
+ '(2 2 2 1 1)
+ (e---parse))))
+ (message "Passed parse for exported parser")))
(message "Passed tests for (parser-generator-lr--export-parser)"))
- [elpa] externals/parser-generator 40907b7 257/434: white-space fixes, (continued)
- [elpa] externals/parser-generator 40907b7 257/434: white-space fixes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 37d9fcb 260/434: Improved documentation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 08b696f 267/434: Fixed typo in doc about token, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b80fc6e 264/434: Updated README, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 1b9d8db 268/434: Improved wording about lexical analysis, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3615fad 276/434: Fixed issue with lex-analyzer in LR(0) Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 732cd78 282/434: Constants and variables are exported correctly, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator cbf9e07 278/434: Added documentation about LR(0) Parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator af71d8b 285/434: Lex-analyzer is now exported, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 500d082 284/434: Added Lex-Analyzer Rest Function to export, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator cf42e67 288/434: Exported parser passes test,
ELPA Syncer <=
- [elpa] externals/parser-generator 1e0418d 295/434: Incremental parse and translate of exported parser passes tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7584880 298/434: Added failing unit test for calculating FIRST in grammar with cycles, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f338734 303/434: Improved output of progress, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 98c9d94 213/434: Debugging parse with look-ahead > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2b0d5b8 215/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 640feed 216/434: Passing all tests for canonical LRk Parser with k = 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e5aa179 218/434: Some fixes for LRk parser k > 1, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2a9a23e 219/434: More debugging, ELPA Syncer, 2021/11/29
- [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