diff options
author | Kyle Gunger <kgunger12@gmail.com> | 2021-08-06 19:58:35 -0400 |
---|---|---|
committer | Kyle Gunger <kgunger12@gmail.com> | 2021-08-06 19:58:35 -0400 |
commit | 171e1986bb92c0e41f5f8e3672d5de1fc069c27c (patch) | |
tree | 3b23fbefa0009b4c6145b388798734afa7cc799f | |
parent | dd35976e57081987bee8278d006b2ae48e604f1d (diff) |
Initial empty/bare-bones files for implementation
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 |