From b65b2a794f1a235c9aa0bcfd645656e5c57027a6 Mon Sep 17 00:00:00 2001 From: Kshitij Date: Mon, 14 Oct 2024 11:18:56 +0530 Subject: [PATCH] Merged Code-A1 from testing branch to main branch and added link in README file. --- Codes/Group A/Assignment-A1/Code-A1.py | 109 +++++++++++++++++++++++++ Codes/Group A/Assignment-A1/source.txt | 4 + README.md | 1 + 3 files changed, 114 insertions(+) create mode 100755 Codes/Group A/Assignment-A1/Code-A1.py create mode 100755 Codes/Group A/Assignment-A1/source.txt diff --git a/Codes/Group A/Assignment-A1/Code-A1.py b/Codes/Group A/Assignment-A1/Code-A1.py new file mode 100755 index 0000000..2681c95 --- /dev/null +++ b/Codes/Group A/Assignment-A1/Code-A1.py @@ -0,0 +1,109 @@ +# Assignment-A1 + +try: + source = open('source.txt','r') + data = source.read() + print('File read successfully\n\n') + source.seek(0) +except FileNotFoundError: #A little bit of exception handling + print('\n\n\nFile Not found. Create a source.txt first.\n\n\n ') +except IOError: + print('There was an IO error') +LT_index = 0 #index of LT table +ST_index = 0 #index of ST table +add = 0 # address in source code +MOT = {'STOP': '00','ADD': '01','SUB': '02','MULT': '03','MOVER': '04','MOVEM': '05','COMP': '06','BC': '07','DIV': '08','READ': '09','PRINT': '10','START': '01','END': '02','ORIGIN': '03','LTORG': '05','DS': '01','DC': '02','AREG,': '01','BREG,': '02','EQ':'01'} +ST = [] +code=[] +LT=[] +MC = [] +# LT, ST are lists of lists. code= intermediate code table + + +def classy(text): + '''This function will return the class of the word to be inputted in the Intermediate table''' + text = text.upper() + if text in ['STOP','ADD','SUB', 'MULT','MOVER','MOVEM','COMP','BC','DIV','READ', 'PRINT']: + return 'IS' + elif text in ['START','END','ORIGIN','LTORG']: + return 'AD' + elif text in ['DS','DC']: + return 'DL' + elif text in ['AREG,','BREG,']: return 'RG' + elif text in ['EQ']: return 'CC' + else: return 'None' + +def handle_start(): + '''This function gives you the starting address of the code''' + line= source.readline() + words=line.split() + if words[0].upper()=='START': + return int(words[1]) + else: + print("No Start Statement! Abort!\n") + return 0 + +def pass1(): + add=handle_start() + if not add: + print("Ending Pass 1 due to Above error.") + return + global ST_index, LT_index # to modify global variables, use global keyword + while True: + line=source.readline()# handlestart function reads line 1 and we start from the second line. + if not line: + break + words= line.split() + for w in words: + w=w.upper() + if w[0]=='=': + entry=[LT_index,w, add] + LT.append(entry) + LT_index +=1 + elif classy(w)== 'None': + for term in ST: + if w== term[1]: break # I check if the label is already present in ST. + else: + entry=[ST_index,w, add] + ST.append(entry) + ST_index +=1 + add+=1 + print('LT:') + for a in LT: + print(a) + print('\n\n\nST:') + for a in ST: + print(a) + +def intermediate(): + source.seek(0) + while True: + entry=[] + ind = 0 + line=source.readline() + if not line: + break + words=line.split() + for w in words: + w=w.upper() + if classy(w)!='None': #it is a directive + entry.append((classy(w),MOT[w])) + elif w[0]== '=': #it is a literal. + for a in LT: + if a[1]==w: + ind = a[0] + break + entry.append(('L',ind)) + else: #it is a symbol + for a in ST: + if a[1]==w: + ind = a[0] + break + entry.append(('S',ind)) + code.append(entry) + print("\nThe Intermediate code is:") + for entry in code: + print(entry) + +pass1() +intermediate() diff --git a/Codes/Group A/Assignment-A1/source.txt b/Codes/Group A/Assignment-A1/source.txt new file mode 100755 index 0000000..0548fd2 --- /dev/null +++ b/Codes/Group A/Assignment-A1/source.txt @@ -0,0 +1,4 @@ +Start 100 +Label MOVER AREG, =5 +add areg, =999 +sub breg, x diff --git a/README.md b/README.md index 93403f2..9226327 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ This repository serves as a comprehensive resource for the Systems Programming a ### Codes ##### Group A +1. [Code-A1 - Pass 1](https://git.kska.io/sppu-te-comp-content/SystemsProgrammingAndOperatingSystem/src/branch/main/Codes/Group%20A/Code-A1.py) 2. [Code-A2 - Pass 1 and Pass 2 of 2-Pass Macroprocessor](https://git.kska.io/sppu-te-comp-content/SystemsProgrammingAndOperatingSystem/src/branch/main/Codes/Group%20A/Code-A2.py) ##### Group B