[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator 87435188dd 15/82: Added function to se
From: |
Christian Johansson |
Subject: |
[elpa] externals/parser-generator 87435188dd 15/82: Added function to set EOF-identifier |
Date: |
Thu, 12 May 2022 13:28:13 -0400 (EDT) |
branch: externals/parser-generator
commit 87435188dd9471cae8dbb83fa9f3c2259f1a533d
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added function to set EOF-identifier
---
parser-generator-ll.el | 17 ++++++++++++++++-
parser-generator.el | 8 ++++++++
test/parser-generator-ll-test.el | 40 ++++++++++++++++++++++++++++++++++++++++
3 files changed, 64 insertions(+), 1 deletion(-)
diff --git a/parser-generator-ll.el b/parser-generator-ll.el
index e6b24069a8..8bf2e6c7fd 100644
--- a/parser-generator-ll.el
+++ b/parser-generator-ll.el
@@ -225,7 +225,22 @@
;; Algorithm 5.3 p. 351
(defun parser-generator-ll--generate-parsing-table (tables)
"Generate a parsing table for an LL(k) grammar G and TABLES. Output M, a
valid parsing table for G."
- nil)
+ (let ((parsing-table))
+
+ ;; (2) M(a, av) = pop for all v in E where |E| = k-1
+
+ ;; (3) M($, e) = accept
+ (push
+ `(,parser-generator--eof-identifier
+ (
+ ,(parser-generator--generate-list-of-symbol
+ parser-generator--look-ahead-number
+ parser-generator--eof-identifier)
+ accept)
+ )
+ parsing-table)
+
+ parsing-table))
;; TODO
diff --git a/parser-generator.el b/parser-generator.el
index 67f35c455b..76847aca49 100644
--- a/parser-generator.el
+++ b/parser-generator.el
@@ -662,6 +662,14 @@
(error "E-identifier must be a symbol or string!"))
(setq parser-generator--e-identifier e-identifier))
+(defun parser-generator-set-eof-identifier (eof-identifier)
+ "Set EOF-IDENTIFIER."
+ (unless (or
+ (stringp eof-identifier)
+ (symbolp eof-identifier))
+ (error "EOF-identifier must be a symbol or string!"))
+ (setq parser-generator--eof-identifier eof-identifier))
+
(defun parser-generator-set-look-ahead-number (k)
"Set look-ahead number K."
(unless (parser-generator--valid-look-ahead-number-p k)
diff --git a/test/parser-generator-ll-test.el b/test/parser-generator-ll-test.el
index 9d8aeb7479..d908336717 100644
--- a/test/parser-generator-ll-test.el
+++ b/test/parser-generator-ll-test.el
@@ -51,6 +51,9 @@
"Test `parser-generator-ll--generate-parsing-table'."
(message "Started tests for (parser-generator-ll--generate-parsing-table)")
+ (parser-generator-set-eof-identifier '$)
+ (parser-generator-set-e-identifier 'e)
+ (parser-generator-set-look-ahead-number 2)
(let* ((tables
'(
(0 (((S) nil (a b) (a A a a)) ((S) nil (a a) (a A a a)) ((S) nil (b
b) (b A b a))))
@@ -62,6 +65,43 @@
(message "parser-tables: %S" parser-tables)
;; TODO Add test here
+ (should
+ (equal
+ '(
+ (T0 (
+ ((a a) reduce (a T1 a a) 1)
+ ((a b) reduce (a T1 a a) 1)
+ ((b b) reduce (b T2 b a) 2)
+ )
+ )
+ (T1 (
+ ((a a) reduce (e) 4)
+ ((b a) reduce (b) 3)
+ )
+ )
+ (T2 (
+ ((b a) reduce (e) 4)
+ ((b b) reduce (b) 3)
+ )
+ )
+ (a (
+ ((a a) pop)
+ ((a b) pop)
+ ((a $) pop)
+ )
+ )
+ (b (
+ ((b a) pop)
+ ((b b) pop)
+ ((b $) pop)
+ )
+ )
+ ($ (
+ (($ $) accept)
+ )
+ )
+ )
+ ))
)
- [elpa] externals/parser-generator 8c467b1bb1 07/82: Added another test for merge max terminal sets, (continued)
- [elpa] externals/parser-generator 8c467b1bb1 07/82: Added another test for merge max terminal sets, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1199586dad 11/82: More work on generating LL item, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 89105668e8 01/82: Started on LL(k) implementation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 878b2900f2 05/82: Improved calculation of merged max terminals when one of the set is undefined, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator d397a1d48e 12/82: Improved variable naming, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b09b22c0be 13/82: Passing test for LL(k) table Example 5.15, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 7c10be74b8 06/82: Added TODO items, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1d1e4e4bf8 03/82: More work on LL(k) parser, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 4cb0a0b941 08/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 29bad0440f 09/82: More work on LL table generation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 87435188dd 15/82: Added function to set EOF-identifier,
Christian Johansson <=
- [elpa] externals/parser-generator bab123bdda 17/82: Added reference to PHP 8.1, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator a2a629c16d 18/82: More work on data structure for LL-tables, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 542a50d9c1 20/82: Remove usage of a hash-table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 221446d647 24/82: Started implementation of LLk validation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator ab4ce4d668 25/82: Tests for validating LLk grammar passing, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 04eb4d066c 27/82: Started on test for Example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 5c0bcd5f9a 36/82: Passing test for LL-table generation example 5.17, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 1290048b84 39/82: Improved documentation, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator 57c6fdda2f 43/82: Passing test for generating LL-parser hash-table, Christian Johansson, 2022/05/12
- [elpa] externals/parser-generator b37ba1eddf 52/82: Created TODO item, Christian Johansson, 2022/05/12