branch: externals/parser-generator
commit 99c4092df334dbf309ee1514025eb16df8c7ed0a
Author: Christian Johansson <christ...@cvj.se>
Commit: Christian Johansson <christ...@cvj.se>

    Improved documentation and test for 
parser-generator-lex-analyzer--get-function
---
 docs/Lexical-Analysis.md                   | 48 +++++++++++++++++++++++++++++-
 test/parser-generator-lex-analyzer-test.el | 48 ++++++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 1 deletion(-)

diff --git a/docs/Lexical-Analysis.md b/docs/Lexical-Analysis.md
index e853191c6a..c29e907844 100644
--- a/docs/Lexical-Analysis.md
+++ b/docs/Lexical-Analysis.md
@@ -122,8 +122,54 @@ Returns the next token in stream and moves the lexical 
analyzer index one point
   (parser-generator-lex-analyzer--pop-token)))
 ```
 
-## Get Token
+## Get Function
 
 Specified in the variable `parser-generator-lex-analyzer--get-function` as a 
function. Returns the semantical value for the token. For instance the token 
might be a `('T_STRING 1 . 5)` but it's semantical value might be `"Emacs"`, 
another example `('T_INTEGER 1 . 2)` might be `25`, another example 
`('T_BOOLEAN 1 . 4)` might be `nil` or `t`.
 
+``` emacs-lisp
+(require 'ert)
+
+;; Example of semantical value stored in the token itself
+(setq
+ parser-generator-lex-analyzer--get-function
+ (lambda (token)
+   (car token)))
+(should
+ (equal
+  (parser-generator-lex-analyzer--get-function '("a" 1 . 2))
+  "a"))
+(should
+ (equal
+  (parser-generator-lex-analyzer--get-function '("DEF" 1 . 4))
+  "DEF"))
+(should
+ (equal
+  (parser-generator-lex-analyzer--get-function '(3 1 . 2))
+  3))
+(should
+ (equal
+  (parser-generator-lex-analyzer--get-function '(nil 1 . 2))
+  nil))
+(should
+ (equal
+  (parser-generator-lex-analyzer--get-function '(t 1 . 2))
+  t))
+(should
+ (equal
+  (parser-generator-lex-analyzer--get-function '(t 1 . 2))
+  t))
+
+;; Example of semantical value stored in a separate buffer
+(with-temp-buffer
+  (insert "Abraham Lincoln")
+  (setq
+   parser-generator-lex-analyzer--get-function
+   (lambda (token)
+     (buffer-substring-no-properties (car (cdr token)) (cdr (cdr token)))))
+  (should
+   (equal
+    (parser-generator-lex-analyzer--get-function '(T_STRING 1 . 8))
+    "Abraham")))
+```
+
 [Back to start](../../../)
diff --git a/test/parser-generator-lex-analyzer-test.el 
b/test/parser-generator-lex-analyzer-test.el
index dbcc7c1cb4..7034652b25 100644
--- a/test/parser-generator-lex-analyzer-test.el
+++ b/test/parser-generator-lex-analyzer-test.el
@@ -250,9 +250,57 @@
 
   (message "Ended tests for (parser-generator-lex-analyzer--pop-token)"))
 
+(defun parser-generator-lex-analyzer-test--get-function ()
+  "Test `parser-generator-lex-analyzer--get-function'."
+  (message "Starting tests for (parser-generator-lex-analyzer--get-function)")
+
+  (setq
+   parser-generator-lex-analyzer--get-function
+   (lambda (token)
+     (car token)))
+
+  (should
+   (equal
+    (parser-generator-lex-analyzer--get-function '("a" 1 . 2))
+    "a"))
+  (should
+   (equal
+    (parser-generator-lex-analyzer--get-function '("DEF" 1 . 4))
+    "DEF"))
+  (should
+   (equal
+    (parser-generator-lex-analyzer--get-function '(3 1 . 2))
+    3))
+  (should
+   (equal
+    (parser-generator-lex-analyzer--get-function '(nil 1 . 2))
+    nil))
+  (should
+   (equal
+    (parser-generator-lex-analyzer--get-function '(t 1 . 2))
+    t))
+  (should
+   (equal
+    (parser-generator-lex-analyzer--get-function '(t 1 . 2))
+    t))
+
+  (with-temp-buffer
+    (insert "Abraham Lincoln")
+    (setq
+     parser-generator-lex-analyzer--get-function
+     (lambda (token)
+       (buffer-substring-no-properties (car (cdr token)) (cdr (cdr token)))))
+    (should
+     (equal
+      (parser-generator-lex-analyzer--get-function '(T_STRING 1 . 8))
+      "Abraham")))
+
+  (message "Ended tests for (parser-generator-lex-analyzer--get-function)"))
+
 (defun parser-generator-lex-analyzer-test ()
   "Run test."
   ;; (setq debug-on-error t)
+  (parser-generator-lex-analyzer-test--get-function)
   (parser-generator-lex-analyzer-test--peek-next-look-ahead)
   (parser-generator-lex-analyzer-test--pop-token))
 

Reply via email to