Remove edges in constructor
This commit is contained in:
91
Project-02-03-04/generate_after_dot_files.py
Normal file
91
Project-02-03-04/generate_after_dot_files.py
Normal file
@@ -0,0 +1,91 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
import sys
|
||||
import os
|
||||
from pathlib import Path
|
||||
|
||||
# Add the current directory to Python path so we can import our modules
|
||||
sys.path.insert(0, '/home/janniclas/Projekte/Construction-of-Compilers/Project-02-03-04')
|
||||
|
||||
import triplayacc as yacc
|
||||
import cfg_build
|
||||
import syntax
|
||||
from cfg.CFG import CFG
|
||||
from cfg.CFG_Node import (CFG_START, CFG_END)
|
||||
|
||||
def make_cfg(ast):
|
||||
start = CFG_START()
|
||||
end = CFG_END()
|
||||
|
||||
last = ast.cfa(start, end)
|
||||
if last is not None:
|
||||
last.add_child(end)
|
||||
|
||||
return CFG(start, end, ast)
|
||||
|
||||
def generate_dot_files():
|
||||
base = Path("triplaprograms")
|
||||
programs = sorted([f for f in base.glob("*.tripla")])
|
||||
|
||||
output_dir = Path("mistraltests/after")
|
||||
output_dir.mkdir(exist_ok=True, parents=True)
|
||||
|
||||
for path in programs:
|
||||
try:
|
||||
print(f"Processing {path.name}...")
|
||||
|
||||
# Reset the global FUNCTIONS registry
|
||||
cfg_build.FUNCTIONS.clear()
|
||||
|
||||
source = path.read_text()
|
||||
ast = yacc.parser.parse(source)
|
||||
|
||||
# Create CFG
|
||||
cfg = make_cfg(ast)
|
||||
|
||||
# Generate dot file
|
||||
dot_str = cfg.to_dot()
|
||||
|
||||
# Save to file
|
||||
output_path = output_dir / f"{path.stem}_cfg_after.dot"
|
||||
with open(output_path, "w") as f:
|
||||
f.write(dot_str)
|
||||
|
||||
print(f"Saved: {output_path}")
|
||||
|
||||
except Exception as e:
|
||||
print(f"Error processing {path.name}: {e}")
|
||||
continue
|
||||
|
||||
def compare_dot_files():
|
||||
"""Compare before and after dot files to ensure they're the same"""
|
||||
before_dir = Path("mistraltests/before")
|
||||
after_dir = Path("mistraltests/after")
|
||||
|
||||
before_files = sorted(before_dir.glob("*_cfg_before.dot"))
|
||||
after_files = sorted(after_dir.glob("*_cfg_after.dot"))
|
||||
|
||||
print("\nComparing dot files...")
|
||||
|
||||
mismatches = []
|
||||
|
||||
for before_file, after_file in zip(before_files, after_files):
|
||||
before_content = before_file.read_text()
|
||||
after_content = after_file.read_text()
|
||||
|
||||
if before_content == after_content:
|
||||
print(f"✓ {before_file.stem} - MATCH")
|
||||
else:
|
||||
print(f"✗ {before_file.stem} - MISMATCH")
|
||||
mismatches.append((before_file, after_file))
|
||||
|
||||
if mismatches:
|
||||
print(f"\n{mismatches} files have mismatches!")
|
||||
for before_file, after_file in mismatches:
|
||||
print(f" {before_file.name} vs {after_file.name}")
|
||||
else:
|
||||
print("\nAll dot files match! The refactoring was successful.")
|
||||
|
||||
if __name__ == "__main__":
|
||||
generate_dot_files()
|
||||
compare_dot_files()
|
||||
Reference in New Issue
Block a user