[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 024e8d4 55/96: Setting up context-sensitive a
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 024e8d4 55/96: Setting up context-sensitive attributes automatically |
Date: |
Fri, 29 Oct 2021 11:14:46 -0400 (EDT) |
branch: externals/phps-mode
commit 024e8d435378364cb672ce95fd83b5c415c498cc
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Setting up context-sensitive attributes automatically
---
admin/phps-mode-automation.el | 49 +++++++++++++++-----------------
phps-mode-automation-grammar.el | 10 -------
phps-mode-automation-parser-generator.el | 34 ++++++++++++++++++----
3 files changed, 51 insertions(+), 42 deletions(-)
diff --git a/admin/phps-mode-automation.el b/admin/phps-mode-automation.el
index 9ac043e..d244293 100644
--- a/admin/phps-mode-automation.el
+++ b/admin/phps-mode-automation.el
@@ -35,20 +35,37 @@
"Generate parser."
(if (fboundp 'parser-generator-lr-export-to-elisp)
(progn
- ;; TODO Generate here
- ;; 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)))
+ global-declaration))
+
+ (when (boundp 'parser-generator--global-attributes)
+ (setq
+ parser-generator--global-attributes
+ phps-mode-automation-parser-generator--attributes))
+
+ (when (boundp 'parser-generator-lr--global-precedence-attributes)
+ (setq
+ parser-generator-lr--global-precedence-attributes
+ phps-mode-automation-parser-generator--attributes)))
;; Prepare export
(when (fboundp 'parser-generator-set-grammar)
(parser-generator-set-grammar
- (phps-mode-automation-parser-generator--grammar)))
+ (phps-mode-automation-parser-generator--grammar))
+
+ (when (boundp 'parser-generator--context-sensitive-attributes)
+ (setq
+ parser-generator--context-sensitive-attributes
+
phps-mode-automation-parser-generator--context-sensitive-attributes))
+
+ (when (boundp
'parser-generator-lr--context-sensitive-precedence-attribute)
+ (setq
+ parser-generator-lr--context-sensitive-precedence-attribute
+ (car
phps-mode-automation-parser-generator--context-sensitive-attributes))))
(when (fboundp 'parser-generator-set-look-ahead-number)
(parser-generator-set-look-ahead-number
@@ -76,31 +93,11 @@
parser-generator-lex-analyzer--get-function
phps-mode-automation-grammar--lex-analyzer-get-function))
- (when (boundp 'parser-generator--global-attributes)
- (setq
- parser-generator--global-attributes
- phps-mode-automation-grammar--global-attributes))
-
- (when (boundp 'parser-generator-lr--global-precedence-attributes)
- (setq
- parser-generator-lr--global-precedence-attributes
- phps-mode-automation-grammar--lr-global-precedence-attributes))
-
(when (boundp 'parser-generator-lr--allow-default-conflict-resolution)
(setq
parser-generator-lr--allow-default-conflict-resolution
phps-mode-automation-grammar--lr--allow-default-conflict-resolution))
- (when (boundp 'parser-generator--context-sensitive-attributes)
- (setq
- parser-generator--context-sensitive-attributes
-
phps-mode-automation-parser-generator--context-sensitive-attributes))
-
- (when (boundp
'parser-generator-lr--context-sensitive-precedence-attribute)
- (setq
- parser-generator-lr--context-sensitive-precedence-attribute
- (car
phps-mode-automation-parser-generator--context-sensitive-attributes)))
-
(when (boundp 'parser-generator-lr--precedence-comparison-function)
(setq
parser-generator-lr--precedence-comparison-function
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index 7f3e5e9..9b38c97 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -38,16 +38,6 @@
"Reversed list of tokens.")
(defvar
- phps-mode-automation-grammar--global-attributes
- '(%left %nonassoc %precedence %right)
- "List of valid global attributes.")
-
-(defvar
- phps-mode-automation-grammar--lr-global-precedence-attributes
- '(%left %nonassoc %precedence %right)
- "The LR-parser's list of global precedence attributes.")
-
-(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 f8b2403..da445c3 100644
--- a/phps-mode-automation-parser-generator.el
+++ b/phps-mode-automation-parser-generator.el
@@ -24,9 +24,9 @@
;;; Code:
(defvar
- phps-mode-automation-parser-generator--global-declaration
+ phps-mode-automation-parser-generator--attributes
nil
- "Global declaration of grammar.")
+ "Attributes of grammar.")
(defvar
phps-mode-automation-parser-generator--start
@@ -383,6 +383,7 @@
(let ((buffer (generate-new-buffer "*buffer*")))
(switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
(insert-file (expand-file-name "zend_language_parser.y"))
(goto-char (point-min))
(let ((delimiter-start (search-forward "%%")))
@@ -444,9 +445,8 @@
(phps-mode-automation-parser-generator--ensure-yacc-grammar-is-available)
(setq
- phps-mode-automation-parser-generator--global-declaration
- nil)
-
+ phps-mode-automation-parser-generator--attributes
+ (make-hash-table :test 'equal))
(parser-generator-set-look-ahead-number
1)
(setq
@@ -490,7 +490,16 @@
)
(Type
(type
- (lambda(args) (format "%s" args)))
+ (lambda(args)
+ (unless
+ (gethash
+ args
+ phps-mode-automation-parser-generator--attributes)
+ (puthash
+ args
+ t
+ phps-mode-automation-parser-generator--attributes))
+ (format "%s" args)))
)
(Symbols
(Symbol
@@ -583,6 +592,7 @@
(let ((buffer (generate-new-buffer "*buffer*")))
(switch-to-buffer buffer)
+ (kill-region (point-min) (point-max))
(insert-file (expand-file-name "zend_language_parser.y"))
(goto-char (point-min))
(let ((delimiter-start (search-forward "%precedence")))
@@ -601,6 +611,18 @@
(point-max)))
(goto-char (point-min))
(let ((global-declaration (eval (car (read-from-string
(parser-generator-lr-translate))))))
+
+ (let ((attributes))
+ (maphash
+ (lambda (k _v)
+ (push
+ (intern k)
+ attributes))
+ phps-mode-automation-parser-generator--attributes)
+ (setq
+ phps-mode-automation-parser-generator--attributes
+ attributes))
+
global-declaration)))
(provide 'phps-mode-automation-parser-generator)
- [elpa] externals/phps-mode 339e39b 37/96: Started on YACC grammar parser generator, (continued)
- [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, 2021/10/29
- [elpa] externals/phps-mode 024e8d4 55/96: Setting up context-sensitive attributes automatically,
Christian Johansson <=
- [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
- [elpa] externals/phps-mode 945571c 65/96: Fixed byte-compilation issues with parser, Christian Johansson, 2021/10/29