Skip to content

Workflow

pja35 edited this page Nov 14, 2017 · 1 revision

Here is how to work together to grow GOOL.

How to work with Git

The workings of Git are explained here. Basically, make sure you have set-up Git appropriately first, cf. Installation and here. Then, fork the project into your group's repository, where you and your group will modify it. The way you and your group will work is by:

  • changing you local copy
  • committing the changes locally
  • pushing the changes to the group's repository
  • pulling someone else's changes from the group's repository

Once you reach an improved version, make a Pull request to the mother repository so that your improvements get integrated. Collaboration is helped by the social features of Git.

How to extend the recognition of an input language

The package gool.recognizer.XXX1 defines a visitor, which travels the XXX input (abstract), and produces its GOOL representation (abstract).

The package gool.recognizer.XXX.ast1 tells the user which are the primitives of the XXX input language that are recognized by the GOOL System. They must be kept up-to-date.

For the java input language, the primitives are defined directly in the gool.ast package as they are used also as GOOL primitives.

How to extend the code generation of an output language

The package gool.generator.YYY2 defines a visitor, which travels the GOOL representation (abstract), and produces the YYY output (concrete).

How to add an input language

In order to add an XXX1 input language, you need a parser that does the translation between the concrete input language into abstract GOOL language. The parser has to be located in the gool.parser.XXX package.

Then you need to define a visitor, which travels through the XXX syntactic tree, and generates the corresponding GOOL primitives. Such a visitor has to be in the gool.recognizer.XXX package.

Finally you need to define the XXX input directory in the gool.properties file.

How to add an output language

In order to add a YYY2 output language, you need to define a visitor. The visitor will travel the GOOL primitives, and produce the YYY output ones. It has to be defined in the gool.generator.YYY package.

You also need to define the YYYCompiler for executing the YYY2 output concrete code. It is located in the gool.executor.YYY package.

Finally you need to define a YYY2 output directory and some YYY execution commands in the gool.properties file.

How to extend the GOOL intermediate language

The GOOL intermediate language is the bridge between the input languages and the output ones. If you want to enhanced the GOOL translation capabilities, you have to extend the GOOL abstract language primitives. Those primitives are all defined in the gool.ast package.

1: We use XXX to denote an input language (cpp or java)

2: We use YYY to denote an output language (cpp, java, csharp or python))

Clone this wiki locally