branch: externals/parser-generator commit 7a3e653dd2006d11b13cea333bab87159908a2f2 Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Added test for testing precedence of context-sensitive attribute --- test/parser-generator-lr-test.el | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el index 1e3de75..b09789e 100644 --- a/test/parser-generator-lr-test.el +++ b/test/parser-generator-lr-test.el @@ -249,7 +249,14 @@ ((and a-value (not b-value)) - t)))) + t) + + ((and + (not a-value) + (not b-value)) + nil) + + ))) (parser-generator-lr-generate-parser-tables) (should (equal @@ -341,6 +348,7 @@ `(,symbol ,(match-beginning 0) . ,(match-end 0))))) (t (error "Unexpected input at %d!" index)))) token)))) + (setq parser-generator-lex-analyzer--get-function (lambda (token) @@ -373,6 +381,9 @@ (setq parser-generator--context-sensitive-attributes '(%prec)) + (setq + parser-generator--global-declaration + nil) (parser-generator-set-grammar '( (start input line exp) @@ -396,7 +407,6 @@ ("(" exp ")" (lambda(args) (nth 1 args))))) start)) (parser-generator-process-grammar) - (should-error (parser-generator-lr-generate-parser-tables)) (message "Grammar caused expected conflict 3") @@ -441,6 +451,8 @@ ;; * -> reduce 5.. causes expected (1+1)*2 = 4 (let ((buffer (generate-new-buffer "*buffer*"))) (switch-to-buffer buffer) + + (kill-region (point-min) (point-max)) (insert "2+3*5\n") (let ((parse (parser-generator-lr-parse))) (should @@ -452,11 +464,9 @@ (equal 17.0 translate))) - (kill-buffer)) - (message "Passed correct precedence of 2+3*5 = 2+(3*5) = 17") + (message "Passed correct precedence of 2+3*5 = 2+(3*5) = 17") - (let ((buffer (generate-new-buffer "*buffer*"))) - (switch-to-buffer buffer) + (kill-region (point-min) (point-max)) (insert "2*3+5\n") (let ((parse (parser-generator-lr-parse))) (should @@ -468,8 +478,17 @@ (equal 16.0 translate))) + (message "Passed incorrect precedence of 2*3+5 => 2*(3+5) = 16") + + (kill-region (point-min) (point-max)) + (insert "-5+3\n") + (let ((translate (parser-generator-lr-translate))) + (should + (equal + -8.0 + translate))) + (message "Passed incorrect precedence of -5+3 => -(5+3) = -8") (kill-buffer)) - (message "Passed incorrect precedence of 2*3+5 => 2*(3+5) = 16") ;; Add global precedence, but it should not solve all errors (setq