-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptimizer.cpp
More file actions
40 lines (39 loc) · 1.16 KB
/
Copy pathoptimizer.cpp
File metadata and controls
40 lines (39 loc) · 1.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<bits/stdc++.h>
#include<regex>
using namespace std;
int main(){
ifstream fin;
fin.open("code.asm");
string line;
vector<string> code;
while(getline(fin,line)){
if(line[0]==';')
continue;
code.push_back(line);
}
vector<vector<string>> code_tokens;
for(int i=0;i<code.size();i++){
regex re("[ ,]");
sregex_token_iterator first{code[i].begin(), code[i].end(), re, -1}, last;
vector<std::string> tokens{first, last};
code_tokens.push_back(tokens);
}
vector<int> need_to_be_erased;
for(int i=0;i<code_tokens.size()-1;i++){
if(code_tokens[i][0]=="mov" && code_tokens[i+1][0]=="mov"){
if(code_tokens[i][1]==code_tokens[i+1][2] && code_tokens[i][2]==code_tokens[i+1][1]){
need_to_be_erased.push_back(i+1);
code[i]+=" ;next line was erased";
}
}
}
for(int i=0;i<need_to_be_erased.size();i++){
code.erase(code.begin()+need_to_be_erased[i]);
}
ofstream fout;
fout.open("optimized_code.asm");
for(int i=0;i<code.size();i++){
fout<<code[i]<<endl;
}
return 0;
}