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

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

[elpa] externals/parser-generator 26b8a21276 01/29: Added failing test f


From: Christian Johansson
Subject: [elpa] externals/parser-generator 26b8a21276 01/29: Added failing test for LR(k=1) parse with left-recursive grammar
Date: Sat, 12 Feb 2022 02:24:41 -0500 (EST)

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

    Added failing test for LR(k=1) parse with left-recursive grammar
---
 test/parser-generator-lr-test.el | 119 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 118 insertions(+), 1 deletion(-)

diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index b7002a8390..c5c06870b9 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -1047,7 +1047,7 @@
   (message "Passed incremental-tests")
 
 
-  ;; TODO Test left-recursive grammar from PHP 8.0 here
+  ;; Test left-recursive grammar from PHP 8.0 here
   (parser-generator-set-look-ahead-number 1)
   (setq
    parser-generator--e-identifier
@@ -1175,6 +1175,123 @@
       (message "Passed test PHP 8.0 match grammar 2")
       ))
 
+  ;; TODO Test another left-recursive grammar from PHP 8.0 here
+  (parser-generator-set-look-ahead-number 1)
+  (setq
+   parser-generator--e-identifier
+   '%empty)
+  (parser-generator-set-grammar
+   '(
+     (start inner_statement_list statement switch_case_list case_list 
case_separator)
+     (T_SWITCH T_ECHO T_CONSTANT_ENCAPSED_STRING ";" ":" "{" "}" T_CASE)
+     (
+      (start
+       inner_statement_list
+       )
+      (inner_statement_list
+       (inner_statement_list statement)
+       %empty
+       )
+      (statement
+       (T_SWITCH switch_case_list)
+       (T_ECHO T_CONSTANT_ENCAPSED_STRING ";")
+       )
+      (switch_case_list
+       ("{" case_list "}")
+       ("{" ";" case_list "}")
+       )
+      (case_list
+       %empty
+       (case_list T_CASE case_separator inner_statement_list)
+       )
+      (case_separator
+       ":"
+       ";"
+       )
+      )
+     start
+     )
+   )
+  (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 "*PHP8.0*"
+       (let ((token))
+         (goto-char index)
+         (cond
+          ((looking-at "[ \n\t]+")
+           (setq
+            parser-generator-lex-analyzer--move-to-index-flag
+            (match-end 0)))
+          ((looking-at "\\(\".+\"\\)")
+           (setq
+            token
+            `(
+              T_CONSTANT_ENCAPSED_STRING
+              ,(match-beginning 0)
+              . ,(match-end 0)
+              )
+            )
+           )
+          ((looking-at "case")
+           (setq
+            token
+            `(
+              T_CASE
+              ,(match-beginning 0)
+              . ,(match-end 0))
+            )
+           )
+          ((looking-at "switch")
+           (setq
+            token
+            `(
+              T_SWITCH
+              ,(match-beginning 0)
+              . ,(match-end 0))
+            )
+           )
+          ((looking-at "echo")
+           (setq
+            token
+            `(
+              T_ECHO
+              ,(match-beginning 0)
+              . ,(match-end 0))
+            )
+           )
+          ((looking-at "[;{}:]")
+           (setq
+            token
+            `(
+              ,(match-string-no-properties 0)
+              ,(match-beginning 0)
+              . ,(match-end 0))
+            )
+           )
+          )
+         token
+         ))))
+  (let ((buffer (generate-new-buffer "*PHP8.0*")))
+    (with-current-buffer buffer
+      (kill-region (point-min) (point-max))
+      (insert "switch\n{\n    case:\n        echo \"hello\";\n}\n")
+      (parser-generator-lr--parse)
+      (kill-buffer)
+      (message "Passed test PHP 8.0 switch case grammar 1")
+      ))
+  (let ((buffer (generate-new-buffer "*PHP8.0*")))
+    (with-current-buffer buffer
+      (kill-region (point-min) (point-max))
+      (insert "switch\n{\n    case:\n    case:\n    case;\n    case;\n        
echo \"hello\";\n}\n")
+      (parser-generator-lr--parse)
+      (kill-buffer)
+      (message "Passed test PHP 8.0 switch case grammar 2")
+      ))
+
   (message "Passed tests for (parser-generator-lr--parse)"))
 
 (defun parser-generator-lr-test-parse-k-2 ()



reply via email to

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