diff options
Diffstat (limited to 'tnslc')
-rw-r--r-- | tnslc/README.md | 19 | ||||
-rw-r--r-- | tnslc/src/ast/ast.tnsl | 22 | ||||
-rw-r--r-- | tnslc/src/ast/node.tnsl | 88 | ||||
-rw-r--r-- | tnslc/src/compile/arch/arch.tnsl | 25 | ||||
-rw-r--r-- | tnslc/src/compile/arch/common.tnsl | 20 | ||||
-rw-r--r-- | tnslc/src/compile/arch/isa_arm.tnsl | 18 | ||||
-rw-r--r-- | tnslc/src/compile/arch/isa_risc_v.tnsl | 18 | ||||
-rw-r--r-- | tnslc/src/compile/arch/isa_x86.tnsl | 18 | ||||
-rw-r--r-- | tnslc/src/compile/compile.tnsl | 22 | ||||
-rw-r--r-- | tnslc/src/flags/flags.tnsl | 19 | ||||
-rw-r--r-- | tnslc/src/parse/parse.tnsl | 22 | ||||
-rw-r--r-- | tnslc/src/parse/token.tnsl | 35 | ||||
-rw-r--r-- | tnslc/src/tnslc.tnsl | 48 |
13 files changed, 374 insertions, 0 deletions
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 |