Skip to content

Instantly share code, notes, and snippets.

@tadzik
Created April 18, 2015 19:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tadzik/daf412b84b48870f75da to your computer and use it in GitHub Desktop.
Save tadzik/daf412b84b48870f75da to your computer and use it in GitHub Desktop.
grammar YAML {
my $indent = -1;
token TOP {
^ <yaml> $
}
token yaml {
<map>
}
token map {
<indent>
<pair>+
<undent>
}
token pair {
<ondent> <key> <separator> <value>
}
token separator {
':' [\h+ | \h*<?before \n>]
}
token key {
<-[:]>+
}
token value {
<map> | <string>
}
token string {
\w+
}
token indent {
[
| ^
| <?before \n ' ' ** {$indent+1}>
]
{ $indent++ }
}
token ondent {
[
| ^
| \n ' ' ** {$indent}
]
}
token undent {
[
| \n* $
| <!before \n ' ' ** {$indent}>
]
{ $indent-- }
}
}
my $yaml = q[
a: b
c:
d: e
f: g
h: i
];
say YAML.parse($yaml);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment