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; addi $10 $-5 %A;
subi %A $2 %B; subi %A $2 %B;

View File

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

View File

@@ -43,7 +43,6 @@ namespace Token
static Token CreateOperandToken(OperandType const operandType, int const lineNumber, int const lineColumn); 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(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 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; void DebugPrint() const;
}; };

View File

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

View File

@@ -76,19 +76,7 @@ namespace Interpret
} }
else else
{ {
switch(std::get<Token::OperandType>(tokens[operatorTokenIndex].data)) code.statements.emplace_back(ExtractStatement(operatorTokenIndex, tokens));
{
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; state = InterpreterState::FindOperand;
} }
break; break;

View File

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

View File

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

View File

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

View File

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