3
1

added 2 pass macro code

This commit is contained in:
Tanmay 2024-10-13 12:33:05 +05:30
parent ca8541ebce
commit f048715b7a
2 changed files with 114 additions and 0 deletions

View File

@ -0,0 +1,111 @@
class MacroProcessor:
def __init__(self):
self.macro_name_table = {}
self.macro_definition_table = {}
self.mdt_index = 0
def process_pass1(self, source_code):
inside_macro = False
current_macro_name = None
macro_definition = []
for line in source_code:
tokens = line.strip().split()
if not tokens:
continue
if tokens[0] == 'MACRO':
inside_macro = True
continue
if inside_macro and tokens[0] == 'MEND':
inside_macro = False
self.macro_definition_table[current_macro_name] = macro_definition[:]
self.macro_name_table[current_macro_name] = self.mdt_index
self.mdt_index += len(macro_definition)
macro_definition = []
current_macro_name = None
continue
if inside_macro:
if not current_macro_name:
current_macro_name = tokens[0]
macro_definition.append(line.strip())
else:
pass
def process_pass2(self, source_code):
output = []
inside_macro = False
for line in source_code:
tokens = line.strip().split()
if not tokens:
continue
if tokens[0] == 'MACRO':
inside_macro = True
continue
elif tokens[0] == 'MEND':
inside_macro = False
continue
if inside_macro:
continue
macro_name = tokens[0]
if macro_name in self.macro_name_table:
macro_def = self.macro_definition_table[macro_name]
args = tokens[1:]
output.extend(self.expand_macro(macro_def, args))
else:
output.append(line.strip())
return output
def expand_macro(self, macro_def, args):
expanded_lines = []
for line in macro_def:
for i, arg in enumerate(args):
line = line.replace(f"&ARG{i+1}", arg)
expanded_lines.append(line)
return expanded_lines
def display_tables(self):
print("Macro Name Table (MNT):")
for name, index in self.macro_name_table.items():
print(f"Macro Name: {name}, MDT Index: {index}")
print("\nMacro Definition Table (MDT):")
for name, definition in self.macro_definition_table.items():
print(f"Macro Name: {name}")
for line in definition:
print(f"\t{line}")
source_code = [
"MACRO",
"INCR &ARG1",
"ADD &ARG1, ONE",
"MEND",
"MACRO",
"DECR &ARG1",
"SUB &ARG1, ONE",
"MEND",
"START",
"INCR A",
"DECR B",
"END",
]
macro_processor = MacroProcessor()
macro_processor.process_pass1(source_code)
macro_processor.display_tables()
expanded_code = macro_processor.process_pass2(source_code)
print("\nExpanded Source Code (Pass 2):")
for line in expanded_code:
print(line)

View File

@ -7,6 +7,9 @@ This repository serves as a comprehensive resource for the Systems Programming a
## Index
### Codes
##### Group A
2. [Pass 1 and Pass 2 of 2-Pass Macroprocessor]
##### Group B
5. [CPU Scheduling Algorithms: FCFS, SJF (Preemptive), Priority (Non-Preemptive) and Round Robin (Preemptive)](https://git.kska.io/sppu-te-comp-content/SystemsProgrammingAndOperatingSystem/src/branch/main/Codes/Group%20B/Assignment%20-%205)
- [FCFS (Non-Preemptive)](https://git.kska.io/sppu-te-comp-content/SystemsProgrammingAndOperatingSystem/src/branch/main/Codes/Group%20B/Assignment%20-%205/FCFS%20%28Non-Preemptive%29.cpp)