[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 ()
- [elpa] externals/parser-generator updated (4a3a51de0a -> 4c34af706f), Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator f2c4ad9665 03/29: Added TODO item, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator abf7fcf615 02/29: Improved debug message, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator 4297a9b43e 04/29: Added another failing test for FIRST(x) were first symbol can be %empty, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator 26b8a21276 01/29: Added failing test for LR(k=1) parse with left-recursive grammar,
Christian Johansson <=
- [elpa] externals/parser-generator add9d0072f 09/29: Added failing test for e-free-first, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator bb396d5ce9 12/29: Made psuedo-code for algorithm of FIRST and E-FREE-FIRST, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator 0fa8261ed2 11/29: Passing some tests for FIRST, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator 3bf81567ac 05/29: Added TODO notes and a failing test for e-free-first, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator 4e4907da84 10/29: More wrestling with FIRST and E-FREE-FIRST, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator 6ffa2a0290 15/29: More work on FIRST function, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator efe98cb71a 14/29: More tweaks of FIRST and E-FREE-FIRST, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator a7a321ca93 28/29: Added link to TODO document, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator e1f3fb4042 18/29: More work on FIRST, Christian Johansson, 2022/02/12
- [elpa] externals/parser-generator 0e1fbf9cef 07/29: More debugging of edge case, Christian Johansson, 2022/02/12