branch: externals/parser-generator
commit 99c4092df334dbf309ee1514025eb16df8c7ed0a
Author: Christian Johansson <[email protected]>
Commit: Christian Johansson <[email protected]>
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))