phig

A tiny configuration language

Demo

phig
json

At a glance

Maps

{} with key val pairs

Lists

[] with list items

Strings

bare, "quoted", 'raw'

Comments

# to end of line

toplevel = [ BOM ] _ [ pairs ] _ EOF

value    = map | list | string

map      = '{' _ [ pairs ] _ '}'        # keys are ordered, no duplicates
pairs    = pair { PAIRSEP _ pair }
pair     = string [ HSPACE ] value [ HSPACE ] [ COMMENT ]

list     = '[' _ [ items ] _ ']'
items    = value { _ [ ';' ] _ value }

string   = QSTRING | QRSTRING | BARE
QSTRING  = '"' { QCHAR } '"'
QCHAR    = /[^"\\]/ | QESCAPE
QESCAPE  = '\' ( /[rnt\\"0]/ | /\r?\n/ | 'u{' /[0-9a-fA-F]{1,6}/ '}' )
QRSTRING = "'" /[^']*/ "'"
BARE     = /[^\p{White_Space}{}[\]"#';]+/

_        = { WS | COMMENT }
BOM      = /\u{FEFF}/
WS       = /[\r\n\t ]+/
COMMENT  = '#' /[^\n]*/
HSPACE   = /[ \t]+/
PAIRSEP  = /(\r?\n)+|;/

Libraries