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

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

[elpa] externals/parser-generator 8092c58 334/434: Added global declarat


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 8092c58 334/434: Added global declaration to unit test
Date: Mon, 29 Nov 2021 16:00:10 -0500 (EST)

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

    Added global declaration to unit test
---
 test/parser-generator-lr-test.el | 51 +++++++++++++++++++++++++++++++++++++---
 1 file changed, 48 insertions(+), 3 deletions(-)

diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 3277b3e..b5d1513 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -489,7 +489,8 @@
   (setq
    parser-generator--e-identifier
    '%empty)
-  (parser-generator-set-look-ahead-number 1)
+  (parser-generator-set-look-ahead-number
+   1)
   (parser-generator-set-grammar
    '(
      (start input line exp)
@@ -535,13 +536,57 @@
          token))))
   (setq
    parser-generator-lex-analyzer--get-function
-   (lambda (token)
-     (car token)))
+   (lambda (token) (car token)))
+
   (parser-generator-process-grammar)
   (should-error
    (parser-generator-lr-generate-parser-tables))
   (message "Grammar caused expected error")
 
+  ;; Add precedence to resolve conflicts
+  (setq
+   parser-generator--context-sensitive-attributes
+   '(%prec))
+  (setq
+   parser-generator--global-attributes
+   '(%left %precedence %right))
+  (setq
+   parser-generator--global-declaration
+   '(
+     (%left "-" "+")
+     (%left "*" "/")
+     (%precedence NEG)
+     (%right "^")
+     ))
+  (parser-generator-set-grammar
+   '(
+     (start input line exp)
+     ("+" "-" "*" "/" "^" "(" ")" "\n" NUM)
+     (
+      (start input)
+      (input
+       %empty
+       (input line))
+      (line
+       "\n"
+       (exp "+" (lambda(args) (message "%s" args))))
+      (exp
+       NUM
+       (exp "+" exp (lambda(args) (+ (nth 0 args) (nth 2 args))))
+       (exp "-" exp (lambda(args) (- (nth 0 args) (nth 2 args))))
+       (exp "*" exp (lambda(args) (* (nth 0 args) (nth 2 args))))
+       (exp "/" exp (lambda(args) (/ (nth 0 args) (nth 2 args))))
+       ("-" (exp (%prec NEG)) (lambda(args) (- (nth 1 args))))
+       (exp "^" exp (lambda(args) (expt (nth 0 args) (nth 2 args))))
+       ("(" exp ")" (lambda(args) (nth 1)))))
+     start))
+  (parser-generator-process-grammar)
+
+  ;; TODO Should work now
+  (parser-generator-lr-generate-parser-tables)
+  (message "Grammar now passes thanks to precedence rules")
+
+  ;; TODO Test functionality here (then move to translate test)
   (let ((buffer (generate-new-buffer "*buffer*")))
     (switch-to-buffer buffer)
     (kill-region (point-min) (point-max))



reply via email to

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