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--")))
 

Reply via email to