VTL语法的修改
Utilisation de la grammaire VTL
Trevas s'appuie sur la grammaire formelle de VTL exprimée sous forme EBNF. La référence est l'upgrade de la version 2.0 publiée en juillet 2020 sur le site web SDMX.
La grammaire consiste en deux fichiers prêts à être traités par le générateur de parseurs Antlr :
-
VtlTokens.g4 contient la liste des termes VTL valides.
-
Vtl.g4 contient les règles qui créent les expressions VTL valides.
Antlr utilise ces fichiers pour produire un lexeur, qui crée une liste de symboles du vocabulaire à partir d'un flot de caractères en entrée, et un parseur, qui crée la structure grammaticale correspondant à cette liste de symboles. Antlr peut générer des parseurs utilisables dans différents langages cibles. Trevas utilise le parseur pour Java, qui est exposé dans le module vtl-parser
.
Adaptations de la grammaire
Afin d'améliorer les performances et les fonctionnalités, des modifications mineures ont été faites à la grammaire VTL grammar utilisée dans Trevas.
Simplification de l'arbre grammatical
Comme documenté ici et ici, les branches expr
et exprComp
de l'arbre grammatical sont presques identiques. Afin d'éviter d'avoir à implémenter deux fois la même logique, la branche exprComp
a été mise en commentaires par le commit 498c1f8. Il fut remarqué par la suite que cette modification invalidait à tort l'expression COUNT()
expression, et la règle correspondante fut donc réintroduite dans la grammaire par le commit [54f86f2] (https://github.com/InseeFr/Trevas/commit/54f86f27d2e8fdd57df1439d74ed56d225064a7d).
Addition d'opérateurs de distance
Les opérateurs de distances tels que Levenshtein ou Jaro-Winkler sont communément utilisés dans les tests sur les chaînes de caractères. Afin de les autoriser dans les expressions VTL, le commit 036dc60 a ajouté dans la grammaire une section distanceOperators
contenant une règle LEVENSHTEIN
, ainsi que le symbole LEVENSHTEIN
dans le fichier du lexeur.