File: example.lisp

package info (click to toggle)
cl-abnf 20150608-1
  • links: PTS, VCS
  • area: main
  • in suites: buster, stretch
  • size: 76 kB
  • sloc: lisp: 469; makefile: 13
file content (38 lines) | stat: -rw-r--r-- 1,340 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
;;;; abnf-example.lisp

(defpackage #:abnf-example
  (:use #:cl #:abnf #:cl-ppcre))

(in-package #:abnf-example)

(defvar *timestamp-abnf*
  "   TIMESTAMP       = NILVALUE / FULL-DATE \"T\" FULL-TIME
      FULL-DATE       = DATE-FULLYEAR \"-\" DATE-MONTH \"-\" DATE-MDAY
      DATE-FULLYEAR   = 4DIGIT
      DATE-MONTH      = 2DIGIT  ; 01-12
      DATE-MDAY       = 2DIGIT  ; 01-28, 01-29, 01-30, 01-31 based on
                                ; month/year
      FULL-TIME       = PARTIAL-TIME TIME-OFFSET
      PARTIAL-TIME    = TIME-HOUR \":\" TIME-MINUTE \":\" TIME-SECOND
                        [TIME-SECFRAC]
      TIME-HOUR       = 2DIGIT  ; 00-23
      TIME-MINUTE     = 2DIGIT  ; 00-59
      TIME-SECOND     = 2DIGIT  ; 00-59
      TIME-SECFRAC    = \".\" 1*6DIGIT
      TIME-OFFSET     = \"Z\" / TIME-NUMOFFSET
      TIME-NUMOFFSET  = (\"+\" / \"-\") TIME-HOUR \":\" TIME-MINUTE

      NILVALUE        = \"-\" "
  "A timestamp ABNF grammar.")

(let ((scanner (parse-abnf-grammar *timestamp-abnf*
				   :timestamp
				   :registering-rules '(:full-date))))
  (register-groups-bind (date)
      (scanner "2013-09-08T00:02:03.123456Z+02:00")
    date))

(let ((scanner (parse-abnf-grammar *timestamp-abnf*
				   :timestamp
				   :registering-rules '(:full-date))))
  (scan-to-strings scanner "2013-09-08T00:02:03.123456Z+02:00"))