# TP2 PDS - VSL+

Réalisé par Thibaut ROCHAS et Tuan Minh VU

#### Program
```
Program ::= Program(Function+)
```
#### Function
```
Function ::= Function(Type, String, Var*, Instruction)
           | Prototype(Type, String, Var*)
```
#### Var
```
Var ::= Var(String)
```
#### Declaration
```
Declaration ::= Declaration(Type, String+)
```
#### Instruction
```
Instruction ::= Assign(String, Expression)
              | Return(Expression)
              | Bloc(Instruction+)
              | BlocWithDecl(Declaration+, Instruction+)
              | VoidFunctionCall(String, Expression*)
              | IfThen(Expression, Instruction)
              | IfThenElse(Expression, Instruction, Instruction)
              | While(Expression, Instruction)
              | Read(Var+)
              | Print(ExpressionOuText+)
```
#### Expression
```
ExpressionOuText ::= Expression
                    | Text(String)

Expression ::= Binop(Op, Expression, Expression)
             | Const(Int)
             | Var(String)
             | Call(String, Expression*)
             | Paren(Expression)
```
#### Autres
```
Op ::= PLUS | MINUS | TIMES | DIV | MOD
Type ::= INT | VOID             
```

## Etat

## Compatibilité

Pour construire le compilateur :
- Java JDK 21
- ANTLR3 3.5.2
- Gradle 8.5

Back-end LLVM, et scripts de tests :
- clang 17 ou +
- Python3, avec bibliothèque colorama

## Construction, exécution

Pour construire le projet, depuis la racine du projet : 

```bash
./gradlew build
```

Pour exécuter le programme Java TP2.Main, depuis la racine du projet :
```bash
java -jar build/libs/TP2.jar [args]
```

## Structure du projet

Fichiers de code source et de tests
- `src/main/java/` : fichiers sources Java à compléter
- `src/main/antlr/` : fichier sources ANTLR à compléter
- `tests/` : fichiers textes à utiliser pour les tests
- `compile` : script de compilation VSL+ vers binaire
- `runAllTests.py` : script python pour exécuter tous les tests

Moteur de production Gradle
- `settings.gradle`, `build.gradle` : configuration Gradle
- `gradle/wrapper` : exécutable de Wrapper Gradle
- `gradlew`, `gradlew.bat` : scripts (unix/windows) à exécuter depuis le terminal pour lancer le moteur de production

Environnement VSCode
- `.vscode` : configuration de VSCode
- `eclipse-formatter.xml` : formatage de code source Java, optionnel

Git
- `.gitignore` : configuration pour ignorer certains fichiers et répertoires
