Bonjour !
j'ai commencé un exercice sur les patterns qui consiste à supprimer les commentaires d'un code source en Pascal et à effectuer d'autres opérations de formatage.
Voici le script :
Et le code source en Pascal :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 function filepath(file) if string.find(file, "\\") then local r = file while string.sub(r, #r) ~= "\\" do r = string.sub(r, 1, -2) end return r else return "" end end local filename = filepath(arg[0]) .. "sample.pas" local destfilename = filepath(arg[0]) .. "result.txt" if #arg == 1 then filename = arg[1] end if #arg == 2 then filename = arg[1] destfilename = arg[2] end print(filename) print(destfilename) -- lire le contenu du fichier dans une chaîne io.input(filename) local s = io.read("*a") -- modifier la chaîne -- commentaires s = string.gsub(s, "//[^\n]*\n", "\n") s = string.gsub(s, "{[^$].-}", "") s = string.gsub(s, "%(%*[^$].-%*%)", "") -- virgules while string.match(s, "%s,") do s = string.gsub(s, "%s,", ",") end while string.match(s, ",%s") do s = string.gsub(s, ",%s", ",") end s = string.gsub(s, ",", ", ") -- opérateur while string.match(s, "%s=") do s = string.gsub(s, "%s=", "=") end while string.match(s, "[^:]=%s") do s = string.gsub(s, "([^:])=%s", "%1=") end s = string.gsub(s, "([^:])=", "%1 = ") -- opérateur composé while string.match(s, "%s:=") do s = string.gsub(s, "%s:=", ":=") end while string.match(s, ":=%s") do s = string.gsub(s, ":=%s", ":=") end s = string.gsub(s, ":=", " := ") -- écrire la chaîne dans un fichier io.output(destfilename) io.write(s)
Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 program Source; {pour essayer un programme qui supprime les commentaires} {$APPTYPE CONSOLE} {$R *.res} begin WriteLn('Bonjour!'); {$IFDEF VER230}Write('{ à conserver }'){$ELSE}Write('// à conserver '){$ENDIF}; {commentaire}Write('(* à conserver *)'); {commentaire sur deux lignes} WriteLn;// barres obliques (* parenthèses et astérisques *) // guillemets dans une chaîne ! WriteLn('L''oiseau est dans l''arbre.'); WriteLn(''); WriteLn('a'); WriteLn('a'''); WriteLn('''a'); WriteLn(''''); WriteLn(''''''); end.
Je sèche sur le point suivant : comment ne pas supprimer les commentaires se trouvant dans les chaînes ?
Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 program Source; {$APPTYPE CONSOLE} {$R *.res} begin WriteLn('Bonjour!'); {$IFDEF VER230}Write(''){$ELSE}Write(' Write(''); WriteLn; WriteLn('L''oiseau est dans l''arbre.'); WriteLn(''); WriteLn('a'); WriteLn('a'''); WriteLn('''a'); WriteLn(''''); WriteLn(''''''); end.
Partager