D# (DogeSharp)
D# is a programming language for Doge fans.
Huge disclaimer: I have no idea what I'm doing, and definitely shouldn't write languages.
You can shout ideas at me on Twitter: @returnString
People have asked for a Dogecoin donation address, so I set this up: DAvLTZVRz9zg3wWjU5BbkjRR5ojnLJsunG
many System
much MyClass
very MyClass many int x much public
data so x;
such data so int much readonly
much Program
very Main so void much static
such rand gimme Random;
such x plz rand.Next;
wow x;
such instance gimme MyClass many 1;
wow instance.data;
Language
Constructs
many <namespace>
- using statement for namespacemuch <typename> ...
- declare a typevery <methodname> so <returntype> [many <argtype> <argname>] [much <modifier>]
- declare a methodvery <typename> [much <modifier>]
- declare a constructorsuch <variablename> <expression>;
- declare and assign a local variableplz <method> [many <arg>]
- call a methodso maths <expression> <operator> <expression>
- use mathematical operatorswow <expression>;
- print to consoleamaze <expression>;
- return a value
Usage
Compiling .ds files
Files with a ds extension are considered D# files. We use the dsc
command-line tool (D# compiler) to convert these to either a .NET executable or DLL.
dsc.exe /target:exe /out:MyProgram.exe MyProgram.ds
dsc
currently uses a translation step to generate .NET code, by converting .ds files into .cs files for the C# compiler behind the scenes. To see the generated files, use the /PreserveTranslated command-line option.
Building
Dependencies
- ANTLR v4 (Nuget)
- Java v1.6+
From source
git clone https://github.com/returnString/DogeSharp.git
Windows: Open the solution in VS and build, or use MSBuild from cmd. Unix: Use build_grammar.sh to generate the necessary ANTLR files from the grammar, then build the project inside Xamarin Studio or use xbuild from a terminal.
The build process first takes DogeSharp.csproj and outputs the dsc
tool. Then, we invoke dsc
for the sample projects as specified in build.bat/sh. This way, we can test the entire process from inside VS.