diff options
Diffstat (limited to 'src/piraha/pegs/interface.peg')
-rw-r--r-- | src/piraha/pegs/interface.peg | 73 |
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}*)$ |