Skip to content
Extensible Modular Scripting Programming Language -- #SobaScript
C# Batchfile
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.
E-MSBuild @ ba5a946
SobaScript.sln Added E-MSBuild Sep 14, 2019


Interpreted Embedded Domain Specific a Weakly Typed an Extensible at runtime Modular Scripting Programming Language -- #SobaScript.

Build status release-src License NuGet package Tests

Build history


Licensed under the MIT License

Copyright (c) 2014-2019  Denis Kuzmin < > GitHub/3F

[ ☕ Donate ]

SobaScript contributors:


    #SobaScript in action
#[var v = 1.2.3]
#[$(log = "$(TMP)/v.txt")]

#[($(Configuration) ~= Deb || true)
    #[var tBase     = $([System.DateTime]::Parse('2019/08/01').ToBinary())]
    #[var tNow      = $([System.DateTime]::UtcNow.Ticks)]
    #[var revBuild  = #[$(
    #[var v = $(v).$([MSBuild]::Modulo($(revBuild), $([System.Math]::Pow(2, 14))))]

#[var v = $([System.String]::Format("v{0}\r\n\t", $(v)))]

    #[File write("#[var log]"):> Example #[var v] Generated by a vsSBE]
    #[IO scall("notepad", "#[var log]")]
catch(err, msg)
    $(err) - Type of Exception
    $(msg) - Error Message

Can be closely integrated with E-MSBuild:


Or even be loyal to your any preferences on the fly 🔧.

Syntax and features

evaluation region (container) escaping
#[ … ] ##[ … ]


Although SobaScript is a weakly typed, internally it operates with the following types by default* (means you can still extend something through new component):

type description
integer Signed 32-bit integer
string Both types: From "double quotes" & From 'single quotes'.
float Signed floating-point number with single-precision. The f postfix for clarify: 1.25f, -1.25f
double Signed floating-point number with double-precision. The optional d postfix for clarify: 1.25d or simply 1.25, -1.25
mixed Unspecified mixed data
expression An composite definition like a conditional expression ~ `(((1 < 2) && true)

Object type

The object type is a type for work with complex mixed data.

Value can be from all available scalar types + complex, like this:

{"str", true}
{"str", {1, 'y', {-12.457f}}, true}

Boolean type

Allowed forms:

true false
1 0
True False
true false

In (Input) type

This is unspecified or mixed type of data. To consider data 'as is'. As for string arguments may contain other inner containers that will be evaluated before.

It's safe only for pair symbols of container. For unpaired you need either place your data inside string argument or use special marker <#data> … </#data>

Custom extending via IPM analyzer

IPM pm = new PM(raw)

Where raw it's your raw data 'as is'. After, you can work with parsed data via pm instance.

For example, how about this:

#[Func hash.SHA1("test")]

here's complete minimal logic:

IPM pm = new PM(data); // pointed to - ILevel lvlHash
// hash.SHA1("data")
if(pm.FinalEmptyIs(LevelType.Method, "SHA1"))
    lvlHash.Is("hash.SHA1(string data)", ArgumentType.StringDouble);
    return ((string)lvlHash.Args[0].data).SHA1Hash();

That's all. Now you can calculate hash value from user scripts with allowed syntax above.

It can be a more flexible, just use other available way: SNode.IPM

third-party projects

SobaScript -

Uses the following third-party projects:


#SobaScript 『 蕎麦, enjoy your meal 』

`, aka SBE-Scripts aka vssbe scripts

You can’t perform that action at this time.