[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 5f13406 319/434: More work on supporti
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 5f13406 319/434: More work on supporting LR-grammar with precedence attributes |
Date: |
Mon, 29 Nov 2021 16:00:06 -0500 (EST) |
branch: externals/parser-generator
commit 5f13406ebaf0d120758d496c5a6b5c993a3e1abc
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on supporting LR-grammar with precedence attributes
---
parser-generator-lr.el | 52 ++++++++++++++++++++++++++++++----------
test/parser-generator-lr-test.el | 29 +++++++++++++---------
2 files changed, 58 insertions(+), 23 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index 59b2994..5da6882 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -34,6 +34,16 @@
nil
"Goto-tables for grammar.")
+(defvar
+ parser-generator-lr--precedence-attribute
+ nil
+ "Attribute used for precedence.")
+
+(defvar
+ parser-generator-lr--precedence-comparison-function
+ nil
+ "Function used for resolving precedence.")
+
;; Main Algorithms
@@ -766,18 +776,36 @@
(when (equal
a-follow
b-suffix-follow-eff-item)
- (when
- signal-on-false
- (error
- "Inconsistent grammar! %S (index: %d) with look-ahead %S
conflicts with %S (index: %d) with look-ahead %S in sets: %S"
- a
- a-index
- a-follow-full
- b
- b-index
- b-suffix-follow-eff-item-full
- lr-item-sets))
- (setq valid-p nil))))
+
+ ;; If it's the same symbol but we have a precedence
+ ;; attribute on any of them, or both, pass anyway
+ (unless
+ (and
+ parser-generator-lr--precedence-attribute
+ parser-generator-lr--precedence-comparison-function
+ (or
+ (and
+ (listp (car a-follow-full))
+ (plist-get
+ (car (cdr (car a-follow-full)))
+ parser-generator-lr--precedence-attribute))
+ (and
+ (listp (car b-suffix-follow-eff-item-full))
+ (plist-get
+ (car (cdr (car b-suffix-follow-eff-item-full)))
+ parser-generator-lr--precedence-attribute))))
+ (when
+ signal-on-false
+ (error
+ "Inconsistent grammar! %S (index: %d) with look-ahead
%S conflicts with %S (index: %d) with look-ahead %S in sets: %S"
+ a
+ a-index
+ a-follow-full
+ b
+ b-index
+ b-suffix-follow-eff-item-full
+ lr-item-sets))
+ (setq valid-p nil)))))
(setq b-index (1+ b-index))))
(setq a-index (1+ a-index)))
(setq set-index (1+ set-index)))
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 2834844..fd38794 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -134,24 +134,31 @@
Sp))
(parser-generator-set-look-ahead-number 1)
(parser-generator-process-grammar)
-
- (let ((table-lr-items
- (parser-generator-lr--generate-goto-tables)))
- (message "conflict-lr-items: %S" table-lr-items)
- (message "conflict-goto-tables: %S"
(parser-generator-lr--get-expanded-goto-tables)))
-
(should-error
(parser-generator-lr-generate-parser-tables))
+ (message "Conflicted grammar caused expected exception 2")
+
+ (setq
+ parser-generator-lr--precedence-attribute
+ '%prec)
+ (setq
+ parser-generator-lr--precedence-comparison-function
+ #'<)
+ (parser-generator-lr-generate-parser-tables)
+ (message "Grammar not conflicting anymore")
(let ((table-lr-items
(parser-generator-lr--generate-goto-tables)))
- (message "conflicted lr-items: %s" table-lr-items)
+ (message
+ "conflict-lr-items: %S"
+ table-lr-items)
+ (message
+ "conflict-goto-tables: %S"
+ (parser-generator-lr--get-expanded-goto-tables))
(parser-generator-lr--generate-action-tables
table-lr-items)
- (message "conflicted goto-tables: %s"
(parser-generator-lr--get-expanded-goto-tables))
- (message "conflicted action-tables: %s"
(parser-generator-lr--get-expanded-action-tables))
- )
- (message "Passed conflicted grammar")
+ (message
+ "conflicted action-tables: %s"
(parser-generator-lr--get-expanded-action-tables)))
(message "Passed tests for (parser-generator-lr--generate-action-tables)"))
- [elpa] externals/parser-generator 827aa5c 433/434: Another bug for same thing, (continued)
- [elpa] externals/parser-generator 827aa5c 433/434: Another bug for same thing, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator ee78a6c 430/434: LR-parser now passes terminal data to SDT for non-terminals containing only one symbol, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 3657a68 427/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2481361 425/434: Improved readme, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator e59baa8 416/434: Added move feature of lex-analyzer into exported LR lex-analyzer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 29568c3 428/434: Added support for copyright text in exported LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4a3a51d 434/434: Added FSF copyright headers, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 24f3fb9 419/434: Lex-analyzer peek look-ahead does not affect global state, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f5a5801 421/434: Clarified lex-analyzer exporting necessities, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9a3240b 314/434: Fixed bug with error throwing on false lr item sets, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 5f13406 319/434: More work on supporting LR-grammar with precedence attributes,
ELPA Syncer <=
- [elpa] externals/parser-generator 989e79e 331/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8092c58 334/434: Added global declaration to unit test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 778b96f 335/434: More work on global precedence declaration, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0523eeb 336/434: More work on global precedence, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 0aed7b0 339/434: More work on global precedence in LR(k) parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b84ed5e 342/434: Fixed issue with infix calculator translation test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator f449039 346/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 34f95b3 351/434: More debugging infix calculator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator bb82646 356/434: More debugging, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b040d9b 357/434: Tests for infix calculator working, ELPA Syncer, 2021/11/29