mirror of
https://github.com/dimitri/pgloader.git
synced 2025-08-08 07:16:58 +02:00
34 lines
1.1 KiB
Common Lisp
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))
|