Master 2017 2018
PSTL
Générateur de parseur en Rust


Site : Trac-Générateur de parseur en Rust
Encadrant : Talbot Pierre, Agon Amado Carlos

Cliquer ici pour vous authentifier

Description

Oak[1] est un générateur de parseur PEG écrit en Rust. L’idée principale derrière Oak est de générer semi-automatiquement l’AST à partir d’une grammaire. Par exemple, une expression de parsing comme `e1* e2` (parser autant de fois l’expression `e1` suivi de `e2`) devrait naturellement avoir le type `(Vec<T1>, T2)` si le type de `e1` est `T1` et de `e2` est `T2`. Les motivations de Oak sont expliquées plus en détail dans le manuel du projet[2].

D’autre part, Rust est un langage proposant un mécanisme d’extension de syntaxe[3]. Concrètement, dans le cas de Oak comme extension de syntaxe, on écrit la grammaire dans un fichier source Rust délimitée par un bloc de code écrit de la sorte : ``grammar ! test G ``. La grammaire `G` est donnée au compilateur Oak qui va la transformer en une fonction de parsing générée en Rust. Ce que reçoit l’extension de syntaxe (ici le compilateur Oak) en entrée est en fait une liste de lexèmes (tokens) venant directement du compilateur Rust.

Le but de ce projet sera d’adapter Oak pour qu’il puisse directement parser sur la liste de lexèmes au lieu d’une chaine de caractères[4]. Ainsi, nous pourrons récupérer les métadata des lexèmes, comme la position dans le code source, et les transférer dans l’AST final. Vu que nous utilisons les mêmes métadata dans l’AST de l’extension de syntaxe que dans l’AST du compilateur Rust, cela signifie qu’on peut ré-utiliser tous les outils de ce dernier, notamment sa bibliothèque d’affichage des erreurs. À la suite de cela, le parseur de Oak (pour le moment écrit à la main) pourra être réécrit en Oak.

Projet pour 1 à 2 étudiants.

Bibliographie

[1] https://github.com/ptal/oak

[2] http://hyc.io/oak/

[3] https://doc.rust-lang.org/unstable-...

[4] https://github.com/ptal/oak/issues/93