diff --git a/grammar/src/class_members.grm b/grammar/src/class_members.grm index 127c85a2d87..30b0e2499e5 100644 --- a/grammar/src/class_members.grm +++ b/grammar/src/class_members.grm @@ -55,7 +55,11 @@ super ; method - : methodModifier* "fun" SimpleName typeParameters? functionParameters (":" type)? functionBody? + : methodModifier* "fun" functionRest + ; + +functionRest + : SimpleName typeParameters? functionParameters (":" type)? functionBody? ; functionParameters @@ -72,7 +76,10 @@ functionBody ; property - : propertyModifier* ("val" | "var") SimpleName (":" type)? ("=" expression)? + : propertyModifier* ("val" | "var") + +propertyRest + : SimpleName (":" type)? ("=" expression)? "{" getter? setter? "}" ; diff --git a/grammar/src/extension.grm b/grammar/src/extension.grm new file mode 100644 index 00000000000..fa5449b95ee --- /dev/null +++ b/grammar/src/extension.grm @@ -0,0 +1,17 @@ +extension + : completeExtension + : extensionMethod + : extensionProperty + ; + +completeExtension + : accessModifier? "extension" SimpleName? typeParameters? "for" type classBody? + ; + +extensionMethod + : accessModifier? "extension" "fun" type "." functionRest + ; + +extensionProperty + : accessModifier? "extension" propertyRest + ; diff --git a/grammar/src/toplevel.grm b/grammar/src/toplevel.grm new file mode 100644 index 00000000000..82fb18100bb --- /dev/null +++ b/grammar/src/toplevel.grm @@ -0,0 +1,14 @@ +jetlFile + : preamble toplevelObject* + ; + +preamble + : empty + ; + +toplevelObject + : class + : extension + : method + : property + ; \ No newline at end of file