118 lines
1.3 KiB
Plaintext
118 lines
1.3 KiB
Plaintext
Title : Design suitable data structures and implement Pass 1 of two pass macro-processor
|
|
CODE
|
|
#include <iostream>
|
|
#include <bits/stdc++.h>
|
|
using namespace std;
|
|
int main(){
|
|
vector<string> mdt;
|
|
vector<string> mnt;
|
|
vector <char> pnt[4];
|
|
fstream file;
|
|
int pointer=0;
|
|
file.open("macro.txt",ios::in);
|
|
string s = "",str="";
|
|
int c = 0,r=0,a=-1,b=0;
|
|
while(getline(file,s)){
|
|
if(s=="MACRO"){
|
|
b=1;
|
|
c=1;
|
|
a++;
|
|
continue;
|
|
}
|
|
for(auto it:s){
|
|
if(r==1){
|
|
int z=0;
|
|
for(auto x:pnt[a]){
|
|
if(x==it){
|
|
z=1;
|
|
}
|
|
}
|
|
if(z==0){
|
|
pnt[a].push_back(it);
|
|
}
|
|
r=0;
|
|
}
|
|
if(it=='&'){
|
|
r=1;}
|
|
}
|
|
if(b==1){
|
|
str="";
|
|
int v=0;
|
|
char t=s[v];
|
|
while(t!=' '){
|
|
str=str+t;
|
|
v++;
|
|
t=s[v];
|
|
}
|
|
mnt.push_back(str);
|
|
b=0;
|
|
}
|
|
if(c==1){
|
|
mdt.push_back(s);
|
|
}
|
|
if(s=="MEND"){
|
|
c=0;
|
|
}
|
|
}
|
|
file.close();
|
|
cout<<"MDT"<<endl;
|
|
for(auto it:mdt){
|
|
cout<<it<<endl;
|
|
}
|
|
cout<<endl;
|
|
for(int i = 0 ; i<=a ; i++){
|
|
cout<<"PNT"<<i<<endl;
|
|
for(auto it:pnt[i]){
|
|
cout<<it<<endl;
|
|
}
|
|
cout<<endl;
|
|
}
|
|
cout<<"MNT"<<endl;
|
|
for(auto it:mnt){
|
|
cout<<it<<endl;
|
|
}
|
|
return 0;
|
|
}Input File : macro.txt
|
|
MACRO
|
|
ONE &O,&N,&E=AREG
|
|
MOVER &E,&O
|
|
ADD &E,&N
|
|
MOVEM &E,&O
|
|
MEND
|
|
MACRO
|
|
TWO &T,&W,&O=DREG
|
|
MOVER &O,&T
|
|
ADD &O,&W
|
|
MOVEM &O,&T
|
|
MEND
|
|
START
|
|
READ O
|
|
READ T
|
|
ONE O,9
|
|
TWO T,7
|
|
STOP
|
|
O DS 1
|
|
T DS 1
|
|
END
|
|
OUTPUT :
|
|
MDT
|
|
ONE &O,&N,&E=AREG
|
|
MOVER &E,&O
|
|
ADD &E,&N
|
|
MOVEM &E,&O
|
|
MEND
|
|
TWO &T,&W,&O=DREG
|
|
MOVER &O,&T
|
|
ADD &O,&W
|
|
MOVEM &O,&T
|
|
MEND
|
|
PNT0
|
|
O
|
|
N
|
|
E
|
|
PNT1
|
|
T
|
|
WO
|
|
MNT
|
|
ONE
|
|
TWO |