[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode 962e7c8 52/96: Context-sensitive precedence a
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode 962e7c8 52/96: Context-sensitive precedence attribute is automatically parsed from YACC |
Date: |
Fri, 29 Oct 2021 11:14:45 -0400 (EDT) |
branch: externals/phps-mode
commit 962e7c8c14cce27510e31b7dc1a7fe53f425a1b3
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Context-sensitive precedence attribute is automatically parsed from YACC
---
admin/phps-mode-automation.el | 11 ++++--
phps-mode-automation-grammar.el | 20 +++-------
phps-mode-automation-parser-generator.el | 63 +++++++++++++++++++++++---------
3 files changed, 58 insertions(+), 36 deletions(-)
diff --git a/admin/phps-mode-automation.el b/admin/phps-mode-automation.el
index e0fe7cd..93d0322 100644
--- a/admin/phps-mode-automation.el
+++ b/admin/phps-mode-automation.el
@@ -35,7 +35,10 @@
"Generate parser."
(if (fboundp 'parser-generator-lr-export-to-elisp)
(progn
- ;; TODO Generate precedence here
+ ;; TODO Generate here
+ ;; phps-mode-automation-grammar--global-attributes
+ ;; phps-mode-automation-grammar--lr-global-precedence-attributes
+ ;; phps-mode-automation-grammar--global-declaration
;; Prepare export
(when (fboundp 'parser-generator-set-grammar)
@@ -61,6 +64,8 @@
parser-generator-lex-analyzer--function
phps-mode-automation-grammar--lex-analyzer-function))
+ ;; TODO Make dump of variable above work
+
(when (boundp 'parser-generator-lex-analyzer--get-function)
(setq
parser-generator-lex-analyzer--get-function
@@ -84,12 +89,12 @@
(when (boundp 'parser-generator--context-sensitive-attributes)
(setq
parser-generator--context-sensitive-attributes
- phps-mode-automation-grammar--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
-
phps-mode-automation-grammar--lr-context-sensitive-precedence-attribute))
+ (car
phps-mode-automation-parser-generator--context-sensitive-attributes)))
(when (boundp 'parser-generator-lr--precedence-comparison-function)
(setq
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index f5e63f5..aa1c080 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--context-sensitive-attributes
- '(%prec)
- "List of context-sensitive attributes.")
-
-(defvar
- phps-mode-automation-grammar--lr-context-sensitive-precedence-attribute
- '%prec
- "The LR-parser's context-sensitive precedence attribute.")
-
-(defvar
phps-mode-automation-grammar--global-attributes
'(%left %nonassoc %precedence %right)
"List of valid global attributes.")
@@ -58,11 +48,6 @@
"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.")
-
-(defvar
phps-mode-automation-grammar--global-declaration
'(
(%precedence T_THROW)
@@ -101,6 +86,11 @@
"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.")
+
+(defvar
phps-mode-automation-grammar--look-ahead-number
1
"The look-ahead number of grammar.")
diff --git a/phps-mode-automation-parser-generator.el
b/phps-mode-automation-parser-generator.el
index 570cf60..f605b41 100644
--- a/phps-mode-automation-parser-generator.el
+++ b/phps-mode-automation-parser-generator.el
@@ -44,6 +44,11 @@
"Symbols of grammar.")
(defvar
+ phps-mode-automation-parser-generator--context-sensitive-attributes
+ nil
+ "Context-sensitive attributes found in grammar.")
+
+(defvar
phps-mode-automation-parser-generator--production-lhs
nil
"LHS of productions of grammar.")
@@ -58,7 +63,7 @@
;; Download YACC if not available
(unless (file-exists-p php-yacc-file)
(message
- "Downloading PHP 8.0 YACC grammar..")
+ "Downloading PHP 8.0 YACC grammar.. since %S does not exists"
php-yacc-file)
(url-copy-file
php-yacc-url php-yacc-file
t
@@ -89,6 +94,9 @@
(setq
phps-mode-automation-parser-generator--symbols
(make-hash-table :test 'equal))
+ (setq
+ phps-mode-automation-parser-generator--context-sensitive-attributes
+ nil)
(parser-generator-set-look-ahead-number
1)
@@ -382,23 +390,42 @@
(goto-char (point-min))
(let ((productions (eval (car (read-from-string
(parser-generator-lr-translate))))))
- (maphash
- (lambda (k _v)
- (if (gethash
- k
- phps-mode-automation-parser-generator--production-lhs)
- (push
- k
- phps-mode-automation-parser-generator--non-terminals)
- ;; Skip context-sensitive precedence and e-identifier
- (when
- (or
- (stringp k)
- (not (string-match-p "%" (symbol-name k))))
- (push
- k
- phps-mode-automation-parser-generator--terminals))))
- phps-mode-automation-parser-generator--symbols)
+ (let ((context-sensitive-attributes)
+ (context-sensitive-attributes-map (make-hash-table :test 'equal)))
+ (maphash
+ (lambda (k _v)
+ (if (gethash
+ k
+ phps-mode-automation-parser-generator--production-lhs)
+ (push
+ k
+ phps-mode-automation-parser-generator--non-terminals)
+
+ ;; Store context-sensitive attributes and terminals
+ (if
+ (and
+ (symbolp k)
+ (string-match-p "%" (symbol-name k)))
+ (unless
+ (or
+ (equal k '%empty)
+ (gethash
+ k
+ context-sensitive-attributes-map))
+ (push
+ k
+ context-sensitive-attributes)
+ (puthash
+ k
+ t
+ context-sensitive-attributes-map))
+ (push
+ k
+ phps-mode-automation-parser-generator--terminals))))
+ phps-mode-automation-parser-generator--symbols)
+ (setq
+ phps-mode-automation-parser-generator--context-sensitive-attributes
+ context-sensitive-attributes))
(list
phps-mode-automation-parser-generator--non-terminals
- [elpa] externals/phps-mode 65152f4 36/96: Added TODO item, (continued)
- [elpa] externals/phps-mode 65152f4 36/96: Added TODO item, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode add17a7 24/96: T_COMMENT and T_DOC_COMMENT are excluded from parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode f46b98f 25/96: More work on integrating parser, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 6b3a298 29/96: More work on parsers lex-analyzer refactor, Christian Johansson, 2021/10/29
- [elpa] externals/phps-mode 45508e1 32/96: Reverted integration of parser into other files due to immaturity, Christian Johansson, 2021/10/29
- [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 <=
- [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, 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