Update lexer for changes in avm
Added support for shorts, changed semantics around the memory allocation operations and removed CALL_STACK and JUMP_STACK.
This commit is contained in:
@@ -25,7 +25,7 @@ extern "C"
|
|||||||
|
|
||||||
#include <src/lexer.hpp>
|
#include <src/lexer.hpp>
|
||||||
|
|
||||||
static_assert(NUMBER_OF_OPCODES == 99, "ERROR: Lexer is out of date");
|
static_assert(NUMBER_OF_OPCODES == 115, "ERROR: Lexer is out of date");
|
||||||
|
|
||||||
using std::string, std::string_view;
|
using std::string, std::string_view;
|
||||||
|
|
||||||
@@ -117,18 +117,11 @@ namespace Lexer
|
|||||||
// Tokens that are fixed i.e. have no variations. This is because they have
|
// Tokens that are fixed i.e. have no variations. This is because they have
|
||||||
// no type.
|
// no type.
|
||||||
std::unordered_map<std::string, Token::Type> fixed_map = {
|
std::unordered_map<std::string, Token::Type> fixed_map = {
|
||||||
{"%CONST", Token::Type::PP_CONST},
|
{"%CONST", Token::Type::PP_CONST}, {"%USE", Token::Type::PP_USE},
|
||||||
{"%USE", Token::Type::PP_USE},
|
{"%END", Token::Type::PP_END}, {"NOOP", Token::Type::NOOP},
|
||||||
{"%END", Token::Type::PP_END},
|
{"HALT", Token::Type::HALT}, {"MDELETE", Token::Type::MDELETE},
|
||||||
{"NOOP", Token::Type::NOOP},
|
{"MSIZE", Token::Type::MSIZE}, {"JUMP.ABS", Token::Type::JUMP_ABS},
|
||||||
{"HALT", Token::Type::HALT},
|
{"CALL", Token::Type::CALL}, {"RET", Token::Type::RET},
|
||||||
{"MDELETE", Token::Type::MDELETE},
|
|
||||||
{"MSIZE", Token::Type::MSIZE},
|
|
||||||
{"JUMP.ABS", Token::Type::JUMP_ABS},
|
|
||||||
{"JUMP.STACK", Token::Type::JUMP_STACK},
|
|
||||||
{"CALL.STACK", Token::Type::CALL_STACK},
|
|
||||||
{"CALL", Token::Type::CALL},
|
|
||||||
{"RET", Token::Type::RET},
|
|
||||||
{"GLOBAL", Token::Type::GLOBAL},
|
{"GLOBAL", Token::Type::GLOBAL},
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -146,11 +139,8 @@ namespace Lexer
|
|||||||
{"POP.", Token::Type::POP, tokenise_unsigned_type},
|
{"POP.", Token::Type::POP, tokenise_unsigned_type},
|
||||||
{"MOV.", Token::Type::MOV, tokenise_unsigned_type},
|
{"MOV.", Token::Type::MOV, tokenise_unsigned_type},
|
||||||
{"DUP.", Token::Type::DUP, tokenise_unsigned_type},
|
{"DUP.", Token::Type::DUP, tokenise_unsigned_type},
|
||||||
{"MALLOC.STACK.", Token::Type::MALLOC_STACK, tokenise_unsigned_type},
|
|
||||||
{"MALLOC.", Token::Type::MALLOC, tokenise_unsigned_type},
|
{"MALLOC.", Token::Type::MALLOC, tokenise_unsigned_type},
|
||||||
{"MSET.STACK.", Token::Type::MSET_STACK, tokenise_unsigned_type},
|
|
||||||
{"MSET.", Token::Type::MSET, tokenise_unsigned_type},
|
{"MSET.", Token::Type::MSET, tokenise_unsigned_type},
|
||||||
{"MGET.STACK.", Token::Type::MGET_STACK, tokenise_unsigned_type},
|
|
||||||
{"MGET.", Token::Type::MGET, tokenise_unsigned_type},
|
{"MGET.", Token::Type::MGET, tokenise_unsigned_type},
|
||||||
{"NOT.", Token::Type::NOT, tokenise_unsigned_type},
|
{"NOT.", Token::Type::NOT, tokenise_unsigned_type},
|
||||||
{"OR.", Token::Type::OR, tokenise_unsigned_type},
|
{"OR.", Token::Type::OR, tokenise_unsigned_type},
|
||||||
@@ -473,16 +463,10 @@ namespace Lexer
|
|||||||
return "DUP";
|
return "DUP";
|
||||||
case Token::Type::MALLOC:
|
case Token::Type::MALLOC:
|
||||||
return "MALLOC";
|
return "MALLOC";
|
||||||
case Token::Type::MALLOC_STACK:
|
|
||||||
return "MALLOC_STACK";
|
|
||||||
case Token::Type::MSET:
|
case Token::Type::MSET:
|
||||||
return "MSET";
|
return "MSET";
|
||||||
case Token::Type::MSET_STACK:
|
|
||||||
return "MSET_STACK";
|
|
||||||
case Token::Type::MGET:
|
case Token::Type::MGET:
|
||||||
return "MGET";
|
return "MGET";
|
||||||
case Token::Type::MGET_STACK:
|
|
||||||
return "MGET_STACK";
|
|
||||||
case Token::Type::MDELETE:
|
case Token::Type::MDELETE:
|
||||||
return "MDELETE";
|
return "MDELETE";
|
||||||
case Token::Type::MSIZE:
|
case Token::Type::MSIZE:
|
||||||
@@ -515,14 +499,10 @@ namespace Lexer
|
|||||||
return "PRINT";
|
return "PRINT";
|
||||||
case Token::Type::JUMP_ABS:
|
case Token::Type::JUMP_ABS:
|
||||||
return "JUMP_ABS";
|
return "JUMP_ABS";
|
||||||
case Token::Type::JUMP_STACK:
|
|
||||||
return "JUMP_STACK";
|
|
||||||
case Token::Type::JUMP_IF:
|
case Token::Type::JUMP_IF:
|
||||||
return "JUMP_IF";
|
return "JUMP_IF";
|
||||||
case Token::Type::CALL:
|
case Token::Type::CALL:
|
||||||
return "CALL";
|
return "CALL";
|
||||||
case Token::Type::CALL_STACK:
|
|
||||||
return "CALL_STACK";
|
|
||||||
case Token::Type::RET:
|
case Token::Type::RET:
|
||||||
return "RET";
|
return "RET";
|
||||||
case Token::Type::SYMBOL:
|
case Token::Type::SYMBOL:
|
||||||
@@ -541,6 +521,10 @@ namespace Lexer
|
|||||||
return "BYTE";
|
return "BYTE";
|
||||||
case Token::OperandType::CHAR:
|
case Token::OperandType::CHAR:
|
||||||
return "CHAR";
|
return "CHAR";
|
||||||
|
case Token::OperandType::SHORT:
|
||||||
|
return "SHORT";
|
||||||
|
case Token::OperandType::SSHORT:
|
||||||
|
return "SSHORT";
|
||||||
case Token::OperandType::HWORD:
|
case Token::OperandType::HWORD:
|
||||||
return "HWORD";
|
return "HWORD";
|
||||||
case Token::OperandType::INT:
|
case Token::OperandType::INT:
|
||||||
|
|||||||
@@ -49,11 +49,8 @@ namespace Lexer
|
|||||||
MOV,
|
MOV,
|
||||||
DUP,
|
DUP,
|
||||||
MALLOC,
|
MALLOC,
|
||||||
MALLOC_STACK,
|
|
||||||
MSET,
|
MSET,
|
||||||
MSET_STACK,
|
|
||||||
MGET,
|
MGET,
|
||||||
MGET_STACK,
|
|
||||||
MDELETE,
|
MDELETE,
|
||||||
MSIZE,
|
MSIZE,
|
||||||
NOT,
|
NOT,
|
||||||
@@ -70,10 +67,8 @@ namespace Lexer
|
|||||||
MULT,
|
MULT,
|
||||||
PRINT,
|
PRINT,
|
||||||
JUMP_ABS,
|
JUMP_ABS,
|
||||||
JUMP_STACK,
|
|
||||||
JUMP_IF,
|
JUMP_IF,
|
||||||
CALL,
|
CALL,
|
||||||
CALL_STACK,
|
|
||||||
RET,
|
RET,
|
||||||
} type;
|
} type;
|
||||||
enum class OperandType
|
enum class OperandType
|
||||||
@@ -81,6 +76,8 @@ namespace Lexer
|
|||||||
NIL,
|
NIL,
|
||||||
BYTE,
|
BYTE,
|
||||||
CHAR,
|
CHAR,
|
||||||
|
SHORT,
|
||||||
|
SSHORT,
|
||||||
HWORD,
|
HWORD,
|
||||||
INT,
|
INT,
|
||||||
WORD,
|
WORD,
|
||||||
|
|||||||
Reference in New Issue
Block a user