gitweb on Svarog
projekti pod git sistemom za održavanje verzija -- projects under the git version control systemdiff --git a/src-wsl/transf-min.wsl b/src-wsl/transf-min.wsl
--- a/src-wsl/transf-min.wsl
+++ b/src-wsl/transf-min.wsl
C:"
C:"
-Copyright (C) 2012 Doni Pracner http://perun.dmi.rs/pracner
+Copyright (C) 2012,2015 Doni Pracner
+http://perun.dmi.rs/pracner
This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
This program is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public
C:"Automatic transformation tool for simplification of WSL";
C:"code automaticaly translated from assembly using asm2wsl.";
C:"Automatic transformation tool for simplification of WSL";
C:"code automaticaly translated from assembly using asm2wsl.";
-C:"a simple version";
+
+C:"a very simple version, ment to be fast and relatively
+efficient. It is aimed at action-system programs and should
+remove them from the program, while doing other
+simlifications in the process.";
+
+C:"set the following so that Action Systems are not
+automaticaly treated as regular";
+C:"Not neccessary with recent versions of FermaT";
+Assume_A_S_Regular := 0;
+
+C:"Main procedure to transform the loaded program";
MW_PROC @Process_Prog() ==
MW_PROC @Process_Prog() ==
+
@Trans(TR_Constant_Propagation, "");
@Trans(TR_Constant_Propagation, "");
+
+ C:"Try to remove the Action systems";
FOREACH Statement DO
FOREACH Statement DO
- IF @ST(@I) = T_A_S THEN
- C:"don't need to test for this, works for T_A_S";
- @Trans(TR_Simplify_Action_System, "");
+ IF @ST(@I) = T_A_S THEN
+ IF @Trans?(TR_Simplify_Action_System) THEN
+ @Trans(TR_Simplify_Action_System, "")
+ FI;
IF @Trans?(TR_Collapse_Action_System) THEN
@Trans(TR_Collapse_Action_System, "");
FI;
ELSIF @Trans?(TR_Remove_All_Redundant_Vars) THEN
@Trans(TR_Remove_All_Redundant_Vars, "");
IF @Trans?(TR_Collapse_Action_System) THEN
@Trans(TR_Collapse_Action_System, "");
FI;
ELSIF @Trans?(TR_Remove_All_Redundant_Vars) THEN
@Trans(TR_Remove_All_Redundant_Vars, "");
- ELSIF @ST(@I) = T_Skip THEN
- @Delete
+ ELSIF @ST(@I) = T_Skip THEN
+ @Delete
FI
OD;
FI
OD;
+
C:"remove all the comments ";
FOREACH Statement DO
C:"remove all the comments ";
FOREACH Statement DO
- IF @ST(@I) = T_Comment THEN
+ IF @ST(@I) = T_Comment THEN
@Delete
FI
OD;
@Delete
FI
OD;
+
+ FOREACH Statement DO
+ IF @Trans?(TR_Simplify_Item) THEN
+ @Trans(TR_Simplify_Item,"")
+ FI
+ OD;
+
C:"Convert DO loops into WHILE loops";
FOREACH Statement DO
IF @Trans?(TR_Floop_To_While) THEN
C:"Convert DO loops into WHILE loops";
FOREACH Statement DO
IF @Trans?(TR_Floop_To_While) THEN
SKIP
END;
SKIP
END;
-BEGIN
-VAR< prog := < >, inifilename := "transf.ini",
- filename:="", file := "", inifile:= ""
->:
-IF @File_Exists?(inifilename) THEN
- inifile := @Open_Input_File(inifilename);
- filename := @Read_Line(inifile);
- WHILE NOT @EOF?(filename) DO
+MW_PROC @Get_New_Name(VAR str) ==
+ IF @Ends_With?(str, ".wsl") THEN
+ str := SUBSTR(str, 0, SLENGTH(str)-4)
+ FI;
+ str := str ++ "_t.wsl"
+END;
+
+MW_PROC @Prog_Stat_Comp(Pro, After VAR)==
+ VAR < ma := 0, mb :=1 > :
+ ma := @McCabe(Pro);
+ mb := @McCabe(After);
+ PRINT ("McCabe ", ma, " ", mb, " ",(mb-ma));
+ ma := @Stat_Count(Pro);
+ mb := @Stat_Count(After);
+ PRINT ("Statem ", ma, " ",mb, " ",(mb-ma));
+ ma := @CFDF_Metric(Pro);
+ mb := @CFDF_Metric(After);
+ PRINT ("CF/DF ", ma," ", mb," ", (mb-ma));
+ ma := @Total_Size(Pro);
+ mb := @Total_Size(After);
+ PRINT ("Size ", ma," ", mb, " ",(mb-ma));
+ ma := @Struct_Metric(Pro);
+ mb := @Struct_Metric(After);
+ PRINT ("Struct ", ma, " ",mb, " ",(mb-ma));
+ SKIP
+ ENDVAR
+END;
+
+MW_PROC @Process_File(filename) ==
IF @File_Exists?(filename) THEN
@New_Program(@Parse_File(filename, T_Statements));
PRINT("Processing: ", filename);
prog := @Program;
@Process_Prog();
IF @File_Exists?(filename) THEN
@New_Program(@Parse_File(filename, T_Statements));
PRINT("Processing: ", filename);
prog := @Program;
@Process_Prog();
- Get_New_Name(VAR filename);
+ @Get_New_Name(VAR filename);
@PP_Item(@Program, 80, filename);
@PP_Item(@Program, 80, filename);
- Prog_Stat(prog);
- PRINT("");
- PRINT("After Conversion");
- Prog_Stat(@Program)
- FI;
- filename := @Read_Line(inifile)
- OD;
- @Close_Input_Port(inifile);
+ PRINT(filename);
+ @Prog_Stat_Comp(prog, @Program);
+ ELSE
+ PRINT("ERROR: File ",filename," not found");
+ FI
+END;
+
+VAR< prog := < >, inifilename := "transf.ini",
+ filename:="", file := "", inifile:= "",
+ Argv := @Argv
+>:
+C:"First one is the script name that is being executed";
+Argv := TAIL(Argv);
+
+IF Argv = < > THEN
+ PRINT("no arguments passed; using ",inifilename);
+ IF @File_Exists?(inifilename) THEN
+ inifile := @Open_Input_File(inifilename);
+ filename := @Read_Line(inifile);
+ C:"check if the loaded is an EOF";
+ WHILE NOT @EOF?(filename) DO
+ @Process_File(filename);
+ filename := @Read_Line(inifile)
+ OD;
+ @Close_Input_Port(inifile);
+ ELSE
+ PRINT("ini file (",inifilename,") not found.",
+ " it should contain a list of filenames to be converted");
+ PRINT("you can input a filename now:");
+ filename := @Read_Line(Standard_Input_Port);
+ @Process_File(filename);
+ FI
ELSE
ELSE
- PRINT("ini file (",inifilename,") not found.",
- " it should contain a list of filenames to be converted");
- PRINT("you can input a filename now:");
- filename := @Read_Line(Standard_Input_Port);
- IF @File_Exists?(filename) THEN
- @New_Program(@Parse_File(filename, T_Statements));
- @Process_Prog();
- Get_New_Name(VAR filename);
- @PP_Item(@Program, 80, filename)
- FI;
+ FOR arg IN Argv DO
+ @Process_File(arg);
+ OD
FI
ENDVAR
FI
ENDVAR
-WHERE
-
-PROC Prog_Stat(Pro VAR)==
- PRINT ("Mc ", @McCabe(Pro));
- PRINT ("Statements ", @Stat_Count(Pro));
- PRINT ("Control/data Flow ", @CFDF_Metric(Pro));
- PRINT ("Size(nodes) ", @Total_Size(Pro));
- PRINT ("Struct ", @Struct_Metric(Pro));
- SKIP
-END
-
-PROC Get_New_Name(VAR str) ==
- IF @Ends_With?(str, ".wsl") THEN
- str := SUBSTR(str, 0, SLENGTH(str)-4)
- FI;
- str := str ++ "_t.wsl"
-END
-
-PROC Get_Before_Name(VAR str) ==
- IF @Ends_With?(str, ".wsl") THEN
- str := SUBSTR(str, 0, SLENGTH(str)-4)
- FI;
- str := str ++ "_b.wsl"
-END
-
-END