[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/parser-generator b2fd896 136/434: Added support for ind
From: |
ELPA Syncer |
Subject: |
[elpa] externals/parser-generator b2fd896 136/434: Added support for indexed tokens |
Date: |
Mon, 29 Nov 2021 15:59:26 -0500 (EST) |
branch: externals/parser-generator
commit b2fd8964074ac859e728dd8186971048df548977
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Added support for indexed tokens
---
parser-generator-lex-analyzer.el | 4 ++--
parser-generator-lr.el | 12 ++++++++++--
test/parser-generator-lex-analyzer-test.el | 14 +++++++-------
test/parser-generator-lr-test.el | 8 ++++++--
4 files changed, 25 insertions(+), 13 deletions(-)
diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index dcd0db2..b7f6274 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -48,10 +48,10 @@
(error "Missing lex-analyzer index!"))
(unless parser-generator-lex-analyzer--function
(error "Missing lex-analyzer function!"))
- (let ((token (funcall
+ (let ((token (car (funcall
parser-generator-lex-analyzer--function
parser-generator-lex-analyzer--index
- 1)))
+ 1))))
(setq parser-generator-lex-analyzer--index
(1+ parser-generator-lex-analyzer--index))
token))
diff --git a/parser-generator-lr.el b/parser-generator-lr.el
index a7c7ae0..7b79eed 100644
--- a/parser-generator-lr.el
+++ b/parser-generator-lr.el
@@ -514,7 +514,8 @@
;; (1) The lookahead string u, consisting of the next k input symbols,
is determined.
(let ((look-ahead (parser-generator-lex-analyzer--peek-next-look-ahead))
- (look-ahead-length 0))
+ (look-ahead-length 0)
+ (look-ahead-full))
(setq look-ahead-length (length look-ahead))
@@ -523,7 +524,14 @@
(push parser-generator--e-identifier look-ahead)
(setq look-ahead-length (1+ look-ahead-length)))
- (setq look-ahead (nreverse look-ahead))
+ ;; Save token stream indexes in separate variable if needed later
+ (setq look-ahead-full (nreverse look-ahead))
+
+ (setq look-ahead nil)
+ (dolist (look-ahead-item look-ahead-full)
+ (if (listp look-ahead-item)
+ (push (car look-ahead-item) look-ahead)
+ (push look-ahead-item look-ahead)))
(let ((table-index (car pushdown-list)))
(let ((action-table (gethash table-index
parser-generator-lr--action-tables)))
diff --git a/test/parser-generator-lex-analyzer-test.el
b/test/parser-generator-lex-analyzer-test.el
index f68722c..03d4a05 100644
--- a/test/parser-generator-lex-analyzer-test.el
+++ b/test/parser-generator-lex-analyzer-test.el
@@ -23,7 +23,7 @@
(setq
parser-generator-lex-analyzer--function
(lambda (index length)
- (let* ((string '(a b c d))
+ (let* ((string '(("a" 1 . 2) ("b" 2 . 3) ("c" 3 . 4) ("d" 4 . 5)))
(string-length (length string))
(max-index (+ index length))
(tokens))
@@ -42,19 +42,19 @@
(setq parser-generator--look-ahead-number 1)
(should
(equal
- '(a)
+ '(("a" 1 . 2))
(parser-generator-lex-analyzer--peek-next-look-ahead)))
(setq parser-generator--look-ahead-number 2)
(should
(equal
- '(a b)
+ '(("a" 1 . 2) ("b" 2 . 3))
(parser-generator-lex-analyzer--peek-next-look-ahead)))
(setq parser-generator--look-ahead-number 10)
(should
(equal
- '(a b c d)
+ '(("a" 1 . 2) ("b" 2 . 3) ("c" 3 . 4) ("d" 4 . 5))
(parser-generator-lex-analyzer--peek-next-look-ahead)))
(message "Ended tests for
(parser-generator-lex-analyzer--peek-next-look-ahead)"))
@@ -72,7 +72,7 @@
(setq
parser-generator-lex-analyzer--function
(lambda (index length)
- (let* ((string '(a b))
+ (let* ((string '(("a" 1 . 2) ("b" 2 . 3)))
(string-length (length string))
(max-index (+ index length))
(tokens))
@@ -88,11 +88,11 @@
(should
(equal
- '(a)
+ '("a" 1 . 2)
(parser-generator-lex-analyzer--pop-token)))
(should
(equal
- '(b)
+ '("b" 2 . 3)
(parser-generator-lex-analyzer--pop-token)))
(should
(equal
diff --git a/test/parser-generator-lr-test.el b/test/parser-generator-lr-test.el
index 222d986..df52e7f 100644
--- a/test/parser-generator-lr-test.el
+++ b/test/parser-generator-lr-test.el
@@ -225,11 +225,12 @@
(parser-generator--set-grammar '((Sp S) (a b) ((Sp S) (S (S a S b)) (S e))
Sp))
(parser-generator--set-look-ahead-number 1)
(parser-generator--process-grammar)
+ (parser-generator-lr--reset)
(setq
parser-generator-lex-analyzer--function
(lambda (index length)
- (let* ((string '(a a b b))
+ (let* ((string '((a 1 . 2) (a 2 . 3) (b 3 . 4) (b 4 . 5)))
(string-length (length string))
(max-index (+ index length))
(tokens))
@@ -248,7 +249,7 @@
(setq
parser-generator-lex-analyzer--function
(lambda (index length)
- (let* ((string '(a a b b b))
+ (let* ((string '((a 1 . 2) (a 2 . 3) (b 3 . 4) (b 4 . 5) (b 5 . 6)))
(string-length (length string))
(max-index (+ index length))
(tokens))
@@ -262,6 +263,9 @@
(should-error
(parser-generator-lr--parse))
+
+ ;; TODO Test with terminals as strings here
+
(message "Passed tests for (parser-generator-lr--parse)"))
(defun parser-generator-lr-test ()
- [elpa] externals/parser-generator d7daabf 111/434: Fixed bug with e-free-first function, (continued)
- [elpa] externals/parser-generator d7daabf 111/434: Fixed bug with e-free-first function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2be434c 114/434: Removed obsolete debug messages, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 89d128c 123/434: Added TODO item, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 044f33a 151/434: Added more support for SDT, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 96f128f 155/434: More various stuff, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator a586a0e 162/434: More work on incremental parsing, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 6d323a4 120/434: Implemented reduce action of LR-parser algorithm, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 9b44827 124/434: Optimized LR-parser with hash-tables, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 01fc56f 127/434: Updated list of grammars, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 4ef0430 133/434: White-space fix, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b2fd896 136/434: Added support for indexed tokens,
ELPA Syncer <=
- [elpa] externals/parser-generator 4746c64 137/434: Updated example for LR parse with indexed tokens, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 04a3ec5 141/434: Added separate file for syntax analysis, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 71e4eaa 145/434: Merge branch 'master' of git.cvj.se:/home/git/emacs-parser-generator, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 173fe94 152/434: Preparations for translation, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator be557ba 013/434: More work on refactor, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator fdbdff7 157/434: Added unit test for SDT in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 2d56ab0 160/434: Made separate functions for parse and translate in LR-parser, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator 7cfdea2 165/434: Passing tests for incremental lexer, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator b072fdd 175/434: Passed test for trailing e-identifier in EFF function, ELPA Syncer, 2021/11/29
- [elpa] externals/parser-generator d435e50 122/434: Passing unit test for LR-parse, ELPA Syncer, 2021/11/29