summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-07-27 23:25:38 +0000
committersbrandt <sbrandt@17b73243-c579-4c4c-a9d2-2d5706c11dac>2013-07-27 23:25:38 +0000
commit6d2556e527db748b6b6bee3298ea97f83326c1c2 (patch)
treed20335663589034c61ed5526071b3ab4ab76bfcf
parent9402a9d7ef0240dd3357ef334cfe94c0452846c6 (diff)
Added parfile peg
git-svn-id: http://svn.cactuscode.org/flesh/trunk@5036 17b73243-c579-4c4c-a9d2-2d5706c11dac
-rw-r--r--src/piraha/pegs/par.peg41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/piraha/pegs/par.peg b/src/piraha/pegs/par.peg
new file mode 100644
index 00000000..b6fe0af4
--- /dev/null
+++ b/src/piraha/pegs/par.peg
@@ -0,0 +1,41 @@
+skipper = ([ \t\r\n]|\#.*)*
+# comment
+skipeol = ([ \t\r]|\#.*)*($|\n)
+any = [^]
+stringcomment = #.*
+stringparser = ^({stringcomment}|{var}|{name}|{any})*$
+# Note that / occurs in some par files. It is my
+# feeling that this should require quote marks.
+name = [a-zA-Z][a-zA-Z0-9_]*
+dname = [0-9][a-zA-Z_]{2,}
+inquot = ({var}|\\.|[^\\"])*
+fname = \.?/[-\./0-9a-zA-Z_]+
+quot = "{inquot}"|{fname}
+num = ([0-9]+(\.[0-9]*|)|\.[0-9]+)([ed][+-]?[0-9]+|)
+env = ENV\{{name}\}
+var = \$({env}|{name}|\{{name}\})
+powexpr = {value}( \*\* {value})?
+mulop = [*/%]
+mexpr = {powexpr}( {mulop} {powexpr})*
+addop = [+-]
+aexpr = {mexpr}( {addop} {mexpr})*
+compop = [<>]=?
+compexpr = {aexpr}( {compop} {aexpr})?
+eqop = [!=]=
+eqexpr = {compexpr}( {eqop} {eqexpr})?
+andexpr = {eqexpr}( && {eqexpr})?
+expr = {andexpr}( \|\| {andexpr})?
+eval = {expr}
+paren = \( {expr} \)
+par = {name} :: {name}( {parindex})?
+func = {name} \( {expr} \)
+array = \[ {expr}( , {expr})* \]
+value = {unop}?({par}|{func}|{paren}|{dname}|{num}|{quot}|{name}|{var})
+unop = [-!]
+int = [0-9]+
+index = \[ {int} \]
+parindex = \[ {expr} \]
+active = (?i:ActiveThorns)
+set = ({active} = ({quot}|{name})|{par}( {index}|) = ({array}|\+?{expr})){-skipeol}
+desc = !DESC {quot}
+file = ^( ({desc}|{set}|{active}) )*$