[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 0a3f5f5 426/434: Added test for LR(1)
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 0a3f5f5 426/434: Added test for LR(1) PHP 8.0 match grammar |
Date: |
Mon, 29 Nov 2021 16:00:30 -0500 (EST) |
branch: externals/parser-generator
commit 0a3f5f541fdee9b83c7c55ed862624e4fcb7a81c
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added test for LR(1) PHP 8.0 match grammar
---
test/parser-generator-lr-test.el | 129 +++++++++++++++++++++++++++++++++++++++
1 file changed, 129 insertions(+)
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 95eaab71..6956cb7 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -1044,6 +1044,135 @@
(parser-generator-lr-test--parse-incremental-vs-regular)
(message "Passed incremental-tests")
+
+ ;; TODO Test 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 expr match match_arm_list non_empty_match_arm_list match_arm
match_arm_cond_list possible_comma)
+ (T_DEFAULT T_MATCH "(" ")" "{" "}" "," T_DOUBLE_ARROW number)
+ (
+ (start
+ expr
+ )
+ (expr
+ number
+ match)
+ (match
+ (T_MATCH "(" expr ")" "{" match_arm_list "}")
+ )
+ (match_arm_list
+ %empty
+ (non_empty_match_arm_list possible_comma)
+ )
+ (non_empty_match_arm_list
+ match_arm
+ (non_empty_match_arm_list "," match_arm)
+ )
+ (match_arm
+ (match_arm_cond_list possible_comma T_DOUBLE_ARROW expr)
+ (T_DEFAULT possible_comma T_DOUBLE_ARROW expr)
+ )
+ (match_arm_cond_list
+ expr
+ (match_arm_cond_list "," expr)
+ )
+ (possible_comma
+ %empty
+ ",")
+ )
+ 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)))
+ ((or
+ (looking-at "{")
+ (looking-at "}")
+ (looking-at ",")
+ (looking-at "(")
+ (looking-at ")"))
+ (setq
+ token
+ `(
+ ,(buffer-substring-no-properties
+ (match-beginning 0)
+ (match-end 0))
+ ,(match-beginning 0)
+ . ,(match-end 0)
+ )
+ ))
+ ((looking-at "default")
+ (setq
+ token
+ `(
+ T_DEFAULT
+ ,(match-beginning 0)
+ . ,(match-end 0))
+ )
+ )
+ ((looking-at "match")
+ (setq
+ token
+ `(
+ T_MATCH
+ ,(match-beginning 0)
+ . ,(match-end 0))
+ )
+ )
+ ((looking-at "=>")
+ (setq
+ token
+ `(
+ T_DOUBLE_ARROW
+ ,(match-beginning 0)
+ . ,(match-end 0))
+ )
+ )
+ ((looking-at "[0-9]+")
+ (setq
+ token
+ `(
+ number
+ ,(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 "match (55) {\n default => 33,\n}")
+ (parser-generator-lr--parse)
+ (kill-buffer)
+ (message "Passed test PHP 8.0 match grammar 1")
+ ))
+ (let ((buffer (generate-new-buffer "*PHP8.0*")))
+ (with-current-buffer buffer
+ (kill-region (point-min) (point-max))
+ (insert "match (55) {\n 22,33 => 22,\n 25 => 20,\n default =>
33\n}")
+ (parser-generator-lr--parse)
+ (kill-buffer)
+ (message "Passed test PHP 8.0 match grammar 2")
+ ))
+
(message "Passed tests for (parser-generator-lr--parse)"))
(defun parser-generator-lr-test-parse-k-2 ()
- [elpa] externals/parser-generator a8c092d 386/434: More work on precedence logic, (continued)
- [elpa] externals/parser-generator a8c092d 386/434: More work on precedence logic, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7a3e653 390/434: Added test for testing precedence of context-sensitive attribute, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5cb63eb 399/434: Improve error message of invalid global declaration, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f9223ea 400/434: Added a flag to use shift conflict resolution in cases were precedence is missing, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ded7700 387/434: Added more test for infix precedence, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9e8b89b 392/434: More work on exporting LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fc48311 409/434: Added test for FIRST calculation of multiple symbols and e-identifiers, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6733b57 415/434: Added feature to move lex-analyzer forward, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9eca533 410/434: Added test and implementation of calculating FIRST on multiple symbols were first is a non-terminal that expands into an e-identifier, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ca21bcd 412/434: Shortened doc-string, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0a3f5f5 426/434: Added test for LR(1) PHP 8.0 match grammar,
ELPA Syncer <=
- [elpa] externals/parser-generator c9906f7 420/434: Move order of export of LR lex-analyzer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a4c5d9f 429/434: Syntax-directed translations now have access to terminal data if any is available, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 428207c 432/434: Fixed bug with exported lr-parser with partial translation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fa43f05 301/434: More cpu optimizations, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a65b652 307/434: Added TODO-items, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ac7207a 292/434: Passed translate test on exported parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 63bd6c0 423/434: LR-parser now has SDT as optional feature to speed up plain parses, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9c41807 424/434: Code-styling fix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 231bf85 422/434: Using (signal) instead of (error) in LR-parser and exported LR-parser when encountering syntax error, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 48f109c 417/434: Fixed typo in exported LR parser, ELPA Syncer, 2021/11/29