Paste number 63847: Nonregular Expressions

Index of paste annotations: 1

Paste number 63847: Nonregular Expressions
Pasted by: bobbysmith007
When:1 year, 6 months ago
Share:Tweet this! | http://paste.lisp.org/+1D9J
Channel:None
Paste contents:
Raw Source | XML | Display As
(in-package :cl-ppcre)

(defvar *open-parens* 0)
(defvar *close-parens* 0)

(defparameter *tree*
      `(:SEQUENCE "function" (:GREEDY-REPETITION 0 NIL :WHITESPACE-CHAR-CLASS) #\(
		  (:GREEDY-REPETITION
		   0 NIL
		   (:filter ,#'(lambda (pos)
				 (let ((char (char *string* pos)))
				  (cond 
				    ((char= char #\( ) (incf *open-parens*) (+ 1 pos))
				    ((char= char #\) )
				     (incf *close-parens*)
				     (if (<= *close-parens* *open-parens*)
					 (+ 1 pos)
					 (progn
					   (setf *open-parens* 0 *close-parens* 0)
					   nil)))
				    (T (+ 1 pos))))))
		   ) #\)))

(cl-ppcre:scan-to-strings *tree* "some times I like to \"function (calling all coppers (), another param (), test)\" just to see what happens")
> "function (calling all coppers (), another param (), test)"

Annotations for this paste:

Annotation number 1: Getting CL-PPCRE to return a parse-tree
Pasted by: bobbysmith007
When:1 year, 6 months ago
Share:Tweet this! | http://paste.lisp.org/+1D9J/1
Paste contents:
Raw Source | Display As
(cl-ppcre::parse-string #?/function\s*\(.*\)/ )

;;above I have replaced the :everything node with a :filter node

Colorize as:
Show Line Numbers
Index of paste annotations: 1

Lisppaste pastes can be made by anyone at any time. Imagine a fearsomely comprehensive disclaimer of liability. Now fear, comprehensively.