diff --git a/tooling/syntax/dex.iro b/tooling/syntax/dex.iro
new file mode 100644
index 000000000..3ad0b16f9
--- /dev/null
+++ b/tooling/syntax/dex.iro
@@ -0,0 +1,91 @@
+name = dex
+file_extensions [] = dx;
+
+styles [] {
+ .comment : style {
+ color = light_green
+ italic = true
+ textmate_scope = comment
+ pygments_scope = Comment
+ }
+ .keyword : style {
+ color = cyan
+ textmate_scope = keyword.other
+ pygments_scope = Keyword.Reserved
+ }
+ .numeric : style {
+ color = gold
+ textmate_scope = constant.numeric
+ pygments_scope = Number
+ }
+ .punctuation : style {
+ color = red
+ textmate_scope = punctuation
+ pygments_scope = Punctuation
+ }
+ .quoted_text : style {
+ color = brown
+ textmate_scope = string.quoted.double
+ pygments_scope = String
+ }
+ .escaped_text : style {
+ color = green
+ textmate_scope = constant.character.escape
+ pygments_scope = String.Escape
+ }
+ .type : style {
+ color = blue
+ textmate_scope = entity.name.type
+ pygments_scope = Keyword.Type
+ }
+ .operator : style {
+ color = orange
+ textmate_scope = keyword.operator
+ pygments_scope = Operator
+ }
+}
+
+contexts [] {
+ main : context {
+ : pattern {
+ regex \= (\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\b)
+ styles [] = .keyword;
+ }
+ : pattern {
+ regex \= (\b(\d+\.\d+|\d+))
+ styles [] = .numeric;
+ }
+ : pattern {
+ regex \= (\(|\)|\[|\]|\{|\}|;)
+ styles [] = .punctuation;
+ }
+ : inline_push {
+ regex \= (")
+ styles [] = .punctuation;
+ : pop {
+ regex \= (")
+ styles [] = .punctuation;
+ }
+ : pattern {
+ regex \= (\\(?:\\|"))
+ styles [] = .escaped_text;
+ }
+ : pattern {
+ regex \= ([^"\\]+)
+ styles [] = .quoted_text;
+ }
+ }
+ : pattern {
+ regex \= (--[^o].*)
+ styles [] = .comment;
+ }
+ : pattern {
+ regex \= (\b[A-Z][a-zA-Z0-9]*)
+ styles [] = .type;
+ }
+ : pattern {
+ regex \= (((\.)|(,)|(!)|(\$)|(\^)|(&)|(\*)|(:)|(-)|(~)|(\+)|(/)|(=)|(<)|(>)|(\|)|(\?)|(\\)|(@)))
+ styles [] = .operator;
+ }
+ }
+}
diff --git a/tooling/syntax/dex.plist b/tooling/syntax/dex.plist
new file mode 100644
index 000000000..031697b0f
--- /dev/null
+++ b/tooling/syntax/dex.plist
@@ -0,0 +1,116 @@
+
+
+
+
+
+ fileTypes
+
+ dx
+
+ name
+ dex
+ patterns
+
+
+ include
+ #main
+
+
+ scopeName
+ source.dex
+ uuid
+
+ repository
+
+ main
+
+ patterns
+
+
+ match
+ (\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\b)
+ name
+ keyword.other.dex
+
+
+ match
+ (\b(\d+\.\d+|\d+))
+ name
+ constant.numeric.dex
+
+
+ match
+ (\(|\)|\[|\]|\{|\}|;)
+ name
+ punctuation.dex
+
+
+ begin
+ (")
+ beginCaptures
+
+ 1
+
+ name
+ punctuation.dex
+
+
+ patterns
+
+
+ include
+ #main__1
+
+
+ end
+ (")
+ endCaptures
+
+ 1
+
+ name
+ punctuation.dex
+
+
+
+
+ match
+ (--[^o].*)
+ name
+ comment.dex
+
+
+ match
+ (\b[A-Z][a-zA-Z0-9]*)
+ name
+ entity.name.type.dex
+
+
+ match
+ (((\.)|(,)|(!)|(\$)|(\^)|(&)|(\*)|(:)|(-)|(~)|(\+)|(/)|(=)|(<)|(>)|(\|)|(\?)|(\\)|(@)))
+ name
+ keyword.operator.dex
+
+
+
+ main__1
+
+ patterns
+
+
+ match
+ (\\(?:\\|"))
+ name
+ constant.character.escape.dex
+
+
+ match
+ ([^\x{0022}\x{005c}]+)
+ name
+ string.quoted.double.dex
+
+
+
+
+
+
diff --git a/tooling/syntax/dex.tmLanguage.json b/tooling/syntax/dex.tmLanguage.json
new file mode 100644
index 000000000..8da7f5d98
--- /dev/null
+++ b/tooling/syntax/dex.tmLanguage.json
@@ -0,0 +1,74 @@
+{
+ "fileTypes": [
+ "dx"
+ ],
+ "name": "dex",
+ "patterns": [
+ {
+ "include": "#main"
+ }
+ ],
+ "scopeName": "source.dex",
+ "uuid": "",
+ "repository": {
+ "main": {
+ "patterns": [
+ {
+ "match": "(\\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\\b)",
+ "name": "keyword.other.dex"
+ },
+ {
+ "match": "(\\b(\\d+\\.\\d+|\\d+))",
+ "name": "constant.numeric.dex"
+ },
+ {
+ "match": "(\\(|\\)|\\[|\\]|\\{|\\}|;)",
+ "name": "punctuation.dex"
+ },
+ {
+ "begin": "(\")",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.dex"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#main__1"
+ }
+ ],
+ "end": "(\")",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.dex"
+ }
+ }
+ },
+ {
+ "match": "(--[^o].*)",
+ "name": "comment.dex"
+ },
+ {
+ "match": "(\\b[A-Z][a-zA-Z0-9]*)",
+ "name": "entity.name.type.dex"
+ },
+ {
+ "match": "(((\\.)|(,)|(!)|(\\$)|(\\^)|(&)|(\\*)|(:)|(-)|(~)|(\\+)|(\/)|(=)|(<)|(>)|(\\|)|(\\?)|(\\\\)|(@)))",
+ "name": "keyword.operator.dex"
+ }
+ ]
+ },
+ "main__1": {
+ "patterns": [
+ {
+ "match": "(\\\\(?:\\\\|\"))",
+ "name": "constant.character.escape.dex"
+ },
+ {
+ "match": "([^\\x{0022}\\x{005c}]+)",
+ "name": "string.quoted.double.dex"
+ }
+ ]
+ }
+ }
+}
diff --git a/tooling/syntax/vscode/.vscode/launch.json b/tooling/syntax/vscode/.vscode/launch.json
new file mode 100644
index 000000000..0e191b592
--- /dev/null
+++ b/tooling/syntax/vscode/.vscode/launch.json
@@ -0,0 +1,17 @@
+// A launch configuration that launches the extension inside a new window
+// Use IntelliSense to learn about possible attributes.
+// Hover to view descriptions of existing attributes.
+// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
+{
+ "version": "0.2.0",
+ "configurations": [
+ {
+ "name": "Extension",
+ "type": "extensionHost",
+ "request": "launch",
+ "args": [
+ "--extensionDevelopmentPath=${workspaceFolder}"
+ ]
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tooling/syntax/vscode/.vscodeignore b/tooling/syntax/vscode/.vscodeignore
new file mode 100644
index 000000000..f369b5e55
--- /dev/null
+++ b/tooling/syntax/vscode/.vscodeignore
@@ -0,0 +1,4 @@
+.vscode/**
+.vscode-test/**
+.gitignore
+vsc-extension-quickstart.md
diff --git a/tooling/syntax/vscode/CHANGELOG.md b/tooling/syntax/vscode/CHANGELOG.md
new file mode 100644
index 000000000..676a049a6
--- /dev/null
+++ b/tooling/syntax/vscode/CHANGELOG.md
@@ -0,0 +1,9 @@
+# Change Log
+
+All notable changes to the "dex-lang" extension will be documented in this file.
+
+Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file.
+
+## [Unreleased]
+
+- Initial release
\ No newline at end of file
diff --git a/tooling/syntax/vscode/README.md b/tooling/syntax/vscode/README.md
new file mode 100644
index 000000000..7f566841e
--- /dev/null
+++ b/tooling/syntax/vscode/README.md
@@ -0,0 +1,76 @@
+# dex-lang README
+
+This is the README for your extension "dex-lang". After writing up a brief
+description, we recommend including the following sections.
+
+## Features
+
+Describe specific features of your extension including screenshots of your
+extension in action. Image paths are relative to this README file.
+
+For example if there is an image subfolder under your extension project
+workspace:
+
+\!\[feature X\]\(images/feature-x.png\)
+
+> Tip: Many popular extensions utilize animations. This is an excellent way to
+> show off your extension! We recommend short, focused animations that are easy
+> to follow.
+
+## Requirements
+
+If you have any requirements or dependencies, add a section describing those and
+how to install and configure them.
+
+## Extension Settings
+
+Include if your extension adds any VS Code settings through the
+`contributes.configuration` extension point.
+
+For example:
+
+This extension contributes the following settings:
+
+* `myExtension.enable`: enable/disable this extension
+* `myExtension.thing`: set to `blah` to do something
+
+## Known Issues
+
+Calling out known issues can help limit users opening duplicate issues against
+your extension.
+
+## Release Notes
+
+Users appreciate release notes as you update your extension.
+
+### 1.0.0
+
+Initial release of ...
+
+### 1.0.1
+
+Fixed issue #.
+
+### 1.1.0
+
+Added features X, Y, and Z.
+
+--------------------------------------------------------------------------------
+
+## Working with Markdown
+
+**Note:** You can author your README using Visual Studio Code. Here are some
+useful editor keyboard shortcuts:
+
+* Split the editor (``Cmd+\` on macOS or``Ctrl+\` on Windows and Linux)
+* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and
+ Linux)
+* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of
+ Markdown snippets
+
+### For more information
+
+* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown)
+* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/)
+
+**Enjoy!**
diff --git a/tooling/syntax/vscode/language-configuration.json b/tooling/syntax/vscode/language-configuration.json
new file mode 100644
index 000000000..8f162a0c4
--- /dev/null
+++ b/tooling/syntax/vscode/language-configuration.json
@@ -0,0 +1,30 @@
+{
+ "comments": {
+ // symbol used for single line comment. Remove this entry if your language does not support line comments
+ "lineComment": "//",
+ // symbols used for start and end a block comment. Remove this entry if your language does not support block comments
+ "blockComment": [ "/*", "*/" ]
+ },
+ // symbols used as brackets
+ "brackets": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"]
+ ],
+ // symbols that are auto closed when typing
+ "autoClosingPairs": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"],
+ ["\"", "\""],
+ ["'", "'"]
+ ],
+ // symbols that can be used to surround a selection
+ "surroundingPairs": [
+ ["{", "}"],
+ ["[", "]"],
+ ["(", ")"],
+ ["\"", "\""],
+ ["'", "'"]
+ ]
+}
\ No newline at end of file
diff --git a/tooling/syntax/vscode/package.json b/tooling/syntax/vscode/package.json
new file mode 100644
index 000000000..84f3e2691
--- /dev/null
+++ b/tooling/syntax/vscode/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "dex-lang",
+ "displayName": "dex-lang",
+ "description": "Syntax highlighting for dex",
+ "version": "0.0.1",
+ "engines": {
+ "vscode": "^1.51.0"
+ },
+ "categories": [
+ "Programming Languages"
+ ],
+ "contributes": {
+ "languages": [{
+ "id": "dex",
+ "aliases": ["Dex", "dex"],
+ "extensions": [".dx"],
+ "configuration": "./language-configuration.json"
+ }],
+ "grammars": [{
+ "language": "dex",
+ "scopeName": "source.dex",
+ "path": "./syntaxes/dex.tmLanguage.json"
+ }]
+ }
+}
\ No newline at end of file
diff --git a/tooling/syntax/vscode/syntaxes/dex.tmLanguage.json b/tooling/syntax/vscode/syntaxes/dex.tmLanguage.json
new file mode 100644
index 000000000..21539d555
--- /dev/null
+++ b/tooling/syntax/vscode/syntaxes/dex.tmLanguage.json
@@ -0,0 +1,74 @@
+{
+ "fileTypes": [
+ "dx"
+ ],
+ "name": "dex",
+ "patterns": [
+ {
+ "include": "#main"
+ }
+ ],
+ "scopeName": "source.dex",
+ "uuid": "",
+ "repository": {
+ "main": {
+ "patterns": [
+ {
+ "match": "(\\b(def|for|rof|case|of|llam|Read|Write|Accum|data|interface|instance|where)\\b)",
+ "name": "keyword.other.dex"
+ },
+ {
+ "match": "(\\b(\\d+\\.\\d+|\\d+))",
+ "name": "constant.numeric.dex"
+ },
+ {
+ "match": "(\\(|\\)|\\[|\\]|\\{|\\}|;)",
+ "name": "punctuation.dex"
+ },
+ {
+ "begin": "(\")",
+ "beginCaptures": {
+ "1": {
+ "name": "punctuation.dex"
+ }
+ },
+ "patterns": [
+ {
+ "include": "#main__1"
+ }
+ ],
+ "end": "(\")",
+ "endCaptures": {
+ "1": {
+ "name": "punctuation.dex"
+ }
+ }
+ },
+ {
+ "match": "(--[^o].*)",
+ "name": "comment.dex"
+ },
+ {
+ "match": "(\\b[A-Z][a-zA-Z0-9]*)",
+ "name": "entity.name.type.dex"
+ },
+ {
+ "match": "(((\\.)|(,)|(!)|(\\$)|(\\^)|(&)|(\\*)|(:)|(-)|(~)|(\\+)|(\/)|(=)|(<)|(>)|(\\|)|(\\?)|(\\\\)|(@)))",
+ "name": "keyword.operator.dex"
+ }
+ ]
+ },
+ "main__1": {
+ "patterns": [
+ {
+ "match": "(\\\\(?:\\\\|\"))",
+ "name": "constant.character.escape.dex"
+ },
+ {
+ "match": "([^\\x{0022}\\x{005c}]+)",
+ "name": "string.quoted.double.dex"
+ }
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/tooling/syntax/vscode/vsc-extension-quickstart.md b/tooling/syntax/vscode/vsc-extension-quickstart.md
new file mode 100644
index 000000000..81f750f1c
--- /dev/null
+++ b/tooling/syntax/vscode/vsc-extension-quickstart.md
@@ -0,0 +1,29 @@
+# Welcome to your VS Code Extension
+
+## What's in the folder
+
+* This folder contains all of the files necessary for your extension.
+* `package.json` - this is the manifest file in which you declare your language support and define the location of the grammar file that has been copied into your extension.
+* `syntaxes/dex.tmLanguage.json` - this is the Text mate grammar file that is used for tokenization.
+* `language-configuration.json` - this is the language configuration, defining the tokens that are used for comments and brackets.
+
+## Get up and running straight away
+
+* Make sure the language configuration settings in `language-configuration.json` are accurate.
+* Press `F5` to open a new window with your extension loaded.
+* Create a new file with a file name suffix matching your language.
+* Verify that syntax highlighting works and that the language configuration settings are working.
+
+## Make changes
+
+* You can relaunch the extension from the debug toolbar after making changes to the files listed above.
+* You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes.
+
+## Add more language features
+
+* To add features such as intellisense, hovers and validators check out the VS Code extenders documentation at https://code.visualstudio.com/docs
+
+## Install your extension
+
+* To start using your extension with Visual Studio Code copy it into the `/.vscode/extensions` folder and restart Code.
+* To share your extension with the world, read on https://code.visualstudio.com/docs about publishing an extension.