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

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

[elpa] externals/parser-generator 6aff9d0 373/434: Made TODO notes


From: ELPA Syncer
Subject: [elpa] externals/parser-generator 6aff9d0 373/434: Made TODO notes
Date: Mon, 29 Nov 2021 16:00:18 -0500 (EST)

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

    Made TODO notes
---
 parser-generator-lr.el           |   6 ++-
 test/parser-generator-lr-test.el | 105 +++++++++++++++++----------------------
 2 files changed, 50 insertions(+), 61 deletions(-)

diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 4f132bd..3d45306 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -402,6 +402,10 @@
                                                  (gethash
                                                   index-hash-key
                                                   index-symbols)))
+                                            ;; TODO Here need to pass 
production-number of reduction
+                                            ;; and symbol of conflict
+                                            ;; and production-number of B
+                                            ;; if it's a reduction
                                             (if
                                                 
(parser-generator-lr--production-takes-precedence-p
                                                  (car (cdr a))
@@ -440,7 +444,7 @@
                                                 index-hash-key
                                                 index-symbols)))
                                           (error
-                                           "Reduce/%S conflict for %S in state 
%S"
+                                           "Reduce/%S conflict for %S in state 
%S, %S vs %S"
                                            (car (cdr conflicted-item))
                                            u
                                            goto-index
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 4f7e7db..9aeb979 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -587,7 +587,7 @@
              (setq
               token
               `(NUM ,(match-beginning 0) . ,(match-end 0))))
-            ((looking-at "\\(\\+\\|\-\\|\*\\|\/\\|\\^\\|)\\|(\\|\n\\)")
+            ((looking-at "\\(\\+\\|-\\|*\\|/\\|\\^\\|)\\|(\\|\n\\)")
              (let ((symbol
                     (buffer-substring-no-properties
                      (match-beginning 0)
@@ -613,66 +613,51 @@
                 (string-to-number symbol)))
              symbol))))))
   (parser-generator-process-grammar)
-
-  (parser-generator-lr-generate-parser-tables)
-
-  ;; LR-items set 14:
-;;   (
-;; ((exp) (exp) ("*" exp) ("
-;; "))
-;; ((exp) (exp) ("*" exp) ("*"))
-;; ((exp) (exp) ("*" exp) ("+"))
-;; ((exp) (exp) ("*" exp) ("-"))
-;; ((exp) (exp) ("*" exp) ("/"))
-;; ((exp) (exp) ("*" exp) ("^"))
-;; ((exp) (exp) ("+" exp) ("
-;; "))
-;; ((exp) (exp) ("+" exp) ("*"))
-;; ((exp) (exp) ("+" exp) ("+"))
-;; ((exp) (exp) ("+" exp) ("-"))
-;; ((exp) (exp) ("+" exp) ("/"))
-;; ((exp) (exp) ("+" exp) ("^"))
-;; ((exp) (exp) ("-" exp) ("
-;; "))
-;; ((exp) (exp) ("-" exp) ("*"))
-;; ((exp) (exp) ("-" exp) ("+"))
-;; ((exp) (exp) ("-" exp) ("-"))
-;; ((exp) (exp) ("-" exp) ("/"))
-;; ((exp) (exp) ("-" exp) ("^"))
-;; ((exp) (exp) ("/" exp) ("
-;; "))
-;; ((exp) (exp) ("/" exp) ("*"))
-;; ((exp) (exp) ("/" exp) ("+"))
-;; ((exp) (exp) ("/" exp) ("-"))
-;; ((exp) (exp) ("/" exp) ("/"))
-;; ((exp) (exp) ("/" exp) ("^"))
-;; ((exp) (exp) ("^" exp) ("
-;; "))
-;; ((exp) (exp) ("^" exp) ("*"))
-;; ((exp) (exp) ("^" exp) ("+"))
-;; ((exp) (exp) ("^" exp) ("-"))
-;; ((exp) (exp) ("^" exp) ("/"))
-;; ((exp) (exp) ("^" exp) ("^"))
-;; ((exp) (exp "^" exp) nil ("
-;; "))
-;; ((exp) (exp "^" exp) nil ("*"))
-;; ((exp) (exp "^" exp) nil ("+"))
-;; ((exp) (exp "^" exp) nil ("-"))
-;; ((exp) (exp "^" exp) nil ("/"))
-;; ((exp) (exp "^" exp) nil ("^"))
-;; )
-
-  ;; TODO Should error here in state 14 of GOTO-table generation
   (should-error
-   (progn
-     (parser-generator-lr--prepare-global-declaration)
-     (parser-generator-lr--generate-goto-tables)))
-
-  ;; TODO Add global precedence and grammar should now pass
-
-
+   (parser-generator-lr-generate-parser-tables))
+  (message "Expected shift/reduce conflict in state 14")
 
-  ;; TODO Refactor context-sensitive grammar to apply to entire rule instead 
of specific element
+  ;; TODO Add global precedence and context-sensitive precedence and grammar 
should now pass without conflicts
+  (setq
+   parser-generator--global-attributes
+   '(%left %precedence %right))
+  (setq
+   parser-generator-lr--global-precedence-attributes
+   '(%left %precedence %right))
+  (setq
+   parser-generator--global-declaration
+   '(
+     (%left "-" "+")
+     (%left "*" "/")
+     (%precedence NEG)
+     (%right "^")))
+  (setq
+   parser-generator--context-sensitive-attributes
+   '(%prec))
+  (parser-generator-set-grammar
+   '(
+     (start input line exp)
+     ("+" "-" "*" "/" "^" "(" ")" "\n" NUM)
+     (
+      (start input)
+      (input
+       %empty
+       (input line (lambda(args) (nth 1 args))))
+      (line
+       "\n"
+       (exp "\n" (lambda(args) (nth 0 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 args)))))
+     start))
+  (parser-generator-process-grammar)
+  (parser-generator-lr-generate-parser-tables)
 
   (message "Generated parser")
 
@@ -1739,7 +1724,7 @@
   "Run test."
   ;; (setq debug-on-error nil)
 
-  ;; (parser-generator-lr-test-infix-calculator)
+  (parser-generator-lr-test-infix-calculator)
   (parser-generator-lr-test--items-for-prefix)
   (parser-generator-lr-test--items-valid-p)
   (parser-generator-lr-test--generate-goto-tables)



reply via email to

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