mirror of
https://github.com/hazemKrimi/jack-vm-translator.git
synced 2026-05-02 02:10:27 +00:00
Finish first part spec
This commit is contained in:
+1
-2
@@ -2,6 +2,7 @@
|
|||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
#include "utils.h"
|
||||||
#include "operations.h"
|
#include "operations.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
|
|
||||||
@@ -80,8 +81,6 @@ public:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
file << endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+62
-24
@@ -1,6 +1,7 @@
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
@@ -116,6 +117,10 @@ string translateEq()
|
|||||||
{
|
{
|
||||||
stringstream output;
|
stringstream output;
|
||||||
|
|
||||||
|
srand(static_cast<unsigned int>(time(nullptr)));
|
||||||
|
|
||||||
|
string LABEL = generateRandomLabel();
|
||||||
|
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M-1" << endl;
|
output << "M=M-1" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
@@ -130,25 +135,32 @@ string translateEq()
|
|||||||
output << "D=M" << endl;
|
output << "D=M" << endl;
|
||||||
|
|
||||||
output << "@R" << endl;
|
output << "@R" << endl;
|
||||||
output << "M=M-D" << endl;
|
output << "M=D-M" << endl;
|
||||||
output << "@TRUE" << endl;
|
output << "D=M" << endl;
|
||||||
output << "M;JEQ" << endl;
|
output << "@" << LABEL << "_TRUE" << endl;
|
||||||
output << "@FALSE" << endl;
|
output << "D;JEQ" << endl;
|
||||||
output << "M;JNE" << endl;
|
output << "@" << LABEL << "_FALSE" << endl;
|
||||||
|
output << "D;JNE" << endl;
|
||||||
|
|
||||||
output << "(TRUE)" << endl;
|
output << "(" << LABEL << "_TRUE)" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
output << "M=-1" << endl;
|
output << "M=-1" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M+1" << endl;
|
output << "M=M+1" << endl;
|
||||||
|
output << "@" << LABEL << endl;
|
||||||
|
output << "0;JMP" << endl;
|
||||||
|
|
||||||
output << "(FALSE)" << endl;
|
output << "(" << LABEL << "_FALSE)" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
output << "M=-1" << endl;
|
output << "M=0" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M+1" << endl;
|
output << "M=M+1" << endl;
|
||||||
|
output << "@" << LABEL << endl;
|
||||||
|
output << "0;JMP" << endl;
|
||||||
|
|
||||||
|
output << "(" << LABEL << ")" << endl;
|
||||||
|
|
||||||
return output.str();
|
return output.str();
|
||||||
}
|
}
|
||||||
@@ -157,6 +169,10 @@ string translateGt()
|
|||||||
{
|
{
|
||||||
stringstream output;
|
stringstream output;
|
||||||
|
|
||||||
|
srand(static_cast<unsigned int>(time(nullptr)));
|
||||||
|
|
||||||
|
string LABEL = generateRandomLabel();
|
||||||
|
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M-1" << endl;
|
output << "M=M-1" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
@@ -171,25 +187,34 @@ string translateGt()
|
|||||||
output << "D=M" << endl;
|
output << "D=M" << endl;
|
||||||
|
|
||||||
output << "@R" << endl;
|
output << "@R" << endl;
|
||||||
output << "M=M-D" << endl;
|
output << "M=D-M" << endl;
|
||||||
output << "@TRUE" << endl;
|
output << "D=M" << endl;
|
||||||
output << "M;JGT" << endl;
|
output << "@" << LABEL << "_TRUE" << endl;
|
||||||
output << "@FALSE" << endl;
|
output << "D;JGT" << endl;
|
||||||
output << "M;JLT" << endl;
|
output << "@" << LABEL << "_FALSE" << endl;
|
||||||
|
output << "D;JLT" << endl;
|
||||||
|
output << "@" << LABEL << "_FALSE" << endl;
|
||||||
|
output << "D;JEQ" << endl;
|
||||||
|
|
||||||
output << "(TRUE)" << endl;
|
output << "(" << LABEL << "_TRUE)" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
output << "M=-1" << endl;
|
output << "M=-1" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M+1" << endl;
|
output << "M=M+1" << endl;
|
||||||
|
output << "@" << LABEL << endl;
|
||||||
|
output << "0;JMP" << endl;
|
||||||
|
|
||||||
output << "(FALSE)" << endl;
|
output << "(" << LABEL << "_FALSE)" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
output << "M=-1" << endl;
|
output << "M=0" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M+1" << endl;
|
output << "M=M+1" << endl;
|
||||||
|
output << "@" << LABEL << endl;
|
||||||
|
output << "0;JMP" << endl;
|
||||||
|
|
||||||
|
output << "(" << LABEL << ")" << endl;
|
||||||
|
|
||||||
return output.str();
|
return output.str();
|
||||||
}
|
}
|
||||||
@@ -198,6 +223,10 @@ string translateLt()
|
|||||||
{
|
{
|
||||||
stringstream output;
|
stringstream output;
|
||||||
|
|
||||||
|
srand(static_cast<unsigned int>(time(nullptr)));
|
||||||
|
|
||||||
|
string LABEL = generateRandomLabel();
|
||||||
|
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M-1" << endl;
|
output << "M=M-1" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
@@ -212,25 +241,34 @@ string translateLt()
|
|||||||
output << "D=M" << endl;
|
output << "D=M" << endl;
|
||||||
|
|
||||||
output << "@R" << endl;
|
output << "@R" << endl;
|
||||||
output << "M=M-D" << endl;
|
output << "M=D-M" << endl;
|
||||||
output << "@TRUE" << endl;
|
output << "D=M" << endl;
|
||||||
output << "M;JLT" << endl;
|
output << "@" << LABEL << "_TRUE" << endl;
|
||||||
output << "@FALSE" << endl;
|
output << "D;JLT" << endl;
|
||||||
output << "M;JGT" << endl;
|
output << "@" << LABEL << "_FALSE" << endl;
|
||||||
|
output << "D;JGT" << endl;
|
||||||
|
output << "@" << LABEL << "_FALSE" << endl;
|
||||||
|
output << "D;JEQ" << endl;
|
||||||
|
|
||||||
output << "(TRUE)" << endl;
|
output << "(" << LABEL << "_TRUE)" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
output << "M=-1" << endl;
|
output << "M=-1" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M+1" << endl;
|
output << "M=M+1" << endl;
|
||||||
|
output << "@" << LABEL << endl;
|
||||||
|
output << "0;JMP" << endl;
|
||||||
|
|
||||||
output << "(FALSE)" << endl;
|
output << "(" << LABEL << "_FALSE)" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "A=M" << endl;
|
output << "A=M" << endl;
|
||||||
output << "M=-1" << endl;
|
output << "M=0" << endl;
|
||||||
output << "@SP" << endl;
|
output << "@SP" << endl;
|
||||||
output << "M=M+1" << endl;
|
output << "M=M+1" << endl;
|
||||||
|
output << "@" << LABEL << endl;
|
||||||
|
output << "0;JMP" << endl;
|
||||||
|
|
||||||
|
output << "(" << LABEL << ")" << endl;
|
||||||
|
|
||||||
return output.str();
|
return output.str();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
#include <iostream>
|
||||||
|
#include <random>
|
||||||
|
#include <ctime>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
string generateRandomLabel() {
|
||||||
|
random_device rd;
|
||||||
|
mt19937 gen(rd());
|
||||||
|
uniform_int_distribution<> dis('A', 'Z');
|
||||||
|
string label;
|
||||||
|
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
label += static_cast<char>(dis(gen));
|
||||||
|
}
|
||||||
|
|
||||||
|
return label;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user