Remove declare and string types to prepare for preprocessor
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -21,7 +21,6 @@ namespace Token
|
|||||||
EqualInteger,
|
EqualInteger,
|
||||||
SetInteger,
|
SetInteger,
|
||||||
Interrupt,
|
Interrupt,
|
||||||
Declaration,
|
|
||||||
PushInteger,
|
PushInteger,
|
||||||
PopInteger
|
PopInteger
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ namespace Token
|
|||||||
Register,
|
Register,
|
||||||
StatementEnd,
|
StatementEnd,
|
||||||
Label,
|
Label,
|
||||||
String,
|
|
||||||
Memory
|
Memory
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user