From 83e23b6b449112f4a85d09c57e5601faa87856ca Mon Sep 17 00:00:00 2001 From: Melody Horn Date: Mon, 2 Nov 2020 12:27:17 -0700 Subject: add function declarations --- language/functions.rst | 20 ++++++++++++++++++++ language/index.rst | 1 + language/scanning.rst | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 language/functions.rst (limited to 'language') diff --git a/language/functions.rst b/language/functions.rst new file mode 100644 index 0000000..86d1144 --- /dev/null +++ b/language/functions.rst @@ -0,0 +1,20 @@ +Functions +--------- + +.. crowbar:element:: FunctionDeclaration <- FunctionSignature ';' + + A function declaration defines the return type, name, and arguments of a function without specifying its behavior. + It is generally used as part of an API boundary. + +.. crowbar:element:: FunctionDefinition <- FunctionSignature Block + + A function definition provides the actual behavior of a function, which may have been declared previously or may not. + + .. todo:: + + define function linkage/exportedness + +.. crowbar:element:: FunctionSignature <- Type identifier '(' SignatureArguments? ')' + SignatureArguments <- Type identifier (',' Type identifier)* ','? + + A function signature specifies the return type, name, and arguments of a function. diff --git a/language/index.rst b/language/index.rst index eb2d92c..66492a9 100644 --- a/language/index.rst +++ b/language/index.rst @@ -18,3 +18,4 @@ Syntax elements in this document are given in the form of `parsing expression gr source-file include type-definition + functions diff --git a/language/scanning.rst b/language/scanning.rst index c45e6b8..3ed9bfe 100644 --- a/language/scanning.rst +++ b/language/scanning.rst @@ -14,7 +14,7 @@ Scanning One of the literal words ``bool``, ``break``, ``case``, ``char``, ``const``, ``continue``, ``default``, ``do``, ``double``, ``else``, ``enum``, ``extern``, ``float``, ``for``, ``fragile``, - ``function``, ``if``, :crowbar:ref:`include `, ``int``, ``long``, ``return``, + ``function``, ``if``, :crowbar:ref:`include `, ``int``, ``long``, ``opaque``, ``return``, ``short``, ``signed``, ``sizeof``, ``struct``, ``switch``, ``union``, ``unsigned``, ``void``, or ``while``. -- cgit v1.2.3