[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] master 8c108be 56/60: Add parsec-peek and parsec-peek-p
From: |
Junpeng Qiu |
Subject: |
[elpa] master 8c108be 56/60: Add parsec-peek and parsec-peek-p |
Date: |
Tue, 25 Oct 2016 17:45:17 +0000 (UTC) |
branch: master
commit 8c108be16dc07340d7681bebfba52649821e5d63
Author: Junpeng Qiu <address@hidden>
Commit: Junpeng Qiu <address@hidden>
Add parsec-peek and parsec-peek-p
---
parsec.el | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/parsec.el b/parsec.el
index f28e42c..6096e7b 100644
--- a/parsec.el
+++ b/parsec.el
@@ -941,6 +941,28 @@ This combinator has the same behavior as the `optional'
function of
Haskell's Parsec."
`(parsec-and ,parser nil))
+(defmacro parsec-peek (parser)
+ "Apply PARSER without consuming any input.
+When PARSER succeeds, the result of the PARSER is returned.
+Otherwise, the return value is an error. Use `parsec-error-p' on
+the return value to see whether the PARSER fails or not. Use
+`parsec-peek-p' if you want nil to be returned when PARSER fails.
+
+This is a shortcut of combining `parsec-start', `parsec-try' and
+`parsec-lookahead'. Since arbitrary parser is allowed, this
+function can be viewed as a more powerful version of `looking-at'
+in Emacs Lisp."
+ `(parsec-start
+ (parsec-try
+ (parsec-lookahead ,parser))))
+
+(defmacro parsec-peek-p (parser)
+ "Same as `parsec-peek' except a nil is returned when the PARSER fails."
+ (let ((res-sym (make-symbol "res")))
+ `(let ((,res-sym (parsec-peek ,parser)))
+ (unless (parsec-error-p ,res-sym)
+ ,res-sym))))
+
(defmacro parsec-query (parser &rest args)
"Get an alternative return value of the PARSER specified by the ARGS.
- [elpa] master 4fb2abe 29/60: Update simple-csv-parser, (continued)
- [elpa] master 4fb2abe 29/60: Update simple-csv-parser, Junpeng Qiu, 2016/10/25
- [elpa] master fa2e6f1 27/60: Add gitignore, Junpeng Qiu, 2016/10/25
- [elpa] master a06220c 42/60: Update README, Junpeng Qiu, 2016/10/25
- [elpa] master f7e8629 26/60: Add tests, Junpeng Qiu, 2016/10/25
- [elpa] master bc11325 50/60: Add file examples/.nosearch, Junpeng Qiu, 2016/10/25
- [elpa] master 1da4344 32/60: Update url-str-parser, Junpeng Qiu, 2016/10/25
- [elpa] master 89dd2ac 54/60: Fix some wording in README, Junpeng Qiu, 2016/10/25
- [elpa] master 55515ca 48/60: Add missing dependencies, Junpeng Qiu, 2016/10/25
- [elpa] master 2e9f962 59/60: Add new package parsec to externals-list, Junpeng Qiu, 2016/10/25
- [elpa] master 3827d26 36/60: Add docs for user-interface functions & combinators, Junpeng Qiu, 2016/10/25
- [elpa] master 8c108be 56/60: Add parsec-peek and parsec-peek-p,
Junpeng Qiu <=
- [elpa] master 6001a70 12/60: Refine and add more parsec API, Junpeng Qiu, 2016/10/25
- [elpa] master da878fa 18/60: Use parsec-query for other return values, Junpeng Qiu, 2016/10/25
- [elpa] master 054a753 06/60: Rename to parsec, Junpeng Qiu, 2016/10/25
- [elpa] master 2cce1e3 37/60: Rename parsec-from-just to parsec-from-maybe, Junpeng Qiu, 2016/10/25
- [elpa] master cdb8c0d 47/60: Remove unused symbols, Junpeng Qiu, 2016/10/25
- [elpa] master fdb3d99 44/60: Fix some code in simple-csv-parser.el, Junpeng Qiu, 2016/10/25
- [elpa] master 701964f 57/60: Prepare headers for GNU ELPA, Junpeng Qiu, 2016/10/25
- [elpa] master cbd3352 55/60: Add parsec-lookahead, Junpeng Qiu, 2016/10/25
- [elpa] master a951fbe 41/60: Unify tag names, Junpeng Qiu, 2016/10/25
- [elpa] master dfb3af0 60/60: Add 'packages/parsec/' from commit '8f0c266d8b9b0ee5fcf9b80c518644b2849ff3b3', Junpeng Qiu, 2016/10/25