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:
2024-07-07 19:23:08 +01:00
parent 192ec4df9c
commit b7d232720a
2 changed files with 12 additions and 31 deletions

View File

@@ -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:

View File

@@ -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,