pgloader/lib/abnf/example.lisp
2013-09-09 14:43:59 +02:00

34 lines
1.1 KiB
Common Lisp

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