summaryrefslogtreecommitdiff
path: root/src/piraha/pegs/configuration.peg
diff options
context:
space:
mode:
Diffstat (limited to 'src/piraha/pegs/configuration.peg')
-rw-r--r--src/piraha/pegs/configuration.peg32
1 files changed, 32 insertions, 0 deletions
diff --git a/src/piraha/pegs/configuration.peg b/src/piraha/pegs/configuration.peg
new file mode 100644
index 00000000..ade602bc
--- /dev/null
+++ b/src/piraha/pegs/configuration.peg
@@ -0,0 +1,32 @@
+# The skipper is a crucial sub-pattern
+# that is activated by any whitespace in the
+# grammar file
+skipper = \b([\ \t\n\r\b]|\#[^\n]*|\\[\r\n])*
+
+any = [^]
+keywords = \b(?i:script|lang|provides|requires|optional)\b
+name = (?!{-keywords})(?i:[a-z_][a-z0-9_\.]*\b)
+num = [+\-]?[0-9]+
+script = (?i: script( {name}|))
+lang = (?i: lang( {name}|))
+
+option = {name}
+
+provides = (?i:
+ provides {name} \{
+ ({script}?
+ {lang}
+ ( options {option}( {option})* |)|)
+ \}
+ )
+
+requires = (?i:
+ requires (thorns:|) {name}([ \t]*{name})*
+ )
+
+ifactive = (?i:_ifactive)
+optional = (?i:
+ optional{ifactive}? {name}([ \t]+{name})* \{ ( {name} )* \}
+ )
+
+config = ({provides} |{requires} |{optional} )* $