Remove declare and string types to prepare for preprocessor

This commit is contained in:
2020-05-22 20:33:48 +02:00
parent e7a5cfa327
commit 8b85e428f1
9 changed files with 5 additions and 43 deletions

View File

@@ -1,4 +1,4 @@
DECLARE MEMORY_SIZE $4096;
#DECLARE MEMORY_SIZE $4096;
addi $10 $-5 %A;
subi %A $2 %B;

View File

@@ -21,7 +21,6 @@ namespace Token
EqualInteger,
SetInteger,
Interrupt,
Declaration,
PushInteger,
PopInteger
};

View File

@@ -43,7 +43,6 @@ namespace Token
static Token CreateOperandToken(OperandType const operandType, int const lineNumber, int const lineColumn);
static Token CreateMemoryToken(RegisterType const registerType, int const lineNumber, int const lineColumn);
static Token CreateMemoryToken(int const value, bool isValid, int const lineNumber, int const lineColumn);
static Token CreateStringLiteralToken(std::string const & value, int const lineNumber, int const lineColumn);
void DebugPrint() const;
};

View File

@@ -10,7 +10,6 @@ namespace Token
Register,
StatementEnd,
Label,
String,
Memory
};
}

View File

@@ -76,19 +76,7 @@ namespace Interpret
}
else
{
switch(std::get<Token::OperandType>(tokens[operatorTokenIndex].data))
{
case Token::OperandType::Declaration:
{
auto const tuple = ExtractDeclaration(operatorTokenIndex, tokens);
code.declarations[std::get<0>(tuple)] = std::get<1>(tuple);
}
break;
default:
code.statements.emplace_back(ExtractStatement(operatorTokenIndex, tokens));
break;
}
state = InterpreterState::FindOperand;
}
break;

View File

@@ -308,7 +308,6 @@ namespace Interpret
case Token::OperandType::GreaterThanInteger:
case Token::OperandType::EqualInteger:
case Token::OperandType::SetInteger:
case Token::OperandType::Declaration:
return 2;
case Token::OperandType::Jump:

View File

@@ -22,7 +22,6 @@ namespace Token
{ "eqi", OperandType::EqualInteger },
{ "seti", OperandType::SetInteger },
{ "int", OperandType::Interrupt },
{ "DECLARE", OperandType::Declaration },
{ "pushi", OperandType::PushInteger},
{ "popi", OperandType::PopInteger},
};

View File

@@ -103,11 +103,6 @@ namespace Token
return Token(TokenType::Memory, value, isValid, lineNumber, lineColumn);
}
Token Token::CreateStringLiteralToken(std::string const & value, int const lineNumber, int const lineColumn)
{
return Token(TokenType::String, value.substr(1, value.size() - 2), true, lineNumber, lineColumn);
}
void Token::DebugPrint() const
{
std::putc(' ', stdout);
@@ -193,10 +188,6 @@ namespace Token
}
break;
case TokenType::String:
std::printf("STRING=\"%s\"", std::get<std::string>(data).c_str());
break;
case TokenType::Unknown:
default:
std::printf("UNKNOWN_TOKEN");

View File

@@ -100,7 +100,6 @@ namespace Token
enum class TokenizerState
{
LookForNextToken,
LookForStringEnd,
LookForTokenEnd,
};
@@ -123,10 +122,6 @@ namespace Token
switch(line[column])
{
case '"':
state = TokenizerState::LookForStringEnd;
break;
case ';':
tokens.push_back(ExtractToken(line.substr(column, 1), lineNumber, column));
break;
@@ -150,13 +145,9 @@ namespace Token
}
break;
case TokenizerState::LookForStringEnd:
if (line[column] == '"' && line[column - 1] != '\\')
{
tokens.push_back(
Token::CreateStringLiteralToken(line.substr(columnTokenStart, column - columnTokenStart), lineNumber, columnTokenStart));
state = TokenizerState::LookForNextToken;
}
default:
std::puts("DEBUG: Unhandled TokenizerState value");
break;
}
}
@@ -166,9 +157,6 @@ namespace Token
tokens.push_back(ExtractToken(line.substr(columnTokenStart, line.size()), lineNumber, columnTokenStart));
break;
case TokenizerState::LookForStringEnd:
throw MissingEndOfString(ExtractToken(line.substr(columnTokenStart, line.size()), lineNumber, columnTokenStart));
case TokenizerState::LookForNextToken:
default:
break;