summaryrefslogtreecommitdiff
path: root/tnslc
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 /tnslc
parentdd35976e57081987bee8278d006b2ae48e604f1d (diff)
Initial empty/bare-bones files for implementation
Diffstat (limited to 'tnslc')
-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
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