In Grew, rewriting rules are described in a GRS file (GRS stands for Graph Rewriting System).

A GRS file describes a set of modules, each module contains a set of rules.

⚠️ Files using this format are expected to used the .grs file extension.

A Grew Graph Rewriting System (GRS) is defined by:

Domain definition

The domain is defined as a pair of a feature domain and an edge label domain.

Feature domain

In graphs and in rules, nodes contain feature structures. To control these feature structures, a feature domain may be given first. In the feature domain declaration, feature names are identifiers and are defined as:

In closed feature definition, feature values can be any strings; double quotes are required for string that are not lexical identifier (like values for pers).

features {
  cat: n, np, v, adj;
  mood: inf, ind, subj, pastp, presp;
  lemma: *;
  phon: *;
  pers: "1","2","3";
  position: #;

REM: values of pers feature are numerals but the only way to restrict to the finite domain {1, 2, 3} is to declare it as a closed feature and possible values as strings.

edge label domain

An explicit set of valid labels for edges may be given after the labels keyword.

By default, edges are drawn with a black solid line and above the figure in DEP representation.

To modify the color or the position of the edges, the user can add attributes to a label with suffixes:

@bottom to put the label above @red, @blue, … to modify the color of the link and the label @dot or @dash to modify the style of the link

Several suffixes can be used simultaneously.

labels { OBJ, SUJ, DE_OBJ, ANT, ANT_REL@red, ANT_REP@blue@bottom@dash }


In Grew, rules are grouped in modules. A module is defined by a name and a set of rules.

Example of module:

module name {
  rule r_1 {

  rule r_2 {


A module can be declared as deterministic:

module deterministic mod_name { ... }

If a module is declared deterministic, then only one normal form is computed. If a non-confluent module is declared deterministic, some normal forms may be lost!


In the sequences part of a GRS file, each sequence is described by a name and a list of modules. The same module can be used in several sequences but it can also be used several times in the same sequence (mainly useful when total ordering of module is not possible).

examples of GRS

A minimal GRS file (without any module) looks like:

features {
  cat: v, np;
  phon: *;
  lemma: *;

labels { suj, obj }

sequences { dummy {} }

A bigger grs file:

features { ... }

labels { OBJ, SUBJ, DE_OBJ, ANT }

module det {

  rule det_1 {

  rule det_2 {


module ana {

sequences {
  full {det; normsyn; arg; ana}  
  dn {det; normsyn}

Split a GRS description into several files

It is possible to describe a GRS through several text files.

External domain

The two declarations of features domain and of labels domain can be putted in a separate file and include in the main GRS with the keyword domain

External module definition

It is also possible to put a list of modules in a external file modules_1_and_2.grs:

module M1 { ... }

module M2 { ... }

and to include them in a GRS file with the syntax below:

include "modules_1_and_2.grs";

The recursive use of the include directive is available.