[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 2d56ab0 160/434: Made separate functio
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 2d56ab0 160/434: Made separate functions for parse and translate in LR-parser |
Date: |
Mon, 29 Nov 2021 15:59:31 -0500 (EST) |
branch: externals/parser-generator
commit 2d56ab06d5a31e9cb70cc4c7577f40efc46b15c1
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Made separate functions for parse and translate in LR-parser
---
parser-generator-lr.el | 52 ++++++++++++++++++++++++++++++++++++----
test/parser-generator-lr-test.el | 18 +++++++-------
2 files changed, 57 insertions(+), 13 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 688af25..39b1ea4 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -474,11 +474,48 @@
(setq lr-new-item (sort lr-new-item 'parser-generator--sort-list))
lr-new-item))
+(defun parser-generator-lr-parse
+ (&optional
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ pushdown-list-history)
+ "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT, TRANSLATION and PUSHDOWN-LIST-HISTORY."
+ (let ((result (parser-generator-lr--parse
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ pushdown-list-history)))
+ (nth 0 result)))
+
+(defun parser-generator-lr-translate
+ (&optional
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ pushdown-list-history)
+ "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT, TRANSLATION and PUSHDOWN-LIST-HISTORY."
+ (let ((result (parser-generator-lr--parse
+ input-tape-index
+ pushdown-list
+ output
+ translation
+ pushdown-list-history)))
+ (nth 1 result)))
+
;; Algorithm 5.7, p. 375
;; TODO Test incremental usage of this function
;; TODO Consider case with 2 character look-ahead
-(defun parser-generator-lr--parse (&optional input-tape-index pushdown-list
output translation)
- "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT and TRANSLATION."
+(defun parser-generator-lr--parse
+ (&optional input-tape-index
+ pushdown-list
+ output
+ translation
+ pushdown-list-history)
+ "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT, TRANSLATION and PUSHDOWN-LIST-HISTORY."
(unless input-tape-index
(setq input-tape-index 0))
(unless pushdown-list
@@ -663,7 +700,11 @@
(when next-index
(push production-lhs pushdown-list)
- (push next-index pushdown-list)))))))))
+ (push next-index pushdown-list)))))
+
+ (push
+ `(,parser-generator-lex-analyzer--index ,pushdown-list)
+ pushdown-list-history)))))
((equal action-match '(accept))
;; (d) If f(u) = accept, we halt and declare the string
@@ -677,7 +718,10 @@
(error "Parsed entire string without getting accepting! Output: %s"
(nreverse output)))
(when translation
(setq translation (nreverse translation)))
- (list (nreverse output) translation)))
+ (list
+ (nreverse output)
+ translation
+ (nreverse pushdown-list-history))))
(provide 'parser-generator-lr)
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index ab71d3a..4d6aae2 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -248,8 +248,8 @@
(should
(equal
- '((2 2 2 1 1) nil)
- (parser-generator-lr--parse)))
+ '(2 2 2 1 1)
+ (parser-generator-lr-parse)))
(message "Passed test with terminals as symbols")
@@ -295,8 +295,8 @@
(should
(equal
- '((2 2 2 1 1) nil)
- (parser-generator-lr--parse)))
+ '(2 2 2 1 1)
+ (parser-generator-lr-parse)))
(message "Passed test with terminals as string")
@@ -351,8 +351,8 @@
(should
(equal
- '((2 2 2 1 1) ("b" "a" "b" "a"))
- (parser-generator-lr--parse)))
+ '("b" "a" "b" "a")
+ (parser-generator-lr-translate)))
(kill-buffer buffer))
(message "Passed test with translation 1")
@@ -404,8 +404,8 @@
(should
(equal
- '((1) ("(when a b)"))
- (parser-generator-lr--parse)))
+ '("(when a b)")
+ (parser-generator-lr-translate)))
(switch-to-buffer buffer)
(kill-region (point-min) (point-max))
@@ -413,7 +413,7 @@
(insert "if (a) { b }")
(should-error
- (parser-generator-lr--parse))
+ (parser-generator-lr-parse))
(kill-buffer buffer))
(message "Passed test with translation 2")
- [elpa] externals/parser-generator 9b44827 124/434: Optimized LR-parser with hash-tables, (continued)
- [elpa] externals/parser-generator 9b44827 124/434: Optimized LR-parser with hash-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01fc56f 127/434: Updated list of grammars, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4ef0430 133/434: White-space fix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2fd896 136/434: Added support for indexed tokens, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4746c64 137/434: Updated example for LR parse with indexed tokens, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 04a3ec5 141/434: Added separate file for syntax analysis, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 71e4eaa 145/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 173fe94 152/434: Preparations for translation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator be557ba 013/434: More work on refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2d56ab0 160/434: Made separate functions for parse and translate in LR-parser,
ELPA Syncer <=
- [elpa] externals/parser-generator 7cfdea2 165/434: Passing tests for incremental lexer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b072fdd 175/434: Passed test for trailing e-identifier in EFF function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d435e50 122/434: Passing unit test for LR-parse, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a31da28 173/434: Updated Parser WIP items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator aaec6fa 189/434: Work on e-free first tests, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 922033f 198/434: Various stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fe10d4a 196/434: Passed tests for first 3 and first 4 of complex grammar, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4cba5aa 203/434: Made new TODO items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ef60d96 204/434: Added failing test for new function the generates grammar prefixes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 76e30f1 210/434: Sorted lines in test file, ELPA Syncer, 2021/11/29