summaryrefslogtreecommitdiff
path: root/src/piraha/pegs/interface.peg
diff options
context:
space:
mode:
Diffstat (limited to 'src/piraha/pegs/interface.peg')
-rw-r--r--src/piraha/pegs/interface.peg73
1 files changed, 73 insertions, 0 deletions
diff --git a/src/piraha/pegs/interface.peg b/src/piraha/pegs/interface.peg
new file mode 100644
index 00000000..99ba1508
--- /dev/null
+++ b/src/piraha/pegs/interface.peg
@@ -0,0 +1,73 @@
+skipper = (([ \t\n\r\b]|\#[^\n\r]*|\\[\r\n])+|\b)
+
+any = [^]
+name = (?i:[a-z_][a-z0-9_]*)
+filename = (?i:([.a-z0-9_]|\\[^])*)
+accname = {-name}(::{-name})*
+inum = [1248]
+rnum = [48]
+cnum = 8|16
+type = (void|CCTK_INT{inum}?|CCTK_REAL{rnum}?|CCTK_COMPLEX{cnum}?|CCTK|CCTK_POINTER|CCTK_TO_CONST)
+
+num = [0-9]+
+boolraw = (?i:true|t|yes|y|false|f|no|n|1|0)
+bool = {-boolraw}|"{-boolraw}"
+
+powexpr = \( {expr} \)|-{expr}|{accname}|{num}
+mulexpr = {powexpr}( \^ {powexpr})?
+mulop = [/*%]
+addexpr = {mulexpr}( {mulop} {mulexpr})*
+addop = [+-]
+expr = {addexpr}( {addop} {addexpr})*
+n = ([\ \t]|\\[\r\n])*
+
+IMPLEMENTS = (?i:implements):{-n}{name}
+INHERITS = (?i:inherits):{-n}({name}({-n},?{-n}{name})*)?
+FRIEND = (?i:friend):{-n}({name}({-n},?{-n}{name})*)?
+
+what = (?i:SOURCE|HEADER)
+INCLUDE = (?i:INCLUDE(S)? {what}?: {filename} in {filename})
+
+ret_type = (?i:void|CCTK_INT{num}?|CCTK_REAL|CCTK_COMPLEX|CCTK_POINTER_TO_CONST|CCTK_POINTER)
+arg_type = (?i:CCTK_STRING|CCTK_INT{num}?|CCTK_REAL|CCTK_COMPLEX|CCTK_POINTER_TO_CONST|CCTK_POINTER|STRING)
+intent = (?i:INOUT|OUT|IN)
+array = (?i:array)
+fpointer = ({intent} (?i:CCTK_FPOINTER)|(?i:CCTK_FPOINTER) {intent}|(?i:CCTK_FPOINTER)) {name} {args}
+arg = {arg_type} ({fpointer}|{array} {intent} {name}|{intent} {array} {name}|{intent} {name})
+args = \( ({arg}( , {arg})* )?\)
+
+FUNCTION_ALIAS = (?i:{ret_type} FUNCTION | SUBROUTINE ) {name} {args}
+FUNCTION_PTR = (?i:CCTK_FPOINTER {name} \( {arg_type} {intent} {name} (, {arg_type} {intent} {name} )*\))
+REQUIRES_FUN = (?i:REQUIRES FUNCTION {name})
+USES_FUN = (?i:USES FUNCTION {name}|USES INCLUDE {what}?: {filename}([ \t]+{filename})*)
+PROVIDES_FUN = (?i:PROVIDES FUNCTION {name} WITH {name} LANGUAGE (?i:C|FORTRAN))
+FUNCTION = ({FUNCTION_ALIAS}|{FUNCTION_PTR}|{REQUIRES_FUN}|{USES_FUN}|{PROVIDES_FUN})
+
+access = (?i:protected|public|private)
+vtype = (?i:(CHAR|BYTE|INT{inum}?|REAL{rnum}?|COMPLEX{cnum}?))
+VARS = ({name}( ,? {name} )*)( ,)?
+gtype = (?i:GF|ARRAY|SCALAR)
+dim = {-num}
+timelevels = {-num}
+size = {expr}( , {expr})*|" {expr}( , {expr})* "
+distrib = (?i:CONSTANT|DEFAULT)
+ghostsize = {-size}
+stagger = (?i:[MCP](,[MCP])*)
+tags = {-quote}
+
+GROUP_VARS = (?i:CCTK_|){vtype} {name}( \[ {expr} \])? (?i:TYPE = {gtype} | DIM = {dim} |
+ TIMELEVELS = {timelevels} | SIZE = {size} | DISTRIB = {distrib} |
+ GHOSTSIZE = {ghostsize} | STAGGER = {stagger} | TAGS = {tags})* {dquote}? (
+ \{
+ {VARS}
+ \} {dquote}?
+ )?
+
+
+FUNC_GROUP = ({FUNCTION} |{access}: |{GROUP_VARS} |{INCLUDE} |{IMPLEMENTS} |{INHERITS} |{FRIEND} )
+
+dquote = "(\\{-any}|[^"])*"
+squote = '(\\{-any}|[^'])*'
+quote = {dquote}|{squote}
+
+intr = ^(?i: {FUNC_GROUP}*)$