[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 4dbd9a2 54/96: Automatically parsing of globa
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 4dbd9a2 54/96: Automatically parsing of global declaration from YACC |
Date: |
Fri, 29 Oct 2021 11:14:45 -0400 (EDT) |
branch: externals/phps-mode
commit 4dbd9a28170f8361db57232729cd32057a1bb0f3
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Automatically parsing of global declaration from YACC
---
admin/phps-mode-automation.el | 10 +-
phps-mode-automation-grammar.el | 38 --------
phps-mode-automation-parser-generator.el | 157 ++++++++++++-------------------
3 files changed, 64 insertions(+), 141 deletions(-)
diff --git a/admin/phps-mode-automation.el b/admin/phps-mode-automation.el
index 93d0322..9ac043e 100644
--- a/admin/phps-mode-automation.el
+++ b/admin/phps-mode-automation.el
@@ -39,6 +39,11 @@
;; phps-mode-automation-grammar--global-attributes
;; phps-mode-automation-grammar--lr-global-precedence-attributes
;; phps-mode-automation-grammar--global-declaration
+ (let ((global-declaration
(phps-mode-automation-parser-generator--global-declaration)))
+ (when (boundp 'parser-generator--global-declaration)
+ (setq
+ parser-generator--global-declaration
+ global-declaration)))
;; Prepare export
(when (fboundp 'parser-generator-set-grammar)
@@ -101,11 +106,6 @@
parser-generator-lr--precedence-comparison-function
phps-mode-automation-grammar--precedence-comparison-function))
- (when (boundp 'parser-generator--global-declaration)
- (setq
- parser-generator--global-declaration
- phps-mode-automation-grammar--global-declaration))
-
(when (fboundp 'parser-generator-process-grammar)
(parser-generator-process-grammar))
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index aa1c080..7f3e5e9 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -48,44 +48,6 @@
"The LR-parser's list of global precedence attributes.")
(defvar
- phps-mode-automation-grammar--global-declaration
- '(
- (%precedence T_THROW)
- (%precedence PREC_ARROW_FUNCTION)
- (%precedence T_INCLUDE T_INCLUDE_ONCE T_REQUIRE T_REQUIRE_ONCE)
- (%left T_LOGICAL_OR)
- (%left T_LOGICAL_XOR)
- (%left T_LOGICAL_AND)
- (%precedence T_PRINT)
- (%precedence T_YIELD)
- (%precedence T_DOUBLE_ARROW)
- (%precedence T_YIELD_FROM)
- (%precedence "=" T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL
T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL
T_SR_EQUAL T_POW_EQUAL T_COALESCE_EQUAL)
- (%left "?" ":")
- (%right T_COALESCE)
- (%left T_BOOLEAN_OR)
- (%left T_BOOLEAN_AND)
- (%left "|")
- (%left "^")
- (%left "&")
- (%nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL
T_SPACESHIP)
- (%nonassoc "<" T_IS_SMALLER_OR_EQUAL ">" T_IS_GREATER_OR_EQUAL)
- (%left ".")
- (%left T_SL T_SR)
- (%left "+" "-")
- (%left "*" "/" "%")
- (%precedence "!")
- (%precedence T_INSTANCEOF)
- (%precedence "~" T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST
T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST "@" )
- (%right T_POW)
- (%precedence T_CLONE)
- (%precedence T_NOELSE)
- (%precedence T_ELSEIF)
- (%precedence T_ELSE)
- )
- "Declaration for grammar.")
-
-(defvar
phps-mode-automation-grammar--lr--allow-default-conflict-resolution
t
"Allow shift resolution to shift/reduce conflicts were precedence is
missing.")
diff --git a/phps-mode-automation-parser-generator.el
b/phps-mode-automation-parser-generator.el
index 22062a0..f8b2403 100644
--- a/phps-mode-automation-parser-generator.el
+++ b/phps-mode-automation-parser-generator.el
@@ -466,29 +466,44 @@
nil)
(parser-generator-set-grammar
'(
- (Start Declarations Declaration Type Symbols Symbol)
- (type symbol literal)
+ (Start Declarations-Block Declarations Declaration Type Symbols Symbol)
+ (type symbol literal comment)
(
(Start
- Declarations
+ Declarations-Block
)
+ (Declarations-Block
+ (Declarations
+ (lambda(args)
+ (format "'(\n%s)" args))))
(Declarations
- Declaration
- (Declaration Declarations)
+ (Declaration
+ (lambda(args) (format "%s" args)))
+ (Declaration Declarations
+ (lambda(args) (format "%s%s" (nth 0 args) (nth 1 args))))
)
(Declaration
- (Type Symbols)
+ (comment
+ (lambda(args) ""))
+ (Type Symbols
+ (lambda(args) (format " (%s %s)\n" (nth 0 args) (nth 1 args))))
)
(Type
- type
+ (type
+ (lambda(args) (format "%s" args)))
)
(Symbols
- Symbol
- (Symbol Symbols)
+ (Symbol
+ (lambda(args) (format "%s" args)))
+ (Symbol Symbols
+ (lambda(args) (format "%s %s" (nth 0 args) (nth 1 args))))
)
(Symbol
- symbol
- literal
+ (symbol
+ (lambda(args) (format "%s" args)))
+ (literal
+ (lambda(args)
+ (format "\"%s\"" (substring args 1 2))))
)
)
Start))
@@ -519,86 +534,29 @@
((looking-at "\\(%[a-z]+\\)")
(setq
token
- `(comment ,comment-start . ,comment-end)))
-
- ((looking-at "\\({\\)")
- (let ((nesting-stack 1)
- (logic-start (match-beginning 0))
- (logic-end)
- (continue t))
- (forward-char 1)
- (while (and
- continue
- (> nesting-stack 0)
- (< (point) (point-max)))
- (let ((next-stop (search-forward-regexp "\\({\\|}\\|/\\*\\)"
nil t)))
- (let ((match (buffer-substring-no-properties
(match-beginning 0) (match-end 0))))
- (cond
-
- ((not next-stop)
- (setq
- continue
- nil))
-
- ((string= match "{")
- (setq
- nesting-stack
- (1+ nesting-stack)))
-
- ((string= match "}")
- (setq
- nesting-stack
- (1- nesting-stack))
- (when
- (= nesting-stack 0)
- (setq
- logic-end
- (point))))
-
- ((string= match "/*")
- (let (
- (comment-start (match-beginning 0))
- (comment-end
- (search-forward-regexp "\\*/" nil t)))
- (unless comment-end
- (error
- "Failed to find end of comment started at %S (2))"
- comment-start))))
-
-
- ))))
- (unless logic-end
- (error
- "Failed to find end of logic started at %S"
- logic-start))
- (setq
- token
- `(logic ,logic-start . ,logic-end))))
-
- ((looking-at "\\(:\\|;\\||\\)")
- (setq
- token
- `(
- ,(buffer-substring-no-properties
- (match-beginning 0)
- (match-end 0))
- ,(match-beginning 0)
- . ,(match-end 0))))
+ `(type ,(match-beginning 0) . ,(match-end 0))))
- ((looking-at "\\(%%\\)")
+ ((looking-at "\\('.'\\)")
(setq
token
- `(productions-delimiter ,(match-beginning 0) . ,(match-end 0))))
+ `(literal ,(match-beginning 0) . ,(match-end 0))))
- ((looking-at "\\([%a-zA-Z_]+\\)")
+ ((looking-at "\\([a-zA-Z_]+\\)")
(setq
token
`(symbol ,(match-beginning 0) . ,(match-end 0))))
- ((looking-at "\\('.'\\)")
- (setq
- token
- `(literal ,(match-beginning 0) . ,(match-end 0))))
+ ((looking-at "\\(/\\*\\)")
+ (let ((comment-start (match-beginning 0))
+ (comment-end
+ (search-forward-regexp "\\(\\*/\\)" nil t)))
+ (unless comment-end
+ (error
+ "Failed to find end of comment started at %S (1)"
+ comment-start))
+ (setq
+ token
+ `(comment ,comment-start . ,comment-end))))
))
@@ -606,7 +564,9 @@
(let ((token-data
(buffer-substring-no-properties
(car (cdr token))
- (cdr (cdr token)))))))
+ (cdr (cdr token)))))
+ ;; (message "token-data: %S" token-data)
+ ))
token))))
(setq
@@ -616,14 +576,7 @@
(let ((start (car (cdr token)))
(end (cdr (cdr token))))
(when (<= end (point-max))
- (let ((symbol
- (buffer-substring-no-properties start end)))
- (when
- (string-match-p "^\\([0-9]+\\.[0-9]+\\|[0-9]+\\)$" symbol)
- (setq
- symbol
- (string-to-number symbol)))
- symbol))))))
+ (buffer-substring-no-properties start end))))))
(parser-generator-process-grammar)
(parser-generator-lr-generate-parser-tables)
@@ -632,15 +585,23 @@
(switch-to-buffer buffer)
(insert-file (expand-file-name "zend_language_parser.y"))
(goto-char (point-min))
- (let ((delimiter-start (search-forward "%%")))
+ (let ((delimiter-start (search-forward "%precedence")))
(setq
delimiter-start
- (- delimiter-start 2))
- (kill-region (point-min) delimiter-start))
- (let ((delimiter-start (search-forward "%%")))
- (kill-region delimiter-start (point-max)))
+ (- delimiter-start 11))
+ (kill-region
+ (point-min)
+ delimiter-start))
+ (let ((delimiter-start (search-forward "%token")))
+ (setq
+ delimiter-start
+ (- delimiter-start 6))
+ (kill-region
+ delimiter-start
+ (point-max)))
(goto-char (point-min))
- (let ((productions (eval (car (read-from-string
(parser-generator-lr-translate))))))))
+ (let ((global-declaration (eval (car (read-from-string
(parser-generator-lr-translate))))))
+ global-declaration)))
(provide 'phps-mode-automation-parser-generator)
;;; phps-mode-automation-parser-generator.el ends here
- [elpa] externals/phps-mode 37dda7a 34/96: Added another failing test for parser, (continued)
- [elpa] externals/phps-mode 37dda7a 34/96: Added another failing test for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 339e39b 37/96: Started on YACC grammar parser generator, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 244a62b 39/96: Parser generator now can parse PHP YACC productions, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode a449b5b 42/96: Improved formatting of generated productions, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode e3d973d 43/96: Improved support for semi-colon in grammar delimiter, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 962e7c8 52/96: Context-sensitive precedence attribute is automatically parsed from YACC, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode b94cbbf 58/96: Set GB collection in automation, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode bb4858b 61/96: Defined lex-analyzer reset function for parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 22f0a47 62/96: Parser generator passing byte-compilation, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 751bece 50/96: Removed terminals, non-terminals and start from automation grammar, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 4dbd9a2 54/96: Automatically parsing of global declaration from YACC,
Christian Johansson <=
- [elpa] externals/phps-mode 024e8d4 55/96: Setting up context-sensitive attributes automatically, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 605b76c 57/96: Removed note, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 20ad000 68/96: Added another TODO item, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode a6c5db1 45/96: Updated grammar productions based on automatically parsed grammar from YACC, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 2ac480a 47/96: Started on automatic generation of terminals, non-terminals and start as well, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode eb17d8c 51/96: Improved resuming of parser-generation, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 6af98c4 56/96: Productions are now read automatically again, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 212fd7f 63/96: Fixed warning in byte-compilation, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode fb57c3b 53/96: Started on parser for global declaration, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode e418621 59/96: Projects passes tests and byte-compilation again, Christian Johansson, 2021/10/29