Table of Contents

XL language

The programming language XL is our implementation of relational growth grammars. XL is built on top of the programming language Java: This combines the advantages of the rule-based paradigm with the strength of Java, including the rich set of existing Java libraries.

Rules

Rules are specified within a transformation statement. The snowflake curve can be generated by the two rules:

Axiom ==> F(1) RU(120) F(1) RU(120) F(1);
F(x)  ==> F(x/3) RU(-60) F(x/3) RU(120) F(x/3) RU(-60) F(x/3);

Behind the scenes, Axiom, F and RU correspond to Java classes of that name. The bound variable x corresponds to a field of class F.

Expressions with multiple values

XL supports expressions that have multiple values successively. E.g., the expression (* F *) returns all existing objects of class F. Operators like sum perform calculations on those expressions. To get the total length of all F‘s having a diameter greater than one, just write

sum ((* f:F, (f.diameter > 1) *).length)

Especially the graph query expressions of the form (* … *) enable you to specify local or global interactions in a concise and expressive way.

More extensions to the java syntax

- XL-lambda function

Examples

You can find many examples of the XL languages in the gallery.

Complete XL documentation

An extensive documentation on the XL language specification can be found on the grogra website.

Java

As XL is based on Java, some coding rules are the same.

For instance, functions are declared with a modifier (public, protected, private,…), a return type (int, void, …), the function name and the parameters in parenthesis.

Similarly, variables are declared with a type, which is identical to the Java types.