emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/parser-generator 04fdc96 167/434: Added unit-test for i


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 04fdc96 167/434: Added unit-test for incremental translations
Date: Mon, 29 Nov 2021 15:59:33 -0500 (EST)

branch: externals/parser-generator
commit 04fdc96a4e891e29932770a931311e8eef9f96ca
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    Added unit-test for incremental translations
---
 parser-generator-lex-analyzer.el |  4 ++-
 test/parser-generator-lr-test.el | 53 +++++++++++++++++++++++++++++++++++++++-
 2 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index 3e978c6..b9f30c3 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -33,13 +33,14 @@
 ;; Functions
 
 
+;; TODO Catch errors
 (defun parser-generator-lex-analyzer--get-function (token)
   "Get information about TOKEN."
   (unless parser-generator-lex-analyzer--get-function
     (error "Missing lex-analyzer get function!"))
   (funcall parser-generator-lex-analyzer--get-function token))
 
-
+;; TODO Catch errors
 (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
@@ -70,6 +71,7 @@
           (setq index (1+ index)))))
     (nreverse look-ahead)))
 
+;; TODO Catch errors
 (defun parser-generator-lex-analyzer--pop-token ()
   "Pop next token via lex-analyzer."
   (unless parser-generator-lex-analyzer--index
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index a520347..c087302 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -376,7 +376,7 @@
 
   (parser-generator-lr-test--parse-incremental-vs-regular)
 
-  (message "Passed incremental-test with terminals as string")
+  (message "Passed incremental-tests")
 
   (message "Passed tests for (parser-generator-lr--parse)"))
 
@@ -485,6 +485,57 @@
 
   ;; TODO Add incremental translation here
 
+  (let ((buffer (generate-new-buffer "*a*")))
+    (switch-to-buffer buffer)
+    (insert "if (a) { b; }")
+
+    (parser-generator-set-grammar '((Sp S) (";" OPEN_ROUND_BRACKET 
CLOSE_ROUND_BRACKET IF OPEN_CURLY_BRACKET CLOSE_CURLY_BRACKET VARIABLE) ((Sp S) 
(S (IF OPEN_ROUND_BRACKET VARIABLE CLOSE_ROUND_BRACKET OPEN_CURLY_BRACKET 
VARIABLE ";" CLOSE_CURLY_BRACKET (lambda(args) (format "(when %s %s)" (nth 2 
args) (nth 5 args)))))) 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*"
+         (unless (>= index (point-max))
+           (goto-char index)
+           (unless (looking-at "[^ \n\t]")
+             (search-forward-regexp "[^ \n\t]" nil t nil)
+             (forward-char -1))
+           (let ((token))
+             (cond
+              ((looking-at "if")
+               (setq token `(IF ,(match-beginning 0) . ,(match-end 0))))
+              ((looking-at "(")
+               (setq token `(OPEN_ROUND_BRACKET ,(match-beginning 0) . 
,(match-end 0))))
+              ((looking-at ")")
+               (setq token `(CLOSE_ROUND_BRACKET ,(match-beginning 0) . 
,(match-end 0))))
+              ((looking-at "{")
+               (setq token `(OPEN_CURLY_BRACKET ,(match-beginning 0) . 
,(match-end 0))))
+              ((looking-at "}")
+               (setq token `(CLOSE_CURLY_BRACKET ,(match-beginning 0) . 
,(match-end 0))))
+              ((looking-at ";")
+               (setq token `(";" ,(match-beginning 0) . ,(match-end 0))))
+              ((looking-at "[a-zA-Z]+")
+               (setq token `(VARIABLE ,(match-beginning 0) . ,(match-end 0))))
+              (t (error "Invalid syntax! Could not lex-analyze at %s!" 
(point))))
+             token)))))
+
+    (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))))))
+
+    (parser-generator-lr-test--parse-incremental-vs-regular)
+    (kill-buffer buffer))
+
+  (message "Passed incremental tests")
+
   (message "Passed tests for (parser-generator-lr-translate)"))
 
 (defun parser-generator-lr-test ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]