0 votes

Expression régulière pour obtenir les fonctions pascal

J'ai un fichier de code pascal et j'ai besoin de l'analyser (en utilisant c#) et d'afficher toutes les fonctions publiques, mon fichier ressemble à quelque chose comme ça (pas le code réel) :

public
  function Test(str: string):bool;
  function Test1(str: string):bool;
  function Test2(str,str1,str2,str3
                 str4: string):bool;
  function Test3(str: string):bool;
published

Remarquez Test2 ici, et comment il est sur plusieurs lignes. Je sais faire des expressions régulières basiques (très basiques), mais je n'arrive pas à faire quelque chose qui fonctionne avec ça. En gros, ce dont j'ai besoin, c'est de Obtenir toutes les fonctions entre les chaînes de caractères "public" et "publié" et les retourner en une seule ligne...

5voto

Tamas Czinege Points 49277

Cela sera très difficile à faire, voire impossible. Il suffit de penser à tous les problèmes posés par les chaînes de caractères, les commentaires et les séquences d'échappement. Si j'étais vous, j'utiliserais plutôt un analyseur Pascal.

Voici une page avec des grammaires lexx/yacc pour Pascal :

http://www.moorecad.com/standardpascal/yacclex.html

Voici quelques informations sur yacc et lexx :

http://dinosaur.compilertools.net/

Grâce à ces outils, vous pouvez générer en un rien de temps un analyseur syntaxique qui sera bien plus performant que n'importe quelle expression régulière.

1voto

Nick Dandoulakis Points 26809

Je vous donne quelques expressions rationnelles pour obtenir des procédures et des fonctions qui ont ou n'ont pas de paramètres.

rproc1 = "(?<!\w)procedure\s+[\w\s.]+;"
rproc2 = "(?<!\w)procedure\s+[\w\s.]+\([\w\s,.=':;$/*()]*?\)\s*;"

rfunc1 = "(?<!\w)function\s+[\w\s.]+:\s*\w+\s*;"
rfunc2 = "(?<!\w)function\s+[\w\s.]+\([\w\s,.=':;$/*()]*?\)\s*:\s*\w+\s*;"

Il s'agit toutefois d'une sorte d'heuristique. Ne vous attendez pas à ce qu'elles correspondent à toutes les déclarations de fonctions possibles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X