Jusqu'à présent, l'analyse de code dans CKPE était réalisé par "modèle". Par exemple, pour trouver une fonction, j'analysais chaque ligne jusqu'à trouver celles commençant par "Function XXX", et je la rajoutais ainsi à ma liste de fonction du script. Dans l'absolu, cela fonctionne parfaitement pour des choses simples. Or, CKPE est devenu de plus en plus complexe, et ce système de fonctionne plus du tout dans les cas les plus évolués.
Pour pallier à ce problème, il existe des "applications" permettant de faire de l'analyse sémantique, et génèrant les informations nécessaires à l'analyse de code. Le problème de ce genre de solution est qu'elles nécessitent l'écriture des règles de "grammaire" du langage (
qu'on retrouve sur cette page), décrivant comment un langage doit être écrit. Cette tâche est longue, fastidieuse, compliquée et source d'erreur. Malheureusement, cela reste la meilleure solution.
Après avoir triturer les fichiers du jeu dans tous les sens, et notamment les DLL présentes dans le répertoire "PapyrusCompiler", j'ai découvert que PCompiler.dll contenait tout ce dont j'avais besoin, mais impossible de réutiliser le code sans récréer ce fichier (ce qui est hors de question). Mais en ce jour faste, j'ai réussi ! Pour la petite histoire, j'aurai quand même mis un bon mois pour pondre 104 lignes de code
Petit exemple par la pratique :
- d'abord, une fonction Papyrus issue du script Actor.psc :

Et maintenant, une nouvelle image des informations que je récupère grâce aux fichiers du jeu (il s'agit de la même fonction):

On remarque qu'on retrouve exactement les mêmes informations, mais structurées de façon logique, facilement exploitable par un programme.
En réalité, je récupère plus d'informations (notamment les numéros de lignes et colonnes de chaque élément), mais dans l'absolu, l'idée est là. On passe donc d'une analyse où on lisait chaque ligne jusqu'à espérer trouver la bonne information, à une analyse "logique" organisée sous forme d'arborescence. C'est à la fois plus rapide, mais aussi plus sûr et avec beaucoup plus de potentiel ! Pour faire simple, c'est un peu comme de l'assembleur au final.