[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 0aed7b0 339/434: More work on global p
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator 0aed7b0 339/434: More work on global precedence in LR(k) parser |
Date: |
Mon, 29 Nov 2021 16:00:11 -0500 (EST) |
branch: externals/parser-generator
commit 0aed7b0511f55fc743c69da558302525d4419fc2
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
More work on global precedence in LR(k) parser
---
parser-generator-lr.el | 28 +++++++--------------
test/parser-generator-lr-test.el | 53 ++++++++++++++++++++++++++++++++--------
2 files changed, 52 insertions(+), 29 deletions(-)
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index d4603ea..5163b2d 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -1009,24 +1009,24 @@
(if
(listp a)
(setq
- a-precendence
+ a-precedence
(gethash
(car a)
parser-generator-lr--global-precedence-table))
(setq
- a-precendence
+ a-precedence
(gethash
a
parser-generator-lr--global-precedence-table)))
(if
(listp b)
(setq
- b-precendence
+ b-precedence
(gethash
(car b)
parser-generator-lr--global-precedence-table))
(setq
- b-precendence
+ b-precedence
(gethash
b
parser-generator-lr--global-precedence-table)))
@@ -1094,26 +1094,16 @@
(parser-generator-lr--symbol-takes-precedence-p
a
b)
- (if
- (parser-generator-lr--symbol-takes-precedence-p
- b
- a)
- (setq
- can-be-resolved
- nil)
- (setq
- can-be-resolved
- t))
- (if
+ (setq
+ can-be-resolved
+ t)
+ (when
(parser-generator-lr--symbol-takes-precedence-p
b
a)
(setq
can-be-resolved
- t)
- (setq
- can-be-resolved
- nil))))
+ t))))
can-be-resolved))
;; Algorithm 5.8, p. 386
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 4ca05a8..7b9d8dd 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -557,25 +557,58 @@
(parser-generator-process-grammar)
(should-error
(parser-generator-lr-generate-parser-tables))
- (message "Grammar caused expected error")
+ (message "Infix calculator grammar caused expected error")
;; Add precedence to resolve conflicts
(setq
- parser-generator-lr--global-precedence-attribute-left
- '%left)
- (setq
- parser-generator-lr--global-precedence-attribute-right
- '%right)
- (setq
- parser-generator-lr--global-precedence-attribute-general
- '%precedence)
- (setq
parser-generator--context-sensitive-attributes
'(%prec))
(setq
parser-generator--global-attributes
'(%left %precedence %right))
(setq
+ parser-generator-lr--global-precedence-attributes
+ '(%left %precedence %right))
+ (setq
+ parser-generator-lr--context-sensitive-precedence-attribute
+ '%prec)
+ (setq
+ parser-generator-lr--precedence-comparison-function
+ (lambda(a b)
+ (cond
+ ((and a b)
+ (let ((a-op (car a))
+ (a-value (car (cdr a)))
+ (b-op (car b))
+ (b-value (car (cdr b))))
+ (cond
+ ((>= a-value b-value)
+ (cond
+ ((eq a-op '%left)
+ t)
+ ((eq a-op '%right)
+ nil)
+ ((eq a-op '%precedence)
+ t)))
+ ((> b-value a-value)
+ (cond
+ ((eq b-op '%left)
+ nil)
+ ((eq b-op '%right)
+ t)
+ ((eq b-op '%precedence)
+ nil))))))
+ (a
+ (cond
+ ((eq (car a) '%left)
+ t)
+ ((eq (car a) '%right)
+ nil)
+ ((eq (car a) '%precedence)
+ t)))
+ (t
+ nil))))
+ (setq
parser-generator--global-declaration
'(
(%left "-" "+")
- [elpa] externals/parser-generator 29568c3 428/434: Added support for copyright text in exported LR-parser, (continued)
- [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, 2021/11/29
- [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 <=
- [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
- [elpa] externals/parser-generator 4404424 367/434: Added test for parsing context-sensitive attributes, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2ad866c 371/434: Context-sensitive attribute are now tested through specified comparison function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9d5df0e 375/434: More working on trying to get the Infix example working, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 8fb8676 376/434: More work on Infix math example, passing another test, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 32e2c15 024/434: Fixed bug with e-production, ELPA Syncer, 2021/11/29