The Generic Allocator Language - Geal

Geal is a minimal programming language for arbitrary program code with the main goal to describe programs for the Generic Allocator and therefore was named after it. The name Geal comes from using the first 2 letters for every word of the Generic Allocator, but Geal's full name is the Generic Allocator Language. Geal seem to also stand for to congeal or stiffen, which is quite fitting for a constraint language: an optimizer of a constraint problem takes the problem's variables with given value ranges and restricts the value ranges until a viable solution is found.

The language basically consists of variable assignments, function calls, function call chains and method calls. Every action is a function call or a constant. A reference to a variable is the same as a function call without arguments and is implemented as such in the editor.

variableName = 'string';
integerVariable = 1;
variableResolution = integerVariable;

functionCallResult1 = noArgumentFunctionCall;
functionCallResult2 = functionCall('argument A');
functionCallResult3 = functionCall(1, 2, 3);
functionCallResult4 = functionCall(nestedFunctionCall('argument B'));

subject = functionCallChainStart('argument A')
        . functionCallChainLink('argument B')
        . functionCallChainEnd('argument C');

subject.methodCall(1);
subject.methodCall(1).methodCall(functionCall(2)).methodCall(3);

The goal of the language is to construct solution tables, that will be submitted to the optimizer, in order to find an optimal solution according to their constraints.  A full list of supported functions is listed here. 

date       = attribute(Integer, 'date'       );
roomNumber = attribute(Integer, 'room number');
shift      = attribute(Integer, 'shift'      );
student    = attribute(String , 'student'    );

demands    = table('exams', student);
demands    . importCsvData('demands.csv');

supplies   = table('time slots', date, shift, roomNumber);
supplies   . importCsvData('supplies.csv');

solution   = solution('Simplified Colloquium Plan', demands, supplies);
solution   . forAllCombinationsOf(student, date, shift)
           . then(hasSize(1));
solution   . forAllCombinationsOf(date, shift, roomNumber)
           . then(hasSize(1));