Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/seboran/transpilation-ts
Manipulation d'arbres syntaxiques
https://github.com/seboran/transpilation-ts
ast typescript visitor-pattern
Last synced: about 1 month ago
JSON representation
Manipulation d'arbres syntaxiques
- Host: GitHub
- URL: https://github.com/seboran/transpilation-ts
- Owner: Seboran
- Created: 2023-04-07T09:29:04.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-10-24T08:14:07.000Z (3 months ago)
- Last Synced: 2024-10-24T22:05:19.898Z (3 months ago)
- Topics: ast, typescript, visitor-pattern
- Language: TypeScript
- Homepage:
- Size: 602 KB
- Stars: 3
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Transpilation
## Déplacement
Le projet a été déplacé ici :
## Description
Ce projet permet de générer du code dans n'importe quel langage à partir d'un AST
## Comment lancer ce projet ?
```bash
pnpm i
pnpm start
```
## Comment créer son propre codeOn veut représenter avec des nodes l'instruction suivante en pseudo code :
```pseudo
si X > Y:
2 + (5 * 3)
sinon:
2 + (5 - 3)
```Pour cela on peut identifier que l'instruction est un bloc if, portant une condition, et une expression si vraie et une expression si faux.
Cela se représente ainsi :
```typescript
new SiNode(
new ConditionNode(
new SuperieurNode(new LitteralNode('X'), new LitteralNode('Y'))
),
new AdditionNode(
new NumberNode(2),
new MultiplicationNode(new NumberNode(5), new NumberNode(3))
),
new AdditionNode(
new NumberNode(2),
new SoustractionNode(new NumberNode(5), new NumberNode(3))
)
)
```Pour parcourir cet arbre, chaque node implémente la méthode `accept` qui prend un `VisiteurNode` en argument. Voir par exemple `JavascriptGenerator`.
Exemple d'utilisation :
```typescript
const javascriptGenerator = new JavascriptGenerator()
const code = instructions.accept(javascriptGenerator)
```Et notre instance de JavascriptGenerator parcoure toute la node automatiquement.
Ce pattern est appelé "Visitor pattern double dispatch"