User Tools

Site Tools


01_user_documentation:07_rgg_xl:02_xl:01_specification

This is an old revision of the document!


XL Language specification

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

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.

XL Operators

Exhaustive list of operators available in XL. The operators are grouped by horizontal lines, operators within one group share the same precedence. The exponentiation operator ** and all assignment operators are syntactically right-associative (e. g., a ** b ** c means a ** (b ** c)), all other binary operators are left-associative. The rules for precedence and associativity follow the Java, C and Perl programming languages.

→ Read more...

01_user_documentation/07_rgg_xl/02_xl/01_specification.1748446155.txt.gz · Last modified: 2025/05/28 17:29 by sophiewachtel