[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode b714471 21/96: Added parse function in lex-an
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode b714471 21/96: Added parse function in lex-analyzer and a test for it |
Date: |
Fri, 29 Oct 2021 11:14:36 -0400 (EDT) |
branch: externals/phps-mode
commit b71447138b37d0892f45c5fb95bca1d84705dd2f
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added parse function in lex-analyzer and a test for it
---
phps-mode-lex-analyzer.el | 72 +++++++++++++++++++++++++++++++++----
test/phps-mode-test-lex-analyzer.el | 19 +++++++++-
2 files changed, 84 insertions(+), 7 deletions(-)
diff --git a/phps-mode-lex-analyzer.el b/phps-mode-lex-analyzer.el
index 0513e05..918c147 100644
--- a/phps-mode-lex-analyzer.el
+++ b/phps-mode-lex-analyzer.el
@@ -34,6 +34,7 @@
(require 'phps-mode-lexer)
(require 'phps-mode-macros)
+(require 'phps-mode-parser)
(require 'phps-mode-serial)
(require 'semantic)
@@ -362,15 +363,74 @@
t
(phps-mode-lexer--re2c))
-(defun phps-mode-lex-analyzer--parse-entire-buffer (&optional
forced-synchronous)
- "Parse entire buffer, optionally FORCED-SYNCHRONOUS"
+(defun phps-mode-lex-analyzer--parse-string
+ (
+ string
+ )
+ "Parse entire STRING."
(interactive)
+ (require 'phps-mode-parser)
(require 'phps-mode-macros)
- (phps-mode-debug-message (message "Parse entire buffer run"))
+ (phps-mode-debug-message (message "Parse entire string run"))
- ;; TODO Implement this
-
- )
+ (let ((buffer (generate-new-buffer "*PHPs Lexer*")))
+ ;; Create temporary buffer and run lexer in it
+ (when (get-buffer buffer)
+ (with-current-buffer buffer
+ (insert string)
+
+ ;; Reset lexer
+ (setq-local
+ phps-mode-lexer--generated-tokens
+ nil)
+ (setq-local
+ phps-mode-lexer--state
+ 'ST_INITIAL)
+ (setq-local
+ phps-mode-lexer--states
+ nil)
+ (setq-local
+ phps-mode-lexer--state-stack
+ nil)
+ (setq-local
+ phps-mode-lexer--heredoc-label
+ nil)
+ (setq-local
+ phps-mode-lexer--heredoc-label-stack
+ nil)
+ (setq
+ phps-mode-lexer--nest-location-stack
+ nil)
+
+ ;; Catch errors to kill generated buffer
+ (let ((got-error t)
+ (after-parser-parse))
+ (unwind-protect
+ ;; Run lexer or incremental lexer
+ (progn
+ (setq
+ after-parser-parse
+ (phps-mode-parser-parse))
+ (setq got-error nil))
+ (when got-error
+ (kill-buffer)))
+
+ ;; Copy lexer variables outside of buffer
+ (let ((after-lexer-state phps-mode-lexer--state)
+ (after-lexer-state-stack phps-mode-lexer--state-stack)
+ (after-lexer-states phps-mode-lexer--states)
+ (after-lexer-tokens (nreverse
phps-mode-lexer--generated-tokens))
+ (after-lexer-heredoc-label phps-mode-lexer--heredoc-label)
+ (after-lexer-heredoc-label-stack
phps-mode-lexer--heredoc-label-stack))
+ (kill-buffer)
+ (list
+ after-lexer-tokens
+ after-lexer-states
+ after-lexer-state
+ after-lexer-state-stack
+ after-lexer-heredoc-label
+ after-lexer-heredoc-label-stack
+ after-parser-parse)))))))
(defun phps-mode-lex-analyzer--re2c-run (&optional force-synchronous)
"Run lexer, optionally FORCE-SYNCHRONOUS."
diff --git a/test/phps-mode-test-lex-analyzer.el
b/test/phps-mode-test-lex-analyzer.el
index 895f6b3..a1c9c5b 100644
--- a/test/phps-mode-test-lex-analyzer.el
+++ b/test/phps-mode-test-lex-analyzer.el
@@ -1611,6 +1611,22 @@
)
+(defun phps-mode-test-lex-analyzer--parse ()
+ "Test the parser."
+
+ (should
+ (equal
+ '(((T_OPEN_TAG 1 . 7) (T_ECHO 7 . 11) (T_CONSTANT_ENCAPSED_STRING 12 . 17)
(";" 17 . 18)) ((17 18 ST_IN_SCRIPTING nil nil nil nil) (12 17 ST_IN_SCRIPTING
nil nil nil nil) (7 11 ST_IN_SCRIPTING nil nil nil nil) (1 7 ST_IN_SCRIPTING
nil nil nil nil)) ST_IN_SCRIPTING nil nil nil (80 459 466 411 333 332 154 102
79))
+ (phps-mode-lex-analyzer--parse-string
+ "<?php echo 'abc';")))
+ (message "Passed valid parse test")
+
+ (should-error
+ (phps-mode-lex-analyzer--parse-string
+ "<?php echo 'abc'"))
+ (message "Passed error parse test")
+ )
+
(defun phps-mode-test-lex-analyzer ()
"Run test for functions."
;; (setq debug-on-error t)
@@ -1631,7 +1647,8 @@
(phps-mode-test-lex-analyzer--imenu)
(phps-mode-test-lex-analyzer--get-moved-imenu)
(phps-mode-test-lex-analyzer--comment-uncomment-region)
- (phps-mode-test-lex-analyzer--move-lines-indent))
+ (phps-mode-test-lex-analyzer--move-lines-indent)
+ (phps-mode-test-lex-analyzer--parse))
(phps-mode-test-lex-analyzer)
- [elpa] externals/phps-mode c15fa0c 10/96: Using parser-mode for lexer, (continued)
- [elpa] externals/phps-mode c15fa0c 10/96: Using parser-mode for lexer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode ab56c99 13/96: More work on debugging parser-lexer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 1dd3bd3 06/96: More working on trying to get parser test working, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 3f5c008 09/96: Optimization for lexer to only need to execute once per index, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 2b167f3 08/96: Fixes for parsing start and end, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 376e690 15/96: Verified parse, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 2a9fb96 16/96: Added more tests for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 5c7c6f4 14/96: Parser passes basic lexing test, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 569505e 17/96: Added parser header and fixed byte-compilation for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 0d1843f 20/96: Started on parser integration, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode b714471 21/96: Added parse function in lex-analyzer and a test for it,
Christian Johansson <=
- [elpa] externals/phps-mode 50a014a 18/96: Using same lexer buffer for parser as the lex-analyzer is using, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode fb9905f 19/96: Added basic translation test, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode ec18c1e 22/96: Using parser to be able to implement incremental parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 1ee3094 28/96: More refactoring of the parsers lex-analyzer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 2ceb6e5 23/96: Added potential support for incremental parsing, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode e59d30e 26/96: Improvements in lex-analyzer for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode c62ec64 27/96: Started refactor of parsers lex-analyzer, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 9acda54 33/96: Added more passing tests for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode c470e37 38/96: More work on grammar parser generator, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 6b9c1a4 40/96: More pasing of grammar, Christian Johansson, 2021/10/29