-
Notifications
You must be signed in to change notification settings - Fork 0
/
yaml.pest
32 lines (29 loc) 路 1.03 KB
/
yaml.pest
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
WHITESPACE = _{ " " | "\t" | "\r" | "\n" }
pair = _{ string_key ~ ":" ~ value }
pair_nested = { (pair)* }
value = _{ array | array_multiline | string | string_multiline_folded_style | string_multiline_literal_style | number | boolean | null | pair_nested }
array = {
"[" ~ "]" |
"[" ~ value ~ ("," ~ value)* ~ "]"
}
array_multiline = { ("-" ~ (!("-" | pair) ~ string_key))+ }
string_multiline_folded_style = { (">" ~ (!(">" | pair) ~ ASCII_ALPHANUMERIC)*) }
string_multiline_literal_style = { ("|" ~ (!("|" | pair) ~ ASCII_ALPHANUMERIC)*) }
boolean = { "true" | "false" }
char_key = { ASCII_ALPHANUMERIC | "." | "_" | "/" | "-" }
string_key = @{ char_key+ }
null = { "null" }
string = ${ "\"" ~ inner ~ "\"" }
inner = @{ char* }
char = {
!("\"" | "\\") ~ ANY
| "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t")
| "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
}
number = @{
"-"?
~ ("0" | ASCII_NONZERO_DIGIT ~ ASCII_DIGIT*)
~ ("." ~ ASCII_DIGIT*)?
~ (^"e" ~ ("+" | "-")? ~ ASCII_DIGIT+)?
}
mapping = { SOI ~ pair* ~ EOI }