# Transpilátor Perl - JavaScript

## Součástí
1) `PPI_XML_Dump.pl` - Skript pro převod programu jazyka Perl na PDOM a následné zapsání PDOM do XML
2) `main.py` - Počáteční bod transpilátoru

## Závislosti a jejich instalace
Pro spuštění skriptu č. 1 je potřeba:
- `perl5` verze `5.32.1` nebo novější
- Knihovny dostupné z repozitáře CPAN:
  - `PPI`, `XML::LibXML` a `File::Basename`

Pro spuštění skriptu č. 2, tj. hlavní části programu, je třeba:
- Python verze `3.11.1` nebo novější
- Python modul `pipenv` a závislosti popsané v souboru `Pipfile`
  - jejich instalaci do virtuálního prostředí provedeme pomocí `pipenv update`
  - následně spuštěním `pipenv shell` aktivujeme virtuální prostředí

## Použití
Prvním krokem transpilace je získání PDOM ve formátu XML pomocí skriptu č. 1., a to následujícím způsobem:
```shell
perl ./PPI_XML_Dump.pl source_file.pl
```
Výsledkem tohoto bude nový soubor `source_file.pdom` ve stejné složce, kde se nachází soubor původní

Tento soubor je pak vstupem hlavní části programu, tj. skriptu č. 2 následujícím způsobem:
```shell
python ./main.py source_file.pdom
```
Avšak takovéto spuštění nevyůstí v žádný viditelný výstup. Dojde pouze k pokusu o sestavení AST a analýze kontextu. 
Pokud tedy nebude nalezena chyba, program skončí.

Toto chování lze modifikovat pomocí přepínačů:
- `--translate` nebo `-t` - pokusí se vstupní program přeložit
- `--save-trees` nebo `-s` - uloží textovou reprezentaci vnitřního AST (v kódování UTF-8)
- `--debug` nebo `-d` - Povolí ladící výstupy

Spuštění za účelem překladu, včetně uložení AST by tedy vypadalo následovně:
```shell
python ./main.py -t -s ./source_file.pdom
```

Výstupy budou dva soubory: `source_file.js`, přeložený soubor, a `source_file.ast`, textová reprezentace AST enkódovaná v UTF-8
