branch: externals/parser-generator
commit d322de725e8103a484fb8e7269a2c77cb4bca1d2
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
Added macro for setting the lexer reset function as well
---
docs/Lexical-Analysis.md | 2 +-
parser-generator-lex-analyzer.el | 15 +++++++++++++++
parser-generator-ll-export.el | 7 ++-----
parser-generator-lr-export.el | 7 ++-----
4 files changed, 20 insertions(+), 11 deletions(-)
diff --git a/docs/Lexical-Analysis.md b/docs/Lexical-Analysis.md
index f4d019cee0..9171afbe58 100644
--- a/docs/Lexical-Analysis.md
+++ b/docs/Lexical-Analysis.md
@@ -1,6 +1,6 @@
# Lexical Analysis
-Set lexical analysis function by setting variable
`parser-generator-lex-analyzer--function`. Optionally set reset function by
setting variable `parser-generator-lex-analyzer--reset-function`.
+Set lexical analysis function by using function
`(parser-generator-lex-analyzer-set-function)`. Optionally set reset function
by using function `(parser-generator-lex-analyzer-set-reset-function)`.
The lexical analysis is internally indexed on a local variable
`parser-generator-lex-analyzer--index` and has it optional state in the local
variable `parser-generation-lex-analyzer--state`. The initial values for the
index and state can be set in variables
`parser-generation-lex-analyzer--index-init` and
`parser-generator-lex-analyzer--state-init`.
diff --git a/parser-generator-lex-analyzer.el b/parser-generator-lex-analyzer.el
index f757e28844..6d49d31a18 100644
--- a/parser-generator-lex-analyzer.el
+++ b/parser-generator-lex-analyzer.el
@@ -45,6 +45,11 @@
nil
"Function used when resetting lex-analyzer.")
+(defvar
+ parser-generator-lex-analyzer--reset-function-export-source
+ ""
+ "String version of function used when resetting lex-analyzer, used in
exports.")
+
(defvar
parser-generator-lex-analyzer--index-init
1
@@ -93,6 +98,16 @@
parser-generator-lex-analyzer--function-export-source
,(format "%S" fun))))
+(defmacro parser-generator-lex-analyzer-set-reset-function (fun)
+ "Sets the lexer reset function to FUN."
+ `(progn
+ (setq
+ parser-generator-lex-analyzer--reset-function
+ ,fun)
+ (setq
+ parser-generator-lex-analyzer--reset-function-export-source
+ ,(format "%S" fun))))
+
;; Functions
diff --git a/parser-generator-ll-export.el b/parser-generator-ll-export.el
index fabdc5f275..196cbe77ac 100644
--- a/parser-generator-ll-export.el
+++ b/parser-generator-ll-export.el
@@ -181,12 +181,9 @@
(format
"(defvar\n %s-lex-analyzer--reset-function\n "
namespace))
- (if parser-generator-lex-analyzer--reset-function
+ (if (not (equal
parser-generator-lex-analyzer--reset-function-export-source ""))
(insert
- (format
- "(lambda %S %S)\n"
- (aref parser-generator-lex-analyzer--reset-function 0)
- (car (aref parser-generator-lex-analyzer--reset-function 1))))
+ parser-generator-lex-analyzer--reset-function-export-source)
(insert "nil\n"))
(insert " \"The lex-analyzer reset function.\")\n\n")
diff --git a/parser-generator-lr-export.el b/parser-generator-lr-export.el
index a44d23cd01..a48b91cd1c 100644
--- a/parser-generator-lr-export.el
+++ b/parser-generator-lr-export.el
@@ -202,12 +202,9 @@
(format
"(defvar\n %s-lex-analyzer--reset-function\n "
namespace))
- (if parser-generator-lex-analyzer--reset-function
+ (if (not (equal
parser-generator-lex-analyzer--reset-function-export-source ""))
(insert
- (format
- "(lambda %S %S)\n"
- (aref parser-generator-lex-analyzer--reset-function 0)
- (car (aref parser-generator-lex-analyzer--reset-function 1))))
+ parser-generator-lex-analyzer--reset-function-export-source)
(insert "nil\n"))
(insert " \"The lex-analyzer reset function.\")\n\n")