aboutsummaryrefslogtreecommitdiff
path: root/language/source-file.rst
diff options
context:
space:
mode:
Diffstat (limited to 'language/source-file.rst')
-rw-r--r--language/source-file.rst17
1 files changed, 17 insertions, 0 deletions
diff --git a/language/source-file.rst b/language/source-file.rst
new file mode 100644
index 0000000..6522ea8
--- /dev/null
+++ b/language/source-file.rst
@@ -0,0 +1,17 @@
+Source Files
+------------
+
+.. crowbar:element:: HeaderFile <- IncludeStatement* HeaderFileElement+
+.. crowbar:element:: HeaderFileElement <- TypeDefinition / FunctionDeclaration / ConstantDefinition / UninitializedVariableDeclaration
+
+ A Crowbar header file defines an API boundary, either at the surface of a library or between pieces of a library or application.
+ :crowbar:ref:`IncludeStatement`\ s can only appear at the beginning of the header file, and header files cannot define behavior directly.
+ Conventionally, a header file has a ``.hro`` file extension.
+
+.. crowbar:element:: ImplementationFile <- IncludeStatement* ImplementationFileElement+
+.. crowbar:element:: ImplementationFileElement <- TypeDefinition / VariableDefinition / FunctionDefinition
+
+ A Crowbar implementation file defines the actual behavior of some piece of a library or application.
+ It can also define internal types, functions, and variables.
+ :crowbar:ref:`IncludeStatement`\ s can only appear at the beginning of the implementation file.
+ Conventionally, an implementation file has a ``.cro`` file extension.