[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator e598f652a7 04/19: Made some more tests
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator e598f652a7 04/19: Made some more tests pass after lex-analyzer refactor |
Date: |
Wed, 10 Jan 2024 15:35:21 -0500 (EST) |
branch: externals/parser-generator
commit e598f652a7c1951753724dfbe0ed61f105a5d2f4
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Made some more tests pass after lex-analyzer refactor
---
parser-generator-lex-analyzer.el | 12 ++++-----
parser-generator-lr-export.el | 31 +----------------------
parser-generator-lr.el | 54 ++++++++--------------------------------
test/parser-generator-lr-test.el | 22 +++++++++-------
4 files changed, 30 insertions(+), 89 deletions(-)
diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index 9f1ff4f4c7..74d9d95840 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -91,11 +91,11 @@
(defun parser-generator-lex-analyzer--peek-next-look-ahead ()
"Peek next look-ahead number of tokens via lex-analyzer."
(unless parser-generator-lex-analyzer--index
- (error "Missing lex-analyzer index!"))
+ (error "Missing lex-analyzer index when peeking!"))
(unless parser-generator-lex-analyzer--function
- (error "Missing lex-analyzer function!"))
+ (error "Missing lex-analyzer function when peeking!"))
(unless parser-generator--look-ahead-number
- (error "Missing look-ahead-number!"))
+ (error "Missing look-ahead-number when peeking!"))
(let ((look-ahead)
(look-ahead-length 0)
(index parser-generator-lex-analyzer--index)
@@ -151,11 +151,11 @@
(defun parser-generator-lex-analyzer--pop-token ()
"Pop next token via lex-analyzer."
(unless parser-generator-lex-analyzer--index
- (error "Missing lex-analyzer index!"))
+ (error "Missing lex-analyzer index when popping!"))
(unless parser-generator-lex-analyzer--function
- (error "Missing lex-analyzer function!"))
+ (error "Missing lex-analyzer function when popping!"))
(unless parser-generator--look-ahead-number
- (error "Missing look-ahead-number!"))
+ (error "Missing look-ahead-number when popping!"))
(let ((continue t)
(tokens))
(while continue
diff --git a/parser-generator-lr-export.el b/parser-generator-lr-export.el
index aa4a03ec0a..97df7f5361 100644
--- a/parser-generator-lr-export.el
+++ b/parser-generator-lr-export.el
@@ -499,35 +499,9 @@
(unless %s--distinct-goto-tables
(error \"Missing distinct GOTO-tables for grammar!\"))
- (let ((accept)
- (pre-index 0))
+ (let ((accept))
(while (not accept)
- ;; Save history when index has changed to enable incremental parsing /
translating
- (when
- (>
- %s-lex-analyzer--index
- pre-index)
- ;; We make a copy of the hash-table here to avoid passing same
- ;; hash-table every-time with pointer
- (let ((translation-symbol-table-list))
- (maphash
- (lambda (key value)
- (push
- `(,key ,value)
- translation-symbol-table-list))
- translation-symbol-table)
- (push
- `(,%s-lex-analyzer--index
- ,pushdown-list
- ,output
- ,translation
- ,translation-symbol-table-list)
- history)
- (setq
- pre-index
- %s-lex-analyzer--index)))
-
;; (1) The look-ahead string u, consisting of the next k input
symbols, is determined.
(let ((look-ahead
(%s-lex-analyzer--peek-next-look-ahead))
@@ -563,9 +537,6 @@
namespace
namespace
namespace
- namespace
- namespace
- namespace
namespace))
(insert "
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 47c0baa3b3..0a7e1e2a6a 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -1680,17 +1680,15 @@
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."
+ translation)
+ "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT, TRANSLATION."
(let ((result
(parser-generator-lr--parse
nil
input-tape-index
pushdown-list
output
- translation
- history)))
+ translation)))
(nth 0 result)))
(defun parser-generator-lr-translate
@@ -1698,17 +1696,15 @@
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."
+ translation)
+ "Perform a LR-parse via lex-analyzer, optionally at INPUT-TAPE-INDEX with
PUSHDOWN-LIST, OUTPUT, TRANSLATION."
(let ((result
(parser-generator-lr--parse
t
input-tape-index
pushdown-list
output
- translation
- history)))
+ translation)))
(nth 1 result)))
;; Algorithm 5.7, p. 375
@@ -1719,9 +1715,8 @@
pushdown-list
output
translation
- translation-symbol-table-list
- history)
- "Perform a LR-parse via lex-analyzer, optionally PERFORM-SDT means to
perform syntax-directed translation and optioanlly start at INPUT-TAPE-INDEX
with PUSHDOWN-LIST, OUTPUT, TRANSLATION, TRANSLATION-SYMBOL-TABLE-LIST and
HISTORY."
+ translation-symbol-table-list)
+ "Perform a LR-parse via lex-analyzer, optionally PERFORM-SDT means to
perform syntax-directed translation and optioanlly start at INPUT-TAPE-INDEX
with PUSHDOWN-LIST, OUTPUT, TRANSLATION, TRANSLATION-SYMBOL-TABLE-LIST."
(unless input-tape-index
(setq input-tape-index 1))
(unless pushdown-list
@@ -1754,35 +1749,9 @@
(unless parser-generator-lr--distinct-goto-tables
(error "Missing distinct GOTO-tables for grammar!"))
- (let ((accept)
- (pre-index 0))
+ (let ((accept))
(while (not accept)
- ;; Save history when index has changed to enable incremental parsing /
translating
- (when
- (>
- parser-generator-lex-analyzer--index
- pre-index)
- ;; We make a copy of the hash-table here to avoid passing same
- ;; hash-table every-time with pointer
- (let ((translation-symbol-table-list))
- (maphash
- (lambda (key value)
- (push
- `(,key ,value)
- translation-symbol-table-list))
- translation-symbol-table)
- (push
- `(,parser-generator-lex-analyzer--index
- ,pushdown-list
- ,output
- ,translation
- ,translation-symbol-table-list)
- history)
- (setq
- pre-index
- parser-generator-lex-analyzer--index)))
-
;; (1) The look-ahead string u, consisting of the next k input
symbols, is determined.
(let ((look-ahead
(parser-generator-lex-analyzer--peek-next-look-ahead))
@@ -2201,8 +2170,6 @@
"Parsed entire string without getting accepting! Output: %s"
(reverse output))
(reverse output)))))
- (when history
- (setq history (reverse history)))
(when output
(setq output (reverse output)))
(let ((translation-symbol-table-list))
@@ -2216,8 +2183,7 @@
(list
output
translation
- translation-symbol-table-list
- history))))
+ translation-symbol-table-list))))
(provide 'parser-generator-lr)
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 60b71a0a13..da5be50b33 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -186,7 +186,7 @@
(parser-generator-process-grammar)
(should-error
(parser-generator-lr-generate-parser-tables))
- (message "Conflicted grammar caused expected exception")
+ (message "Passed test conflicted grammar caused expected exception")
(setq
parser-generator--global-attributes
@@ -215,7 +215,7 @@
(parser-generator-process-grammar)
(should-error
(parser-generator-lr-generate-parser-tables))
- (message "Conflicted grammar caused expected exception 2")
+ (message "Passed test conflicted grammar caused expected exception 2")
(setq
parser-generator-lr--context-sensitive-precedence-attribute
@@ -265,7 +265,7 @@
(equal
'((0 (((a) shift))) (1 (((c) shift))) (2 ((($) reduce 2))) (3 ((($)
accept))) (4 (((b) shift))) (5 (((c) shift))) (6 ((($) reduce 4))) (7 ((($)
reduce 1))))
(parser-generator-lr--get-expanded-action-tables)))
- (message "Grammar not conflicting anymore solution #1")
+ (message "Passed test grammar not conflicting anymore solution #1")
;; Example parse "a b c"
;; stack: 0
@@ -301,7 +301,7 @@
(equal
'((0 (((a) shift))) (1 (((c) shift))) (2 ((($) reduce 2))) (3 ((($)
accept))) (4 (((b) shift))) (5 (((c) reduce 3))) (6 ((($) reduce 4))) (7 ((($)
reduce 1))))
(parser-generator-lr--get-expanded-action-tables)))
- (message "Grammar not conflicting anymore solution #2")
+ (message "Passed test grammar not conflicting anymore solution #2")
;; Example parse "a b c"
;; stack: 0
@@ -339,6 +339,9 @@
(cond
((looking-at "\\([0-9]+\\.[0-9]+\\|[0-9]+\\)")
+ (setq
+ new-index
+ (match-end 0))
(setq
token
`(NUM ,(match-beginning 0) . ,(match-end 0))))
@@ -353,8 +356,8 @@
(setq
token
`(,symbol ,(match-beginning 0) . ,(match-end 0)))))
- (t (error "Unexpected input at %d!" index))))
- (list token nil new-index nil)))))
+ (t (error "Unexpected input at %d!" index)))
+ (list token nil new-index nil) )))))
(setq
parser-generator-lex-analyzer--get-function
@@ -414,7 +417,7 @@
(parser-generator-process-grammar)
(should-error
(parser-generator-lr-generate-parser-tables))
- (message "Grammar caused expected conflict 3")
+ (message "Passed test grammar caused expected conflict 3")
(setq
parser-generator-lr--global-precedence-attributes
@@ -423,7 +426,7 @@
parser-generator-lr--context-sensitive-precedence-attribute
'%prec)
(parser-generator-lr-generate-parser-tables)
- (message "Grammar not conflicting anymore")
+ (message "Passed test grammar not conflicting anymore")
;; Parse: 1+1*2\n
;;
@@ -464,12 +467,13 @@
(equal
'(1 5 5 5 8 6 4 2)
parse)))
+ (message "Passed parse with correct precedence of 2+3*5 = 2+(3*5)")
(let ((translate (parser-generator-lr-translate)))
(should
(equal
17.0
translate)))
- (message "Passed correct precedence of 2+3*5 = 2+(3*5) = 17")
+ (message "Passed translation with correct precedence of 2+3*5 = 2+(3*5) =
17")
(kill-region (point-min) (point-max))
(insert "2*3+5\n")
- [elpa] externals/parser-generator updated (0d0710d02a -> 6f09a9ca67), Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator e598f652a7 04/19: Made some more tests pass after lex-analyzer refactor,
Christian Johansson <=
- [elpa] externals/parser-generator 23d56a077d 05/19: More work on lexer without global state, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator 6914034c06 13/19: More optimizations, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator 096436cccd 15/19: Added unit test for state-based lexer, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator 9073a387ba 16/19: More fixes for state-based lexer, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator c299371a74 01/19: Started work on refactoring lex-analyzer into a state-based lex-analyzer, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator 843e26930f 08/19: Passing all unit tests after refactor, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator 6a7dcdb8db 07/19: Passing unit tests for LR parsers, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator 6f09a9ca67 19/19: Updated copyright years, version and modified date, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator c417cb10f2 09/19: Fixes for byte-compilation warnings, Christian Johansson, 2024/01/10
- [elpa] externals/parser-generator d96c81cb84 06/19: Passing lr-tests after refactor, Christian Johansson, 2024/01/10