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