Add seti and int operators

This commit is contained in:
2019-11-23 12:21:14 +01:00
parent f0e00ff018
commit 99f616e1e4
16 changed files with 153 additions and 66 deletions

View File

@@ -0,0 +1,10 @@
#pragma once
#include <execute/registers.hpp>
#include <vector>
using InterruptFn = void (*)(Execute::Registers & registers);
namespace Execute
{
std::vector<InterruptFn> GetInterrupts();
}

View File

@@ -1,4 +1,5 @@
#pragma once
#include <execute/interrupts.hpp>
#include <string>
#include <unordered_map>
@@ -9,7 +10,7 @@ namespace Execute
unsigned currentStatement;
unsigned nextStatement;
std::unordered_map<std::string, unsigned> const & labelStatementIndice;
std::vector<InterruptFn> const interrupts;
State(std::unordered_map<std::string, unsigned> const & labelStatementIndice);
};

View File

@@ -22,6 +22,11 @@ namespace Interpret
ExpectedLabel(Token::Token const & token);
};
struct ExpectedValue : public TokenError
{
ExpectedValue(Token::Token const & token);
};
struct ExpectedImmediate : public TokenError
{
ExpectedImmediate(Token::Token const & token);

View File

@@ -54,4 +54,19 @@ namespace Interpret
JumpStatement(std::string const & label);
};
struct SetStatement : Statement
{
Value firstArgument;
Value secondArgument;
void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) override;
};
struct InterruptStatement : Statement
{
Value firstArgument;
void Execute(Execute::Flags & flags, Execute::State & state, Execute::Registers & registers) override;
};
}

View File

@@ -3,7 +3,7 @@
namespace Token
{
enum class OperandType
enum class OperandType : int
{
Unknown = -1,
AddInteger = 0,
@@ -15,7 +15,9 @@ namespace Token
Jump,
LessThanInteger,
GreaterThanInteger,
EqualInteger
EqualInteger,
SetInteger,
Interrupt
};
OperandType GetOperandType(std::string const & op);