summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKyle Gunger <kgunger12@gmail.com>2021-08-06 19:58:35 -0400
committerKyle Gunger <kgunger12@gmail.com>2021-08-06 19:58:35 -0400
commit171e1986bb92c0e41f5f8e3672d5de1fc069c27c (patch)
tree3b23fbefa0009b4c6145b388798734afa7cc799f
parentdd35976e57081987bee8278d006b2ae48e604f1d (diff)
Initial empty/bare-bones files for implementation
-rw-r--r--libtnsl/READEME.md50
-rw-r--r--libtnsl/src/algorithm/alg.tnsl0
-rw-r--r--libtnsl/src/algorithm/math/math.tnsl0
-rw-r--r--libtnsl/src/bootstrap.tnsl33
-rw-r--r--libtnsl/src/box/box.tnsl0
-rw-r--r--libtnsl/src/box/map.tnsl0
-rw-r--r--libtnsl/src/box/string.tnsl0
-rw-r--r--libtnsl/src/box/tree.tnsl0
-rw-r--r--libtnsl/src/box/vector.tnsl0
-rw-r--r--libtnsl/src/io/block.tnsl0
-rw-r--r--libtnsl/src/io/file.tnsl0
-rw-r--r--libtnsl/src/io/io.tnsl0
-rw-r--r--libtnsl/src/io/std.tnsl0
-rw-r--r--libtnsl/src/io/stream.tnsl0
-rw-r--r--libtnsl/src/libtnsl.tnsl19
-rw-r--r--libtnsl/src/reflect/dynamic.tnsl0
-rw-r--r--libtnsl/src/reflect/method.tnsl0
-rw-r--r--libtnsl/src/reflect/reflect.tnsl0
-rw-r--r--libtnsl/src/reflect/resolver.tnsl0
-rw-r--r--libtnsl/src/reflect/static.tnsl0
-rw-r--r--libtnsl/src/reflect/type.tnsl0
-rw-r--r--libtnsl/src/time/alg.tnsl0
-rw-r--r--libtnsl/src/time/conv.tnsl0
-rw-r--r--libtnsl/src/time/parse.tnsl0
-rw-r--r--libtnsl/src/time/time.tnsl0
-rw-r--r--tnslc/README.md19
-rw-r--r--tnslc/src/ast/ast.tnsl22
-rw-r--r--tnslc/src/ast/node.tnsl88
-rw-r--r--tnslc/src/compile/arch/arch.tnsl25
-rw-r--r--tnslc/src/compile/arch/common.tnsl20
-rw-r--r--tnslc/src/compile/arch/isa_arm.tnsl18
-rw-r--r--tnslc/src/compile/arch/isa_risc_v.tnsl18
-rw-r--r--tnslc/src/compile/arch/isa_x86.tnsl18
-rw-r--r--tnslc/src/compile/compile.tnsl22
-rw-r--r--tnslc/src/flags/flags.tnsl19
-rw-r--r--tnslc/src/parse/parse.tnsl22
-rw-r--r--tnslc/src/parse/token.tnsl35
-rw-r--r--tnslc/src/tnslc.tnsl48
38 files changed, 476 insertions, 0 deletions
diff --git a/libtnsl/READEME.md b/libtnsl/READEME.md
new file mode 100644
index 0000000..32cff9a
--- /dev/null
+++ b/libtnsl/READEME.md
@@ -0,0 +1,50 @@
+# libts
+
+The official implimentation of the TNSL Standard Library
+
+libts provides the following language features:
+* Type and method resolution
+* Basic input and output
+* Standard algorithms
+* Standard data containers
+* Basic platform identification
+* Time resolution
+
+More information on these features can be found in the specification under libts.txt
+
+---
+## Provided Sub-modules
+
+libts provides the ts base module and the following sub-modules to address each feature:
+* algorithm
+ * Algorithms. Also contains the math sub-module for basic math operations.
+* box
+ * Data containers (vector, map, etc.)
+* io
+ * Input and output
+* reflect
+ * Type reflection and method resolution
+* time
+ * Time related functions
+
+Each sub-module should have its own README to address features
+
+---
+ 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/algorithm/alg.tnsl b/libtnsl/src/algorithm/alg.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/algorithm/alg.tnsl
diff --git a/libtnsl/src/algorithm/math/math.tnsl b/libtnsl/src/algorithm/math/math.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/algorithm/math/math.tnsl
diff --git a/libtnsl/src/bootstrap.tnsl b/libtnsl/src/bootstrap.tnsl
new file mode 100644
index 0000000..01ebf56
--- /dev/null
+++ b/libtnsl/src/bootstrap.tnsl
@@ -0,0 +1,33 @@
+/##
+ 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.
+#/
+
+/#
+ This file provides a nonstandard entry point for a bootstrap implementation of TNSL.
+
+ The reference implementation of the TNSL compiler (written in GOLANG for now), does
+ not contain feature complete functionality in the form of pre-compiler directives, which the
+ full libts uses for compilation on different operating systems. This version is provided
+ so that the reference compiler can produce a functional enough libts to compile the
+ full tnslc compiler (written in TNSL).
+
+ As such, this entry point must be modified manually to use windows, mac, or linux
+ code files, and then will provide a barebones file, stream, and error handeling library
+ with nothing else to act as a bootstrap for the compiler. The bootstrap compiler should
+ be able to compile the full libts and, in turn, the full compiler.
+#/
+
+/;export module ts
+;/ \ No newline at end of file
diff --git a/libtnsl/src/box/box.tnsl b/libtnsl/src/box/box.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/box/box.tnsl
diff --git a/libtnsl/src/box/map.tnsl b/libtnsl/src/box/map.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/box/map.tnsl
diff --git a/libtnsl/src/box/string.tnsl b/libtnsl/src/box/string.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/box/string.tnsl
diff --git a/libtnsl/src/box/tree.tnsl b/libtnsl/src/box/tree.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/box/tree.tnsl
diff --git a/libtnsl/src/box/vector.tnsl b/libtnsl/src/box/vector.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/box/vector.tnsl
diff --git a/libtnsl/src/io/block.tnsl b/libtnsl/src/io/block.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/io/block.tnsl
diff --git a/libtnsl/src/io/file.tnsl b/libtnsl/src/io/file.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/io/file.tnsl
diff --git a/libtnsl/src/io/io.tnsl b/libtnsl/src/io/io.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/io/io.tnsl
diff --git a/libtnsl/src/io/std.tnsl b/libtnsl/src/io/std.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/io/std.tnsl
diff --git a/libtnsl/src/io/stream.tnsl b/libtnsl/src/io/stream.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/io/stream.tnsl
diff --git a/libtnsl/src/libtnsl.tnsl b/libtnsl/src/libtnsl.tnsl
new file mode 100644
index 0000000..a684317
--- /dev/null
+++ b/libtnsl/src/libtnsl.tnsl
@@ -0,0 +1,19 @@
+/##
+ 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.
+#/
+
+/;export module tnsl
+
+;/
diff --git a/libtnsl/src/reflect/dynamic.tnsl b/libtnsl/src/reflect/dynamic.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/reflect/dynamic.tnsl
diff --git a/libtnsl/src/reflect/method.tnsl b/libtnsl/src/reflect/method.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/reflect/method.tnsl
diff --git a/libtnsl/src/reflect/reflect.tnsl b/libtnsl/src/reflect/reflect.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/reflect/reflect.tnsl
diff --git a/libtnsl/src/reflect/resolver.tnsl b/libtnsl/src/reflect/resolver.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/reflect/resolver.tnsl
diff --git a/libtnsl/src/reflect/static.tnsl b/libtnsl/src/reflect/static.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/reflect/static.tnsl
diff --git a/libtnsl/src/reflect/type.tnsl b/libtnsl/src/reflect/type.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/reflect/type.tnsl
diff --git a/libtnsl/src/time/alg.tnsl b/libtnsl/src/time/alg.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/time/alg.tnsl
diff --git a/libtnsl/src/time/conv.tnsl b/libtnsl/src/time/conv.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/time/conv.tnsl
diff --git a/libtnsl/src/time/parse.tnsl b/libtnsl/src/time/parse.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/time/parse.tnsl
diff --git a/libtnsl/src/time/time.tnsl b/libtnsl/src/time/time.tnsl
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/libtnsl/src/time/time.tnsl
diff --git a/tnslc/README.md b/tnslc/README.md
index e69de29..81cb844 100644
--- a/tnslc/README.md
+++ b/tnslc/README.md
@@ -0,0 +1,19 @@
+# tnslc
+
+The reference compiler for the TNSL programming language. The compiler is written in TNSL.
+
+### 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
diff --git a/tnslc/src/ast/ast.tnsl b/tnslc/src/ast/ast.tnsl
new file mode 100644
index 0000000..e086f0b
--- /dev/null
+++ b/tnslc/src/ast/ast.tnsl
@@ -0,0 +1,22 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+/; export module ast
+ :import "node.tnsl"
+;/ \ No newline at end of file
diff --git a/tnslc/src/ast/node.tnsl b/tnslc/src/ast/node.tnsl
new file mode 100644
index 0000000..26d192c
--- /dev/null
+++ b/tnslc/src/ast/node.tnsl
@@ -0,0 +1,88 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+# AST node (non-block)
+;struct Node {
+ tnslc.parse.Token
+ # associated token to the node
+ data,
+
+ ~{}Node
+ # sub-nodes
+ sub
+}
+
+# AST node (block)
+;struct BlockNode extends Node {
+ super,
+
+ ~{}Node
+ # block inputs and outputs
+ blockIn,
+ blockOut,
+
+ ~{}tnslc.parse.Token
+ # block qualifiers
+ blockQs
+}
+
+# Node methods
+/; method Node
+
+ /; operator delete
+ ;delete this.data, this.sub
+ ;/
+
+ /; push_sub (Node node) [uint]
+ ;uint len = this.sub.length
+ ;alloc this.sub, len + 1
+ ;this.sub{len} = node
+ ;return len + 1
+ ;/
+;/
+
+# Extended block node methods
+/; method BlockNode
+
+ /; operator delete
+ ;super()
+ ;delete this.blockQs, this.blockIn, this.blockOut
+ ;/
+
+ /; push_blockQ (tnslc.parse.Token token) [uint]
+ ;uint len = this.blockQs.length
+ ;alloc this.blockQs, len + 1
+ ;this.blockQs{len} = token
+ ;return len + 1
+ ;/
+
+ /; push_blockIn (Node node) [uint]
+ ;uint len = this.blockIn.length
+ ;alloc this.blockIn, len + 1
+ ;this.blockIn{len} = node
+ ;return len + 1
+ ;/
+
+ /; push_blockOut (Node node) [uint]
+ ;uint len = this.blockOut.length
+ ;alloc this.blockOut, len + 1
+ ;this.blockOut{len} = node
+ ;return len + 1
+ ;/
+;/ \ No newline at end of file
diff --git a/tnslc/src/compile/arch/arch.tnsl b/tnslc/src/compile/arch/arch.tnsl
new file mode 100644
index 0000000..00403be
--- /dev/null
+++ b/tnslc/src/compile/arch/arch.tnsl
@@ -0,0 +1,25 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+/; export module arch
+ :import "common.tnsl"
+ :import "isa_arm.tnsl"
+ :import "isa_risc_v.tnsl"
+ :import "isa_x86.tnsl"
+;/ \ No newline at end of file
diff --git a/tnslc/src/compile/arch/common.tnsl b/tnslc/src/compile/arch/common.tnsl
new file mode 100644
index 0000000..24f1964
--- /dev/null
+++ b/tnslc/src/compile/arch/common.tnsl
@@ -0,0 +1,20 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+; struct instruction {} \ No newline at end of file
diff --git a/tnslc/src/compile/arch/isa_arm.tnsl b/tnslc/src/compile/arch/isa_arm.tnsl
new file mode 100644
index 0000000..65ea8eb
--- /dev/null
+++ b/tnslc/src/compile/arch/isa_arm.tnsl
@@ -0,0 +1,18 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
diff --git a/tnslc/src/compile/arch/isa_risc_v.tnsl b/tnslc/src/compile/arch/isa_risc_v.tnsl
new file mode 100644
index 0000000..65ea8eb
--- /dev/null
+++ b/tnslc/src/compile/arch/isa_risc_v.tnsl
@@ -0,0 +1,18 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
diff --git a/tnslc/src/compile/arch/isa_x86.tnsl b/tnslc/src/compile/arch/isa_x86.tnsl
new file mode 100644
index 0000000..65ea8eb
--- /dev/null
+++ b/tnslc/src/compile/arch/isa_x86.tnsl
@@ -0,0 +1,18 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
diff --git a/tnslc/src/compile/compile.tnsl b/tnslc/src/compile/compile.tnsl
new file mode 100644
index 0000000..0071cca
--- /dev/null
+++ b/tnslc/src/compile/compile.tnsl
@@ -0,0 +1,22 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+/; export module compile
+ :include "arch"
+;/
diff --git a/tnslc/src/flags/flags.tnsl b/tnslc/src/flags/flags.tnsl
new file mode 100644
index 0000000..742165b
--- /dev/null
+++ b/tnslc/src/flags/flags.tnsl
@@ -0,0 +1,19 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
diff --git a/tnslc/src/parse/parse.tnsl b/tnslc/src/parse/parse.tnsl
new file mode 100644
index 0000000..1c81394
--- /dev/null
+++ b/tnslc/src/parse/parse.tnsl
@@ -0,0 +1,22 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+/; export module parse
+ :import 'token.tnsl'
+;/ \ No newline at end of file
diff --git a/tnslc/src/parse/token.tnsl b/tnslc/src/parse/token.tnsl
new file mode 100644
index 0000000..816177a
--- /dev/null
+++ b/tnslc/src/parse/token.tnsl
@@ -0,0 +1,35 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+;struct Token {
+ uint
+ type,
+ line,
+ char,
+
+ ~{}char
+ data
+}
+
+/; method Token
+
+ /; operator delete
+ ;delete this.data
+ ;/
+;/ \ No newline at end of file
diff --git a/tnslc/src/tnslc.tnsl b/tnslc/src/tnslc.tnsl
new file mode 100644
index 0000000..9f3d53a
--- /dev/null
+++ b/tnslc/src/tnslc.tnsl
@@ -0,0 +1,48 @@
+/##
+ Copyright 2020-2021 Kyle Gunger
+
+ Licensed under the COMMON DEVELOPMENT AND DISTRIBUTION LICENSE
+ (CDDL) Version 1.0 (the "License"). You may not use this file
+ except in compliance with the License. You may obtain a copy of
+ the License at
+
+ https://opensource.org/licenses/CDDL-1.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.
+#/
+
+/; export module tnslc
+ :import "flags"
+ :import "parse"
+ :import "ast"
+ :import "compile"
+;/
+
+:using 'tnsl'
+:using 'tnslc'
+
+/; main (~{}{}char args) [int]
+ ;var arg_list = flags.parse(args)
+
+ ;var token_list = parse.tokenize(arg_list)
+
+ ;var ast = ast.generate(token_list)
+
+ /; try
+ ;var out_file = file.open(arg_list.output_file_path)
+ ;var data = compile.generate(arg_list, ast)
+
+ ;out_file.write(data)
+ ;out_file.close()
+
+ ;; catch (error e)
+ ;io.stdout.write(e.msg)
+ ;return e.code
+ ;/
+;/ \ No newline at end of file