diff options
-rw-r--r-- | README.md | 8 | ||||
-rw-r--r-- | libtnsl/src/alg/alg.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/alg/math/math.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/algorithm/alg.tnsl | 0 | ||||
-rw-r--r-- | libtnsl/src/algorithm/math/math.tnsl | 0 | ||||
-rw-r--r-- | libtnsl/src/bootstrap.tnsl | 31 | ||||
-rw-r--r-- | libtnsl/src/box/box.tnsl | 34 | ||||
-rw-r--r-- | libtnsl/src/box/iterator.tnsl | 40 | ||||
-rw-r--r-- | libtnsl/src/box/map.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/box/string.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/box/tree.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/box/vector.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/io/block.tnsl | 20 | ||||
-rw-r--r-- | libtnsl/src/io/io.tnsl | 33 | ||||
-rw-r--r-- | libtnsl/src/libtnsl.tnsl | 31 | ||||
-rw-r--r-- | libtnsl/src/reflect/reflect.tnsl | 27 | ||||
-rw-r--r-- | libtnsl/src/time/time.tnsl | 27 | ||||
-rw-r--r-- | spec/1 - language.md | 73 | ||||
-rw-r--r-- | spec/2 - features.md | 17 | ||||
-rw-r--r-- | spec/3 - abi.md | 17 | ||||
-rw-r--r-- | spec/4 - fip.md | 17 | ||||
-rw-r--r-- | spec/README.md | 59 | ||||
-rw-r--r-- | spec/index.md | 1 |
23 files changed, 524 insertions, 31 deletions
@@ -26,11 +26,11 @@ The standard TNSL compiler suite. Contains a universal front end for producing - arm64 - risc-v -### Build status +### Status - Specification: fail - libtnsl: fail - tnslc: fail + Specification: incomplete + libtnsl: incomplete + tnslc: incomplete ### Credits diff --git a/libtnsl/src/alg/alg.tnsl b/libtnsl/src/alg/alg.tnsl new file mode 100644 index 0000000..2033d27 --- /dev/null +++ b/libtnsl/src/alg/alg.tnsl @@ -0,0 +1,20 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/
\ No newline at end of file diff --git a/libtnsl/src/alg/math/math.tnsl b/libtnsl/src/alg/math/math.tnsl new file mode 100644 index 0000000..2033d27 --- /dev/null +++ b/libtnsl/src/alg/math/math.tnsl @@ -0,0 +1,20 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/
\ No newline at end of file diff --git a/libtnsl/src/algorithm/alg.tnsl b/libtnsl/src/algorithm/alg.tnsl deleted file mode 100644 index e69de29..0000000 --- a/libtnsl/src/algorithm/alg.tnsl +++ /dev/null diff --git a/libtnsl/src/algorithm/math/math.tnsl b/libtnsl/src/algorithm/math/math.tnsl deleted file mode 100644 index e69de29..0000000 --- a/libtnsl/src/algorithm/math/math.tnsl +++ /dev/null diff --git a/libtnsl/src/bootstrap.tnsl b/libtnsl/src/bootstrap.tnsl index 01ebf56..d3b935e 100644 --- a/libtnsl/src/bootstrap.tnsl +++ b/libtnsl/src/bootstrap.tnsl @@ -1,17 +1,22 @@ /## - Copyright 2020 Kyle Gunger - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED #/ /# diff --git a/libtnsl/src/box/box.tnsl b/libtnsl/src/box/box.tnsl index e69de29..8530a99 100644 --- a/libtnsl/src/box/box.tnsl +++ b/libtnsl/src/box/box.tnsl @@ -0,0 +1,34 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/ + +/## + module tnsl.box + Containers and data management classes + +#; export module box + /: import + "iterator.tnsl" + "map.tnsl" + "string.tnsl" + "tree.tnsl" + "vector.tnsl" + :/ +;/
\ No newline at end of file diff --git a/libtnsl/src/box/iterator.tnsl b/libtnsl/src/box/iterator.tnsl new file mode 100644 index 0000000..9fb3d6d --- /dev/null +++ b/libtnsl/src/box/iterator.tnsl @@ -0,0 +1,40 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/ + +# Interface for moving through a list +/; interface ForwardsIterator (type T) + + # Advance to the next element in the list + /; next [bool] + ;/ + + # Get the current element in the list + /; current [T] + ;/ +;/ + +# Interface for moving through a list forwards or backwards +/; interface TwoWayIterator (type T) extends ForwardsIterator(T) + + # Move to the previous element in the list + /; prev [bool] + ;/ +;/
\ No newline at end of file diff --git a/libtnsl/src/box/map.tnsl b/libtnsl/src/box/map.tnsl index e69de29..2033d27 100644 --- a/libtnsl/src/box/map.tnsl +++ b/libtnsl/src/box/map.tnsl @@ -0,0 +1,20 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/
\ No newline at end of file diff --git a/libtnsl/src/box/string.tnsl b/libtnsl/src/box/string.tnsl index e69de29..2033d27 100644 --- a/libtnsl/src/box/string.tnsl +++ b/libtnsl/src/box/string.tnsl @@ -0,0 +1,20 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/
\ No newline at end of file diff --git a/libtnsl/src/box/tree.tnsl b/libtnsl/src/box/tree.tnsl index e69de29..2033d27 100644 --- a/libtnsl/src/box/tree.tnsl +++ b/libtnsl/src/box/tree.tnsl @@ -0,0 +1,20 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/
\ No newline at end of file diff --git a/libtnsl/src/box/vector.tnsl b/libtnsl/src/box/vector.tnsl index e69de29..2033d27 100644 --- a/libtnsl/src/box/vector.tnsl +++ b/libtnsl/src/box/vector.tnsl @@ -0,0 +1,20 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/
\ No newline at end of file diff --git a/libtnsl/src/io/block.tnsl b/libtnsl/src/io/block.tnsl index e69de29..2033d27 100644 --- a/libtnsl/src/io/block.tnsl +++ b/libtnsl/src/io/block.tnsl @@ -0,0 +1,20 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/
\ No newline at end of file diff --git a/libtnsl/src/io/io.tnsl b/libtnsl/src/io/io.tnsl index e69de29..19d7b9f 100644 --- a/libtnsl/src/io/io.tnsl +++ b/libtnsl/src/io/io.tnsl @@ -0,0 +1,33 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/ + +/## + module tnsl.io + Data management for input and output via blocks and streams, memory tools such as alloc and delete + +#; export module io + /: import + "block.tnsl" + "stream.tnsl" + "file.tnsl" + "std.tnsl" + :/ +;/
\ No newline at end of file diff --git a/libtnsl/src/libtnsl.tnsl b/libtnsl/src/libtnsl.tnsl index a684317..b6e9596 100644 --- a/libtnsl/src/libtnsl.tnsl +++ b/libtnsl/src/libtnsl.tnsl @@ -1,17 +1,22 @@ /## - Copyright 2020 Kyle Gunger - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED #/ /;export module tnsl diff --git a/libtnsl/src/reflect/reflect.tnsl b/libtnsl/src/reflect/reflect.tnsl index e69de29..8037f05 100644 --- a/libtnsl/src/reflect/reflect.tnsl +++ b/libtnsl/src/reflect/reflect.tnsl @@ -0,0 +1,27 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/ + +/## + module tnsl.reflect + Type and method resolution, reflection and other required methods such as is + +#; export module reflect +;/
\ No newline at end of file diff --git a/libtnsl/src/time/time.tnsl b/libtnsl/src/time/time.tnsl index e69de29..4966131 100644 --- a/libtnsl/src/time/time.tnsl +++ b/libtnsl/src/time/time.tnsl @@ -0,0 +1,27 @@ +/## + Copyright 2021 Kyle Gunger + + Dual licenced under the CDDL 1.0 and BSD 3-Clause licences. + + This file may only be used in accordance with one of the two + licences. You should have recieved a copy of each licence with + the source code. In the event that you did not recieve a copy + of the licences, they may be found at the following URLs: + + CDDL 1.0: + https://opensource.org/licenses/CDDL-1.0 + + BSD 3-Clause: + https://opensource.org/licenses/BSD-3-Clause + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED +#/ + +/## + module tnsl.time + Functionality for conversion, parsing, printing, and measuring of time + +#; export module time +;/
\ No newline at end of file diff --git a/spec/1 - language.md b/spec/1 - language.md new file mode 100644 index 0000000..50ccf68 --- /dev/null +++ b/spec/1 - language.md @@ -0,0 +1,73 @@ +# The Language + +## Section 1 - Files + +### Folder Structure + +TNSL project structure has a root source folder with TNSL files contained within the folder and sub-folders. There is no strictly enforced system, but good practice is to place code sub-modules in sub-folders, and name the module entry point file the same name as its enclosing folder. + +The main file to compile is known as the root file, which generally resides in the root source folder. This file will contain either a main method, or the pre-processor statement `rootfile` to denote the root of a library. A main file may contain both. + +### TNSL Files + + + +## Section 2 - Blocks + +### TNSL Block Notation + +### Modules + +### Functions + +### Control Flow Blocks + +### Anonymous Blocks + +## Section 3 - Statements + +### TNSL Statement Notation + +### Variable Declaration + +### Assignment + +### Special Statements + +## Section 4 - Types + +### Built-in Types + +### The Void Type + +### Defining Types + +### Interfaces + +### Type Levels + +## Section 5 - Operators + +### Operator Presedence + +## Section 6 - `raw` and `asm` + +### The `raw` Keyword + +### The `asm` Keyword + +### Credits + + Copyright 2021 Kyle Gunger + + This file is licenced under the CDDL 1.0 (the Licence) + and may only be used in accordance with the Licence. + You should have recieved a copy of the Licence with this + software/source code. If you did not, a copy can be found + at the following URL: + + https://opensource.org/licenses/CDDL-1.0 + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED
\ No newline at end of file diff --git a/spec/2 - features.md b/spec/2 - features.md new file mode 100644 index 0000000..c5432de --- /dev/null +++ b/spec/2 - features.md @@ -0,0 +1,17 @@ +# Related Features + +### Credits + + Copyright 2021 Kyle Gunger + + This file is licenced under the CDDL 1.0 (the Licence) + and may only be used in accordance with the Licence. + You should have recieved a copy of the Licence with this + software/source code. If you did not, a copy can be found + at the following URL: + + https://opensource.org/licenses/CDDL-1.0 + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED
\ No newline at end of file diff --git a/spec/3 - abi.md b/spec/3 - abi.md new file mode 100644 index 0000000..f586464 --- /dev/null +++ b/spec/3 - abi.md @@ -0,0 +1,17 @@ +# The TNSL Calling ABI + +### Credits + + Copyright 2021 Kyle Gunger + + This file is licenced under the CDDL 1.0 (the Licence) + and may only be used in accordance with the Licence. + You should have recieved a copy of the Licence with this + software/source code. If you did not, a copy can be found + at the following URL: + + https://opensource.org/licenses/CDDL-1.0 + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED
\ No newline at end of file diff --git a/spec/4 - fip.md b/spec/4 - fip.md new file mode 100644 index 0000000..c1e9954 --- /dev/null +++ b/spec/4 - fip.md @@ -0,0 +1,17 @@ +# Features in Place + +### Credits + + Copyright 2021 Kyle Gunger + + This file is licenced under the CDDL 1.0 (the Licence) + and may only be used in accordance with the Licence. + You should have recieved a copy of the Licence with this + software/source code. If you did not, a copy can be found + at the following URL: + + https://opensource.org/licenses/CDDL-1.0 + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED
\ No newline at end of file diff --git a/spec/README.md b/spec/README.md new file mode 100644 index 0000000..6b788cc --- /dev/null +++ b/spec/README.md @@ -0,0 +1,59 @@ +Version 0.0.1 +# The TNSL Language Specification + +## Forward + +As of writing this forward, TNSL is not even a language yet. Right now, it's mostly just a stupid idea that I've devoted too much brain-space to, and I'm not confident will ever take off. The hard-core C folk probably will hate it, as well as the new-fangled rust/golangers with all their type safty. + +I'm trying not to think too hard about that. + +Right now, TNSL isn't a language. But it *could* be. And, really, I think it's a cool challenge to try to pack high-level features into a low-level environment. I hope you find it interesting as well. + +-Kyle + +## Chapter Index + +1. The Language + + - Files + - Blocks + - Statements + - Types + - Operators + - `raw` and `asm` + +2. Related features + + - Style guide + - Compiler Options + - The Pre-Processor + - Included Tools + +3. The TNSL Calling ABI + + - Differences from C + - Link tables + - Exporting C-like Functions + - Types and Arrays in Memory + +4. Features in Position + + - Bare Metal + - `libtnsl` as it relates to Types + - Cross Calling to C + +### Credits + + Copyright 2021 Kyle Gunger + + This file is licenced under the CDDL 1.0 (the Licence) + and may only be used in accordance with the Licence. + You should have recieved a copy of the Licence with this + software/source code. If you did not, a copy can be found + at the following URL: + + https://opensource.org/licenses/CDDL-1.0 + + THIS SOFTWARE/SOURCE CODE IS PROVIDED "AS IS" WITH NO + WARRENTY, GUARANTEE, OR CLAIM OF FITNESS FOR ANY PURPOSE + EXPRESS OR IMPLIED
\ No newline at end of file diff --git a/spec/index.md b/spec/index.md deleted file mode 100644 index b67bffc..0000000 --- a/spec/index.md +++ /dev/null @@ -1 +0,0 @@ -# tnsl-lang specification |