branch: externals/parser-generator
commit 41f606b76181ee132bf921bd6bf67f2b5f51c3a1
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
Updated documentation with new function for setting lexer lambda and string
at the same time
---
docs/Lexical-Analysis.md | 15 ++++++---------
docs/Syntax-Analysis/LL1.md | 12 ++++--------
docs/Syntax-Analysis/LLk.md | 14 ++++++--------
docs/Syntax-Analysis/LR0.md | 27 ++-------------------------
docs/Syntax-Analysis/LRk.md | 24 ++----------------------
5 files changed, 20 insertions(+), 72 deletions(-)
diff --git a/docs/Lexical-Analysis.md b/docs/Lexical-Analysis.md
index dab8c2db54..f4d019cee0 100644
--- a/docs/Lexical-Analysis.md
+++ b/docs/Lexical-Analysis.md
@@ -6,16 +6,13 @@ The lexical analysis is internally indexed on a local
variable `parser-generator
All parsers expect a list as response from the lexical-analysis, the first
item in the list should be a list of one or more tokens. The second is "move
index"-flag, if it is non-nil it is expected to be a integer representing the
index to temporarily move the index to and perform a new lex at. The third item
is the new state after the lex. Return values 2 and 3 are optional.
-To enable exporting, the variables
`'parser-generator-lex-analyzer--function-export-string` and
`'parser-generator-lex-analyzer--get-function-export-string` need to declared
as string representations of their original source code, this is because Emacs
compilation obfuscates lambda source code at the some time in compilation.
+To enable exporting, the variables
`'parser-generator-lex-analyzer--function-export-source` and
`'parser-generator-lex-analyzer--get-function-export-source` need to declared
as string representations of their original source code, the easiest way to do
this is by using the macros `'parser-generator-lex-analyzer-set-get-function`
and `'parser-generator-lex-analyzer-set-function` respectively.
```emacs-lisp
- (setq
- parser-generator-lex-analyzer--get-function-export-string
- "(lambda (token)
- (car token))")
- (setq
- parser-generator-lex-analyzer--function-export-string
- "(lambda (index _state)
+ (parser-generator-lex-analyzer-set-get-function
+ (lambda (token) (car token)))
+ (parser-generator-lex-analyzer-set-function
+ (lambda (index _state)
(let* ((string '((\"a\" 1 . 2) (\"a\" 2 . 3) (\"b\" 3 . 4) (\"b\" 4 . 5)))
(string-length (length string))
(max-index index)
@@ -25,7 +22,7 @@ To enable exporting, the variables
`'parser-generator-lex-analyzer--function-exp
(< (1- index) max-index))
(push (nth (1- index) string) tokens)
(setq index (1+ index)))
- (list tokens)))")
+ (list tokens))))
```
## Token
diff --git a/docs/Syntax-Analysis/LL1.md b/docs/Syntax-Analysis/LL1.md
index d24d83cf3e..32decf2ede 100644
--- a/docs/Syntax-Analysis/LL1.md
+++ b/docs/Syntax-Analysis/LL1.md
@@ -134,9 +134,8 @@ Each production RHS can optionally contain a
lambda-expression that will be call
)
(parser-generator-process-grammar)
(parser-generator-ll-generate-table)
-(setq
- parser-generator-lex-analyzer--function-export-string
- "(lambda (index)
+(parser-generator-lex-analyzer-set-function
+ (lambda (index)
(let* ((string '((a 1 . 2) (b 2 . 3) (b 3 . 4) (a 4 . 5) (b 5 . 6)))
(string-length (length string))
(max-index index)
@@ -146,11 +145,8 @@ Each production RHS can optionally contain a
lambda-expression that will be call
(< (1- index) max-index))
(push (nth (1- index) string) tokens)
(setq index (1+ index)))
- (nreverse tokens)))")
-(setq
- parser-generator-lex-analyzer--get-function-export-string
- "(lambda (token)
- (car token))")
+ (nreverse tokens))))
+(parser-generator-lex-analyzer-set-get-function (lambda (token) (car token)))
(let ((export (parser-generator-ll-export-to-elisp "ba3")))
(with-temp-buffer
(insert export)
diff --git a/docs/Syntax-Analysis/LLk.md b/docs/Syntax-Analysis/LLk.md
index af1b15401f..4328ec1779 100644
--- a/docs/Syntax-Analysis/LLk.md
+++ b/docs/Syntax-Analysis/LLk.md
@@ -132,9 +132,8 @@ Each production RHS can optionally contain a
lambda-expression that will be call
)
(parser-generator-process-grammar)
(parser-generator-ll-generate-table)
-(setq
- parser-generator-lex-analyzer--function-export-string
- "(lambda (index)
+(parser-generator-lex-analyzer-set-function
+ (lambda (index)
(let* ((string '((b 1 . 2) (b 2 . 3) (a 3 . 4)))
(string-length (length string))
(max-index index)
@@ -144,11 +143,10 @@ Each production RHS can optionally contain a
lambda-expression that will be call
(< (1- index) max-index))
(push (nth (1- index) string) tokens)
(setq index (1+ index)))
- (nreverse tokens)))")
-(setq
- parser-generator-lex-analyzer--get-function-export-string
- "(lambda (token)
- (car token))")
+ (nreverse tokens))))
+(parser-generator-lex-analyzer-set-get-function
+ (lambda (token)
+ (car token)))
(let ((export (parser-generator-ll-export-to-elisp "ba")))
(with-temp-buffer
(insert export)
diff --git a/docs/Syntax-Analysis/LR0.md b/docs/Syntax-Analysis/LR0.md
index 1773e5b184..832a45b3ac 100644
--- a/docs/Syntax-Analysis/LR0.md
+++ b/docs/Syntax-Analysis/LR0.md
@@ -205,8 +205,7 @@ The export should be executed after a parser has been
generated, example:
(parser-generator-lr-generate-parser-tables)
;; Setup lex-analyzer
- (setq
- parser-generator-lex-analyzer--function
+ (parser-generator-lex-analyzer-set-function
(lambda (index)
(with-current-buffer buffer
(when (<= (+ index 1) (point-max))
@@ -214,8 +213,7 @@ The export should be executed after a parser has been
generated, example:
(end (+ index 1)))
(let ((token (buffer-substring-no-properties start end)))
`(,token ,start . ,end)))))))
- (setq
- parser-generator-lex-analyzer--get-function
+ (parser-generator-lex-analyzer-set-get-function
(lambda (token)
(with-current-buffer buffer
(let ((start (car (cdr token)))
@@ -230,27 +228,6 @@ The export should be executed after a parser has been
generated, example:
'(5 3 5 2)
(parser-generator-lr-parse)))
- ;; Setup lex-analyzer
- (setq
- parser-generator-lex-analyzer--function-export-string-export-string
- "(lambda (index)
- (with-current-buffer buffer
- (when (<= (+ index 1) (point-max))
- (let ((start index)
- (end (+ index 1)))
- (let ((token (buffer-substring-no-properties start end)))
- `(,token ,start . ,end))))))")
- (setq
- parser-generator-lex-analyzer--get-function-export-string
- "(lambda (token)
- (with-current-buffer buffer
- (let ((start (car (cdr token)))
- (end (cdr (cdr token))))
- (when (<= end (point-max))
- (buffer-substring-no-properties
- start
- end)))))")
-
;; Export parser
(let ((export (parser-generator-lr-export-to-elisp "e--")))
diff --git a/docs/Syntax-Analysis/LRk.md b/docs/Syntax-Analysis/LRk.md
index 7fb9c663a2..76c2dca484 100644
--- a/docs/Syntax-Analysis/LRk.md
+++ b/docs/Syntax-Analysis/LRk.md
@@ -251,8 +251,7 @@ The export should be executed after a parser has been
generated, example:
(parser-generator-set-look-ahead-number 1)
(parser-generator-process-grammar)
(parser-generator-lr-generate-parser-tables)
- (setq
- parser-generator-lex-analyzer--function
+ (parser-generator-lex-analyzer-set-function
(lambda (index)
(let* ((string '((a 1 . 2) (a 2 . 3) (b 3 . 4) (b 4 . 5)))
(string-length (length string))
@@ -264,8 +263,7 @@ The export should be executed after a parser has been
generated, example:
(push (nth (1- index) string) tokens)
(setq index (1+ index)))
(nreverse tokens))))
- (setq
- parser-generator-lex-analyzer--get-function
+ (parser-generator-lex-analyzer-set-get-function
(lambda (token)
(car token)))
@@ -275,24 +273,6 @@ The export should be executed after a parser has been
generated, example:
'(2 2 2 1 1)
(parser-generator-lr-parse)))
- (setq
- parser-generator-lex-analyzer--function-export-string
- "(lambda (index)
- (let* ((string '((a 1 . 2) (a 2 . 3) (b 3 . 4) (b 4 . 5)))
- (string-length (length string))
- (max-index index)
- (tokens))
- (while (and
- (< (1- index) string-length)
- (< (1- index) max-index))
- (push (nth (1- index) string) tokens)
- (setq index (1+ index)))
- (nreverse tokens)))")
- (setq
- parser-generator-lex-analyzer--get-function-export-string
- "(lambda (token)
- (car token))")
-
;; Export parser
(let ((export (parser-generator-lr-export-to-elisp "e--")))