]> git.huck.website - metaforge.git/commitdiff
parser can handle spaces in arrays
authorHuck Boles <huck@huck.website>
Thu, 4 May 2023 00:02:22 +0000 (19:02 -0500)
committerHuck Boles <huck@huck.website>
Thu, 4 May 2023 00:02:22 +0000 (19:02 -0500)
src/parser/meta.pest
src/tests/test_source.meta

index 59ae7115eeaaa7806bec41ade9e80720ea103df7..6ae0337629d244af8f32609fc20ee60b33a75886 100644 (file)
@@ -1,47 +1,43 @@
 WHITESPACE = _{ " " | "\t" | NEWLINE }
-COMMENT = _{ "-{" ~ (!"}" ~ ANY)* ~ "}" }
+COMMENT    = _{ "-{" ~ (!"}" ~ ANY)* ~ "}" }
 
 sigil = _{ ("$" | "@" | "&") ~ "{" }
 
-raw_char   = _{ !(sigil) ~ ANY }
+raw_char = _{ !(sigil) ~ ANY }
 char_seq =  { raw_char+ }
 
 string = @{ "\"" ~ char+ ~ "\"" }
-char {
-    !("\"" | "\\") ~ ANY |
-    "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t") |
-    "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
+char   =  _{
+    !("\"" | "\\") ~ ANY
+  | "\\" ~ ("\"" | "\\" | "/" | "b" | "f" | "n" | "r" | "t")
+  | "\\" ~ ("u" ~ ASCII_HEX_DIGIT{4})
 }
 
-array = {
-    "[" ~ "]" |
-    "[" ~ string ~ ("," ~ string)* ~ "]"
+array = _{
+    "[" ~ "]"
+  | "[" ~ " "* ~ string ~ (" "* ~ "," ~ " "* ~ string)* ~ " "* ~ "]"
 }
 
 key_chars = @{ (ASCII_ALPHANUMERIC | "_" | ".")* }
-key = @{ key_chars }
+key       = @{ key_chars }
 
-value = ${ string | array | "BLANK" | "DEFAULT" }
-assign = { key ~ "=" ~ value }
+value  = ${ string | array | "BLANK" | "DEFAULT" }
+assign =  { key ~ "=" ~ value }
 
-def_block = _{ sigil ~ assign* ~ "}" }
-var_def = { &("$") ~ def_block }
-arr_def = { &("@") ~ def_block }
-pat_def = { &("&") ~ def_block }
+def_block  = _{ sigil ~ assign* ~ "}" }
+var_def    =  { &("$") ~ def_block }
+arr_def    =  { &("@") ~ def_block }
+pat_def    =  { &("&") ~ def_block }
 definition = _{ var_def | arr_def | pat_def }
 
 substitution = _{ sigil ~ key ~ "}" }
-var_sub     =  { &("$") ~ substitution }
-arr_sub     =  { &("@") ~ substitution }
-pat_sub     =  { &("&") ~ substitution }
+var_sub      =  { &("$") ~ substitution }
+arr_sub      =  { &("@") ~ substitution }
+pat_sub      =  { &("&") ~ substitution }
 identifier   = _{ var_sub | pat_sub | arr_sub }
 
 source = { (identifier | char_seq)* }
 
 file = {
-    SOI
-    ~ definition*
-    ~ source?
-    ~ EOI
+    SOI ~ definition* ~ source? ~ EOI
 }
-
index 21fb37bc07f7a48d7205d2bdfb961659b74954e7..3d346be7f1f6bc69b43b3a46fa6ae75516054ed2 100644 (file)
@@ -6,8 +6,8 @@ ${
 @{
     sub.array = ["sub","value"]
     arr = ["split","up","values"]
-    blank = BLANK
-    -{ with_spaces = [ "stuff", "with" , "spaces" ] }
+    blank = BLANK -{ post line comment }
+    with_spaces = [ "stuff", "with" , "spaces" ]
 }
 
 &{