Got cmds for a bunch of match processes
This commit is contained in:
parent
e6e5311a04
commit
6110fad14c
@ -20,6 +20,7 @@ using namespace dms;
|
|||||||
using namespace dms::utils;
|
using namespace dms::utils;
|
||||||
int main()
|
int main()
|
||||||
{
|
{
|
||||||
LineParser parser = LineParser("test.dms");
|
/*LineParser parser = LineParser("test.dms");
|
||||||
parser.Parse();
|
dms_state* state = parser.Parse();
|
||||||
|
state->dump();*/
|
||||||
}
|
}
|
||||||
@ -172,7 +172,34 @@
|
|||||||
<ClInclude Include="utils.h" />
|
<ClInclude Include="utils.h" />
|
||||||
<ClInclude Include="value.h" />
|
<ClInclude Include="value.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\openal32.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-audio-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-audio-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-graphics-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-graphics-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-network-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-network-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-system-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-system-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-window-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-window-d-2.dll" />
|
||||||
|
<None Include="packages.config" />
|
||||||
|
</ItemGroup>
|
||||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
<ImportGroup Label="ExtensionTargets">
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
<Import Project="..\packages\sfml-audio.redist.2.4.2.0\build\native\sfml-audio.redist.targets" Condition="Exists('..\packages\sfml-audio.redist.2.4.2.0\build\native\sfml-audio.redist.targets')" />
|
||||||
|
<Import Project="..\packages\sfml-system.redist.2.4.2.0\build\native\sfml-system.redist.targets" Condition="Exists('..\packages\sfml-system.redist.2.4.2.0\build\native\sfml-system.redist.targets')" />
|
||||||
|
<Import Project="..\packages\sfml-system.2.4.2.0\build\native\sfml-system.targets" Condition="Exists('..\packages\sfml-system.2.4.2.0\build\native\sfml-system.targets')" />
|
||||||
|
<Import Project="..\packages\sfml-audio.2.4.2.0\build\native\sfml-audio.targets" Condition="Exists('..\packages\sfml-audio.2.4.2.0\build\native\sfml-audio.targets')" />
|
||||||
</ImportGroup>
|
</ImportGroup>
|
||||||
|
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||||
|
<PropertyGroup>
|
||||||
|
<ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Error Condition="!Exists('..\packages\sfml-audio.redist.2.4.2.0\build\native\sfml-audio.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\sfml-audio.redist.2.4.2.0\build\native\sfml-audio.redist.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\sfml-system.redist.2.4.2.0\build\native\sfml-system.redist.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\sfml-system.redist.2.4.2.0\build\native\sfml-system.redist.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\sfml-system.2.4.2.0\build\native\sfml-system.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\sfml-system.2.4.2.0\build\native\sfml-system.targets'))" />
|
||||||
|
<Error Condition="!Exists('..\packages\sfml-audio.2.4.2.0\build\native\sfml-audio.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\sfml-audio.2.4.2.0\build\native\sfml-audio.targets'))" />
|
||||||
|
</Target>
|
||||||
</Project>
|
</Project>
|
||||||
@ -105,4 +105,18 @@
|
|||||||
<Filter>Header Files\DMS</Filter>
|
<Filter>Header Files\DMS</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<None Include="packages.config" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\openal32.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-audio-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-audio-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-graphics-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-graphics-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-network-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-network-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-system-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-system-d-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-window-2.dll" />
|
||||||
|
<None Include="C:\Users\rayam\Desktop\sfml\sfml-window-d-2.dll" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@ -1,2 +1,2 @@
|
|||||||
LineParser.cpp
|
DMS.cpp
|
||||||
DMS.vcxproj -> C:\Users\Ryan\source\repos\DMS\Debug\DMS.exe
|
DMS.vcxproj -> F:\VSCWorkspace\DMS\Debug\DMS.exe
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1,2 +1,2 @@
|
|||||||
PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.26.28801:TargetPlatformVersion=10.0.18362.0:
|
PlatformToolSet=v142:VCToolArchitecture=Native32Bit:VCToolsVersion=14.27.29110:TargetPlatformVersion=10.0.18362.0:
|
||||||
Debug|Win32|C:\Users\Ryan\source\repos\DMS\|
|
Debug|Win32|F:\VSCWorkspace\DMS\|
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -75,8 +75,6 @@ namespace dms {
|
|||||||
bool isBlock();
|
bool isBlock();
|
||||||
bool isBlock(blocktype bk_type);
|
bool isBlock(blocktype bk_type);
|
||||||
void tolower(std::string &str);
|
void tolower(std::string &str);
|
||||||
tokens::tokentype* expr();
|
|
||||||
tokens::tokentype* variable();
|
|
||||||
void tokenizer(dms_state* state, std::vector<tokens::token> &tok);
|
void tokenizer(dms_state* state, std::vector<tokens::token> &tok);
|
||||||
public:
|
public:
|
||||||
//Refer to streams.cpp for the match_process_CMD code.
|
//Refer to streams.cpp for the match_process_CMD code.
|
||||||
|
|||||||
@ -113,7 +113,7 @@ namespace dms {
|
|||||||
stream->next();
|
stream->next();
|
||||||
}
|
}
|
||||||
else if (stream->match(tokens::cbracketo) && start) {
|
else if (stream->match(tokens::cbracketo) && start) {
|
||||||
state->push_error(errors::error{ errors::choice_unknown,concat("Unexpected symbol ",stream->next()),true,stream->peek().line_num });
|
state->push_error(errors::error{ errors::choice_unknown,concat("Unexpected symbol ",stream->next()),true,stream->peek().line_num,current_chunk });
|
||||||
}
|
}
|
||||||
else if (stream->match(tokens::string)) {
|
else if (stream->match(tokens::string)) {
|
||||||
std::string name = stream->next().name;
|
std::string name = stream->next().name;
|
||||||
@ -139,7 +139,7 @@ namespace dms {
|
|||||||
stream->next(); // Consume
|
stream->next(); // Consume
|
||||||
}
|
}
|
||||||
else if (!stream->match(tokens::cbracketc)) {
|
else if (!stream->match(tokens::cbracketc)) {
|
||||||
state->push_error(errors::error{ errors::choice_unknown,concat("Unexpected symbol ",stream->next()),true,stream->peek().line_num });
|
state->push_error(errors::error{ errors::choice_unknown,concat("Unexpected symbol ",stream->next()),true,stream->peek().line_num,current_chunk });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
@ -151,12 +151,6 @@ namespace dms {
|
|||||||
v->nuke(); // Make sure we clean up the data
|
v->nuke(); // Make sure we clean up the data
|
||||||
delete[] v; // We didn't need it, lets clean it up!
|
delete[] v; // We didn't need it, lets clean it up!
|
||||||
}
|
}
|
||||||
/// <summary>
|
|
||||||
/// Recursively parse through function related tokens
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="stream"></param>
|
|
||||||
/// <param name="v"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
bool LineParser::match_process_function(tokenstream* stream, value* v, bool nested) {
|
bool LineParser::match_process_function(tokenstream* stream, value* v, bool nested) {
|
||||||
/*
|
/*
|
||||||
Functions should be able to handle function calls as arguments,
|
Functions should be able to handle function calls as arguments,
|
||||||
@ -204,7 +198,7 @@ namespace dms {
|
|||||||
c->opcode = codes::FUNC;
|
c->opcode = codes::FUNC;
|
||||||
std::string n = stream->next().name;
|
std::string n = stream->next().name;
|
||||||
print("FUNC ",n);
|
print("FUNC ",n);
|
||||||
c->args.push(buildValue(n)); // Set the func identifier as the first variable
|
c->args.push(buildVariable(n)); // Set the func identifier as the first variable
|
||||||
// Let's set the target
|
// Let's set the target
|
||||||
if (v != nullptr) {
|
if (v != nullptr) {
|
||||||
c->args.push(v); // Push the supplied variable
|
c->args.push(v); // Push the supplied variable
|
||||||
@ -257,10 +251,10 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
// Final match this could be a function it might also be an expression
|
// Final match this could be a function it might also be an expression
|
||||||
else if (match_process_function(&tempstream, tempval)) {
|
else if (match_process_function(&tempstream, tempval)) {
|
||||||
if (!nested) {
|
/*if (!nested) {
|
||||||
print("No nested!");
|
print("No nested!");
|
||||||
state->push_error(errors::error{ errors::nested_function,"Nested functions are not allowed in this context!",true, tempstream.peek().line_num });
|
state->push_error(errors::error{ errors::nested_function,"Nested functions are not allowed in this context!",true, tempstream.peek().line_num });
|
||||||
}
|
}*/
|
||||||
print("Nested ok!");
|
print("Nested ok!");
|
||||||
c->args.push(tempval);
|
c->args.push(tempval);
|
||||||
}
|
}
|
||||||
@ -280,26 +274,78 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
cleanup(tempval); // Cleanup
|
cleanup(tempval); // Cleanup
|
||||||
state->push_error(errors::error{ errors::badtoken,concat("Invalid symbol: ",tempstream.peek()),true, tempstream.peek().line_num});
|
state->push_error(errors::error{ errors::badtoken,concat("Invalid symbol: ",tempstream.peek()),true, tempstream.peek().line_num,current_chunk });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool LineParser::match_process_goto(tokenstream* stream) {
|
bool LineParser::match_process_goto(tokenstream* stream) {
|
||||||
|
if (stream->match(tokens::gotoo,tokens::name) || tokens::gotoo,tokens::string) {
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::GOTO;
|
||||||
|
stream->next(); // consume gotoo
|
||||||
|
if (stream->match(tokens::name)) {
|
||||||
|
c->args.push(buildVariable(stream->next().name));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c->args.push(buildValue(stream->next().name));
|
||||||
|
}
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool LineParser::match_process_jump(tokenstream* stream) {
|
bool LineParser::match_process_jump(tokenstream* stream) {
|
||||||
|
if (stream->match(tokens::jump, tokens::name) || tokens::jump, tokens::string) {
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::JUMP;
|
||||||
|
stream->next(); // consume jump
|
||||||
|
if (stream->match(tokens::name)) {
|
||||||
|
c->args.push(buildVariable(stream->next().name));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c->args.push(buildValue(stream->next().name));
|
||||||
|
}
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool LineParser::match_process_exit(tokenstream* stream) {
|
bool LineParser::match_process_exit(tokenstream* stream) {
|
||||||
|
if (stream->match(tokens::exit)) {
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::EXIT;
|
||||||
|
if (stream->match(tokens::number) || stream->match(tokens::name)) {
|
||||||
|
if(stream->match(tokens::number)){
|
||||||
|
c->args.push(buildValue(std::stod(stream->next().name)));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c->args.push(buildVariable(stream->next().name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool LineParser::match_process_label(tokenstream* stream) {
|
bool LineParser::match_process_label(tokenstream* stream) {
|
||||||
|
if (stream->match(tokens::colon, tokens::colon, tokens::name, tokens::colon, tokens::colon)) {
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::LABL;
|
||||||
|
stream->next();
|
||||||
|
stream->next();
|
||||||
|
std::string str = stream->next().name;
|
||||||
|
c->args.push(buildValue(str));
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
current_chunk->addLabel(str);
|
||||||
|
stream->next();
|
||||||
|
stream->next();
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool LineParser::match_process_IFFF(tokenstream* stream) {
|
bool LineParser::match_process_IFFF(tokenstream* stream) {
|
||||||
return false;
|
return false; // TODO finish this
|
||||||
}
|
}
|
||||||
bool LineParser::match_process_expression(tokenstream* stream, value* v) {
|
bool LineParser::match_process_expression(tokenstream* stream, value* v) {
|
||||||
return false; // Method isn't done yet, we will get an error without this!
|
return false; // Method isn't done yet, we will get an error without this!
|
||||||
|
|||||||
@ -152,11 +152,11 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
else if (data == '^') {
|
else if (data == '^') {
|
||||||
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
t_vec.push_back(token{ tokens::pow,codes::NOOP,"",line - 2 });
|
t_vec.push_back(token{ tokens::caret,codes::NOOP,"",line - 2 });
|
||||||
}
|
}
|
||||||
else if (data == '%') {
|
else if (data == '%') {
|
||||||
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
t_vec.push_back(token{ tokens::mod,codes::NOOP,"",line - 2 });
|
t_vec.push_back(token{ tokens::percent,codes::NOOP,"",line - 2 });
|
||||||
}
|
}
|
||||||
else if (data == '=') {
|
else if (data == '=') {
|
||||||
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
@ -172,7 +172,31 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
else if (data == '!') {
|
else if (data == '!') {
|
||||||
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
t_vec.push_back(token{ tokens::Not,codes::NOOP,"",line - 2 });
|
t_vec.push_back(token{ tokens::exclamation,codes::NOOP,"",line - 2 });
|
||||||
|
}
|
||||||
|
else if (data == '~') {
|
||||||
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
|
t_vec.push_back(token{ tokens::tilde,codes::NOOP,"",line - 2 });
|
||||||
|
}
|
||||||
|
else if (data == '`') {
|
||||||
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
|
t_vec.push_back(token{ tokens::backtick,codes::NOOP,"",line - 2 });
|
||||||
|
}
|
||||||
|
else if (data == '@') {
|
||||||
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
|
t_vec.push_back(token{ tokens::at,codes::NOOP,"",line - 2 });
|
||||||
|
}
|
||||||
|
else if (data == '#') {
|
||||||
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
|
t_vec.push_back(token{ tokens::pound,codes::NOOP,"",line - 2 });
|
||||||
|
}
|
||||||
|
else if (data == '$') {
|
||||||
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
|
t_vec.push_back(token{ tokens::dollar,codes::NOOP,"",line - 2 });
|
||||||
|
}
|
||||||
|
else if (data == '&') {
|
||||||
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
|
t_vec.push_back(token{ tokens::ampersand,codes::NOOP,"",line - 2 });
|
||||||
}
|
}
|
||||||
else if (data == '\t') {
|
else if (data == '\t') {
|
||||||
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
doCheck(&stream, &t_vec, line - 2, isNum, hasDec, &buffer);
|
||||||
@ -311,7 +335,7 @@ namespace dms {
|
|||||||
else {
|
else {
|
||||||
std::stringstream str;
|
std::stringstream str;
|
||||||
str << "Expected <FLAG IDENTIFIER> " << " got: " << current << temp[0];
|
str << "Expected <FLAG IDENTIFIER> " << " got: " << current << temp[0];
|
||||||
state->push_error(errors::error{ errors::badtoken,str.str(),true,line });
|
state->push_error(errors::error{ errors::badtoken,str.str(),true,line,current_chunk });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Default block
|
// Default block
|
||||||
@ -369,7 +393,7 @@ namespace dms {
|
|||||||
else {
|
else {
|
||||||
std::stringstream str;
|
std::stringstream str;
|
||||||
str << "Unexpected symbol: " << tokens[i];
|
str << "Unexpected symbol: " << tokens[i];
|
||||||
state->push_error(errors::error{ errors::badtoken,str.str(),true,line });
|
state->push_error(errors::error{ errors::badtoken,str.str(),true,line,current_chunk });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// If all went well the 'args' now has all of tha params for the method we will be working with
|
// If all went well the 'args' now has all of tha params for the method we will be working with
|
||||||
@ -378,7 +402,7 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
str << "'function' keyword expected got " << b;
|
str << "'function' keyword expected got " << b;
|
||||||
state->push_error(errors::error{ errors::badtoken, str.str(),true,line });
|
state->push_error(errors::error{ errors::badtoken, str.str(),true,line,current_chunk });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Control Handle all controls here
|
// Control Handle all controls here
|
||||||
@ -391,13 +415,15 @@ namespace dms {
|
|||||||
// This will probably be the toughest one of them all
|
// This will probably be the toughest one of them all
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Displays both with a target and without
|
|
||||||
match_process_disp(&stream);
|
|
||||||
|
|
||||||
if (current.type != tokens::tab)
|
// Displays both with a target and without
|
||||||
tabs = 0;
|
match_process_disp(&stream); // Match and process displays
|
||||||
current = stream.next();
|
match_process_label(&stream); // Match and process labels
|
||||||
|
|
||||||
|
//if (current.type != tokens::tab) // Old code for an old system...
|
||||||
|
// tabs = 0;
|
||||||
|
//current = stream.next();
|
||||||
}
|
}
|
||||||
state->chunks.insert_or_assign(current_chunk->name, current_chunk);
|
state->push_chunk(current_chunk->name, current_chunk);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -97,14 +97,6 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
tokentype* LineParser::expr() {
|
|
||||||
return new tokentype[9]{ tokens::name,tokens::number,tokens::divide,tokens::minus,tokens::mod,tokens::multiply,tokens::plus,tokens::pow ,tokens::none };
|
|
||||||
// tokens::none tells us we are at the end of the array.
|
|
||||||
}
|
|
||||||
tokentype* LineParser::variable() {
|
|
||||||
return new tokentype[7]{tokens::name,tokens::number,tokens::True,tokens::False,tokens::nil,tokens::string,tokens::none};
|
|
||||||
// tokens::none tells us we are at the end of the array.
|
|
||||||
}
|
|
||||||
bool inList(tokens::tokentype t,tokens::tokentype* list) {
|
bool inList(tokens::tokentype t,tokens::tokentype* list) {
|
||||||
size_t c = 0;
|
size_t c = 0;
|
||||||
while (list[c] != tokens::none) {
|
while (list[c] != tokens::none) {
|
||||||
@ -166,12 +158,12 @@ namespace dms {
|
|||||||
bool LineParser::createBlock(std::string bk_name, blocktype bk_type) {
|
bool LineParser::createBlock(std::string bk_name, blocktype bk_type) {
|
||||||
if (current_chunk != nullptr) {
|
if (current_chunk != nullptr) {
|
||||||
if (!state->chunks.count(current_chunk->name))
|
if (!state->chunks.count(current_chunk->name))
|
||||||
state->chunks.insert_or_assign(current_chunk->name, current_chunk);
|
state->push_chunk(current_chunk->name, current_chunk);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
std::stringstream str;
|
std::stringstream str;
|
||||||
str << "Block <" << current_chunk->name << "> already defined!";
|
str << "Block <" << current_chunk->name << "> already defined!";
|
||||||
state->push_error(errors::error{ errors::block_already_defined,str.str(),true,line });
|
state->push_error(errors::error{ errors::block_already_defined,str.str(),true,line,current_chunk });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
DMS/Nadia.ogg
Normal file
BIN
DMS/Nadia.ogg
Normal file
Binary file not shown.
@ -3,4 +3,8 @@ namespace dms {
|
|||||||
void chunk::addCmd(cmd* c) {
|
void chunk::addCmd(cmd* c) {
|
||||||
cmds.push_back(c);
|
cmds.push_back(c);
|
||||||
}
|
}
|
||||||
|
void chunk::addLabel(std::string name) {
|
||||||
|
size_t size = cmds.size(); // Get the command position for the label. This should be the command we created for the label
|
||||||
|
labels.insert_or_assign(name,size); // Here we set the name of the label so we can find it as well as the position to jump to
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <map>
|
||||||
namespace dms {
|
namespace dms {
|
||||||
enum blocktype {
|
enum blocktype {
|
||||||
bt_block,
|
bt_block,
|
||||||
@ -18,7 +19,15 @@ namespace dms {
|
|||||||
size_t pos = 0;
|
size_t pos = 0;
|
||||||
size_t line = 0;
|
size_t line = 0;
|
||||||
void addCmd(cmd* c);
|
void addCmd(cmd* c);
|
||||||
|
std::map<std::string, size_t> labels; // Each chunk contains its own label data
|
||||||
chunk(){}
|
chunk(){}
|
||||||
|
void addLabel(std::string name);
|
||||||
|
friend std::ostream& operator << (std::ostream& out, const chunk& c) {
|
||||||
|
for (size_t i = 0; i < c.cmds.size(); i++) {
|
||||||
|
out << *(c.cmds[i]) << std::endl;
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
DMS/cmd.h
14
DMS/cmd.h
@ -1,11 +1,25 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "value.h"
|
#include "value.h"
|
||||||
#include "codes.h"
|
#include "codes.h"
|
||||||
|
#include <ostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
namespace dms {
|
namespace dms {
|
||||||
struct cmd
|
struct cmd
|
||||||
{
|
{
|
||||||
dms::codes::op opcode;
|
dms::codes::op opcode;
|
||||||
dms_args args;
|
dms_args args;
|
||||||
|
friend std::ostream& operator << (std::ostream& out, const cmd& c) {
|
||||||
|
out << codes::list[c.opcode] << " ";
|
||||||
|
for (size_t i = 0; i < c.args.args.size(); i++) {
|
||||||
|
out << *c.args.args[i] << " ";
|
||||||
|
}
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
// For writing to a file
|
||||||
|
std::string toString() {
|
||||||
|
std::stringstream str;
|
||||||
|
str << opcode << args.toString() << (char)0;
|
||||||
|
return str.str();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,3 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "Codes.h"
|
#include "Codes.h"
|
||||||
const std::string dms::codes::list[] = { "NOOP","ENTR","ENAB","DISA","LOAD","VERN","USIN","STAT","DISP","ASGN","LABL","CHOI","OPTN","FORE","????","WHLE","FUNC","IFFF","ELIF","ELSE","DEFN","SKIP","COMP","INDX","JMPZ","INST","ERRO" ,"RETN" };
|
const std::string dms::codes::list[] = { "NOOP","ENTR","ENAB","DISA","LOAD","VERN","USIN","STAT","DISP","ASGN","LABL","CHOI","OPTN","FORE","????","WHLE","FUNC","IFFF","ELIF","ELSE","DEFN","SKIP","COMP","INDX","JMPZ","INST","ERRO" ,"GOTO","JUMP","RETN", "EXIT" };
|
||||||
@ -30,7 +30,10 @@ namespace dms::codes {
|
|||||||
JMPZ,
|
JMPZ,
|
||||||
INST,
|
INST,
|
||||||
ERRO,
|
ERRO,
|
||||||
RETN
|
GOTO,
|
||||||
|
JUMP,
|
||||||
|
RETN,
|
||||||
|
EXIT
|
||||||
};
|
};
|
||||||
extern const std::string list[];
|
extern const std::string list[];
|
||||||
static bool isControl(const op code) {
|
static bool isControl(const op code) {
|
||||||
|
|||||||
@ -1,10 +1,36 @@
|
|||||||
#include "dms_state.h"
|
#include "dms_state.h"
|
||||||
namespace dms {
|
namespace dms {
|
||||||
|
void dms_state::dump(errors::error err) {
|
||||||
|
std::cout << "Number of chunks: " << chunks.size();
|
||||||
|
std::ofstream outputFile("dump.bin");
|
||||||
|
for (const auto& [key, val] : chunks) {
|
||||||
|
std::cout << "Key: " << key << " Value: " << *val << '\n';
|
||||||
|
}
|
||||||
|
//If the error has a chunk then we get the data from it
|
||||||
|
if (err.current_chunk != nullptr) {
|
||||||
|
outputFile << err.current_chunk->name << ":" << std::endl << *err.current_chunk << std::endl;
|
||||||
|
}
|
||||||
|
outputFile.close();
|
||||||
|
}
|
||||||
|
void dms_state::dump() {
|
||||||
|
std::cout << "Number of chunks: " << chunks.size();
|
||||||
|
std::ofstream outputFile("dump.bin");
|
||||||
|
for (const auto& [key, val] : chunks) {
|
||||||
|
std::cout << "Key: " << key << " Value: " << *val << '\n';
|
||||||
|
}
|
||||||
|
outputFile.close();
|
||||||
|
}
|
||||||
|
void dms_state::push_chunk(std::string s, chunk* c) {
|
||||||
|
std::cout << "Pushing Chunk: " << s << std::endl;
|
||||||
|
chunks.insert_or_assign(s, c);
|
||||||
|
}
|
||||||
void dms_state::push_error(errors::error err) {
|
void dms_state::push_error(errors::error err) {
|
||||||
std::cout << err.err_msg << " On Line <" << err.linenum << ">" << std::endl;
|
std::cout << err.err_msg << " On Line <" << err.linenum << ">" << std::endl;
|
||||||
if(err.crash)
|
if (err.crash) {
|
||||||
|
dump(err);
|
||||||
std::exit(err.code);
|
std::exit(err.code);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
void dms_state::push_warning(errors::error err) {
|
void dms_state::push_warning(errors::error err) {
|
||||||
err.crash = false; // Force code to not crash then push the error
|
err.crash = false; // Force code to not crash then push the error
|
||||||
if(enables.count("warnings"))
|
if(enables.count("warnings"))
|
||||||
|
|||||||
@ -1,18 +1,22 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include "errors.h"
|
#include "errors.h"
|
||||||
#include "chunk.h"
|
#include "chunk.h"
|
||||||
|
#include <fstream>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <unordered_map>
|
#include <map>
|
||||||
namespace dms {
|
namespace dms {
|
||||||
class dms_state
|
class dms_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
void dump(errors::error err);
|
||||||
|
void dump();
|
||||||
void push_error(errors::error err);
|
void push_error(errors::error err);
|
||||||
void push_warning(errors::error err);
|
void push_warning(errors::error err);
|
||||||
|
void push_chunk(std::string s, chunk* c);
|
||||||
double version=1.0;
|
double version=1.0;
|
||||||
std::unordered_map<std::string, chunk*> chunks;
|
std::map<std::string, chunk*> chunks;
|
||||||
std::string entry = "start";
|
std::string entry = "start";
|
||||||
std::unordered_map<std::string, bool> enables;
|
std::map<std::string, bool> enables;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
0
DMS/dump.bin
Normal file
0
DMS/dump.bin
Normal file
371
DMS/dump.txt
371
DMS/dump.txt
@ -19,169 +19,155 @@ Line <7>USIN flag
|
|||||||
Line <7>NOOP name extendedDefine
|
Line <7>NOOP name extendedDefine
|
||||||
Line <7>NOOP newline
|
Line <7>NOOP newline
|
||||||
Line <8>NOOP newline
|
Line <8>NOOP newline
|
||||||
Line <9>NOOP bracketo
|
|
||||||
Line <9>NOOP name main
|
|
||||||
Line <9>NOOP bracketc
|
|
||||||
Line <9>NOOP cbracketo
|
|
||||||
Line <9>NOOP newline
|
Line <9>NOOP newline
|
||||||
Line <10>NOOP name Ryan
|
Line <10>NOOP bracketo
|
||||||
Line <10>NOOP colon
|
Line <10>NOOP name main
|
||||||
Line <10>NOOP string This works!
|
Line <10>NOOP bracketc
|
||||||
|
Line <10>NOOP cbracketo
|
||||||
Line <10>NOOP newline
|
Line <10>NOOP newline
|
||||||
Line <11>NOOP name DEBUG
|
Line <11>NOOP name Ryan
|
||||||
Line <11>NOOP string What's up
|
Line <11>NOOP colon
|
||||||
|
Line <11>NOOP string This works!
|
||||||
Line <11>NOOP newline
|
Line <11>NOOP newline
|
||||||
Line <12>NOOP name Ryan
|
Line <12>NOOP name DEBUG
|
||||||
Line <12>NOOP colon
|
Line <12>NOOP string What's up
|
||||||
Line <12>NOOP cbracketo
|
|
||||||
Line <12>NOOP newline
|
Line <12>NOOP newline
|
||||||
Line <13>NOOP name speed
|
Line <13>NOOP name Ryan
|
||||||
Line <13>NOOP number 100
|
Line <13>NOOP colon
|
||||||
Line <13>NOOP mod
|
Line <13>NOOP cbracketo
|
||||||
Line <13>NOOP newline
|
Line <13>NOOP newline
|
||||||
Line <13>NOOP name calm
|
Line <14>NOOP name speed
|
||||||
Line <13>NOOP string Hello Bob,
|
Line <14>NOOP number 100
|
||||||
Line <13>NOOP newline
|
Line <14>NOOP mod
|
||||||
Line <14>NOOP name wait
|
|
||||||
Line <14>NOOP number 0.455
|
|
||||||
Line <14>NOOP newline
|
Line <14>NOOP newline
|
||||||
Line <15>NOOP name excited
|
Line <14>NOOP name calm
|
||||||
Line <15>NOOP string how are you doing?
|
Line <14>NOOP string Hello Bob,
|
||||||
|
Line <14>NOOP newline
|
||||||
|
Line <15>NOOP name wait
|
||||||
|
Line <15>NOOP number 0.455
|
||||||
Line <15>NOOP newline
|
Line <15>NOOP newline
|
||||||
|
Line <16>NOOP name excited
|
||||||
|
Line <16>NOOP string how are you doing?
|
||||||
Line <16>NOOP newline
|
Line <16>NOOP newline
|
||||||
Line <17>NOOP cbracketc
|
|
||||||
Line <17>NOOP newline
|
Line <17>NOOP newline
|
||||||
|
Line <18>NOOP cbracketc
|
||||||
Line <18>NOOP newline
|
Line <18>NOOP newline
|
||||||
Line <19>NOOP name tester
|
|
||||||
Line <19>NOOP equal
|
|
||||||
Line <19>NOOP string Hello
|
|
||||||
Line <19>NOOP newline
|
Line <19>NOOP newline
|
||||||
Line <20>NOOP name food
|
Line <20>NOOP name tester
|
||||||
Line <20>NOOP equal
|
Line <20>NOOP equal
|
||||||
Line <20>NOOP number 3
|
Line <20>NOOP string Hello
|
||||||
Line <20>NOOP newline
|
Line <20>NOOP newline
|
||||||
Line <21>NOOP name a
|
Line <21>NOOP name food
|
||||||
Line <21>NOOP equal
|
Line <21>NOOP equal
|
||||||
Line <21>NOOP name list
|
Line <21>NOOP number 3
|
||||||
Line <21>NOOP bracketo
|
|
||||||
Line <21>NOOP number 1
|
|
||||||
Line <21>NOOP bracketc
|
|
||||||
Line <21>NOOP newline
|
Line <21>NOOP newline
|
||||||
|
Line <22>NOOP name a
|
||||||
|
Line <22>NOOP equal
|
||||||
|
Line <22>NOOP name list
|
||||||
|
Line <22>NOOP bracketo
|
||||||
|
Line <22>NOOP number 1
|
||||||
|
Line <22>NOOP bracketc
|
||||||
Line <22>NOOP newline
|
Line <22>NOOP newline
|
||||||
Line <23>IFFF control
|
|
||||||
Line <23>NOOP name statment
|
|
||||||
Line <23>NOOP cbracketo
|
|
||||||
Line <23>NOOP newline
|
Line <23>NOOP newline
|
||||||
Line <24>NOOP string test
|
Line <24>IFFF control
|
||||||
|
Line <24>NOOP name statment
|
||||||
|
Line <24>NOOP cbracketo
|
||||||
Line <24>NOOP newline
|
Line <24>NOOP newline
|
||||||
Line <25>NOOP cbracketc
|
Line <25>NOOP string test
|
||||||
Line <25>ELIF control
|
|
||||||
Line <25>NOOP name statement
|
|
||||||
Line <25>NOOP cbracketo
|
|
||||||
Line <25>NOOP newline
|
Line <25>NOOP newline
|
||||||
Line <26>NOOP string test
|
Line <26>NOOP cbracketc
|
||||||
|
Line <26>ELIF control
|
||||||
|
Line <26>NOOP name statement
|
||||||
|
Line <26>NOOP cbracketo
|
||||||
Line <26>NOOP newline
|
Line <26>NOOP newline
|
||||||
Line <27>NOOP cbracketc
|
Line <27>NOOP string test
|
||||||
Line <27>IFFF control
|
|
||||||
Line <27>NOOP name statement
|
|
||||||
Line <27>NOOP cbracketo
|
|
||||||
Line <27>NOOP newline
|
Line <27>NOOP newline
|
||||||
Line <28>NOOP string test
|
Line <28>NOOP cbracketc
|
||||||
|
Line <28>IFFF control
|
||||||
|
Line <28>NOOP name statement
|
||||||
|
Line <28>NOOP cbracketo
|
||||||
Line <28>NOOP newline
|
Line <28>NOOP newline
|
||||||
Line <29>NOOP string test
|
Line <29>NOOP string test
|
||||||
Line <29>NOOP newline
|
Line <29>NOOP newline
|
||||||
Line <30>IFFF control
|
Line <30>NOOP string test
|
||||||
Line <30>NOOP name statement
|
|
||||||
Line <30>NOOP cbracketo
|
|
||||||
Line <30>NOOP newline
|
Line <30>NOOP newline
|
||||||
Line <31>NOOP string test
|
Line <31>IFFF control
|
||||||
|
Line <31>NOOP name statement
|
||||||
|
Line <31>NOOP cbracketo
|
||||||
Line <31>NOOP newline
|
Line <31>NOOP newline
|
||||||
Line <32>NOOP cbracketc
|
Line <32>NOOP string test
|
||||||
Line <32>ELSE control
|
|
||||||
Line <32>NOOP cbracketo
|
|
||||||
Line <32>NOOP newline
|
Line <32>NOOP newline
|
||||||
Line <33>NOOP string test
|
Line <33>NOOP cbracketc
|
||||||
|
Line <33>ELSE control
|
||||||
|
Line <33>NOOP cbracketo
|
||||||
Line <33>NOOP newline
|
Line <33>NOOP newline
|
||||||
Line <34>NOOP cbracketc
|
Line <34>NOOP string test
|
||||||
Line <34>NOOP newline
|
Line <34>NOOP newline
|
||||||
Line <35>NOOP cbracketc
|
Line <35>NOOP cbracketc
|
||||||
Line <35>ELIF control
|
|
||||||
Line <35>NOOP name statement
|
|
||||||
Line <35>NOOP cbracketo
|
|
||||||
Line <35>NOOP newline
|
Line <35>NOOP newline
|
||||||
Line <36>NOOP string test
|
Line <36>NOOP cbracketc
|
||||||
|
Line <36>ELIF control
|
||||||
|
Line <36>NOOP name statement
|
||||||
|
Line <36>NOOP cbracketo
|
||||||
Line <36>NOOP newline
|
Line <36>NOOP newline
|
||||||
Line <37>NOOP cbracketc
|
Line <37>NOOP string test
|
||||||
Line <37>ELSE control
|
|
||||||
Line <37>NOOP cbracketo
|
|
||||||
Line <37>NOOP newline
|
Line <37>NOOP newline
|
||||||
Line <38>NOOP string test
|
Line <38>NOOP cbracketc
|
||||||
|
Line <38>ELSE control
|
||||||
|
Line <38>NOOP cbracketo
|
||||||
Line <38>NOOP newline
|
Line <38>NOOP newline
|
||||||
Line <39>NOOP cbracketc
|
Line <39>NOOP string test
|
||||||
Line <39>NOOP newline
|
Line <39>NOOP newline
|
||||||
|
Line <40>NOOP cbracketc
|
||||||
Line <40>NOOP newline
|
Line <40>NOOP newline
|
||||||
Line <41>NOOP gotoo
|
|
||||||
Line <41>NOOP string somewhere
|
|
||||||
Line <41>NOOP newline
|
Line <41>NOOP newline
|
||||||
Line <42>NOOP jump
|
Line <42>NOOP gotoo
|
||||||
Line <42>NOOP string overhere
|
Line <42>NOOP string somewhere
|
||||||
Line <42>NOOP newline
|
Line <42>NOOP newline
|
||||||
|
Line <43>NOOP jump
|
||||||
|
Line <43>NOOP string overhere
|
||||||
Line <43>NOOP newline
|
Line <43>NOOP newline
|
||||||
Line <44>NOOP name hungry
|
|
||||||
Line <44>NOOP equal
|
|
||||||
Line <44>NOOP parao
|
|
||||||
Line <44>NOOP minus
|
|
||||||
Line <44>NOOP number 2
|
|
||||||
Line <44>NOOP plus
|
|
||||||
Line <44>NOOP number 4
|
|
||||||
Line <44>NOOP minus
|
|
||||||
Line <44>NOOP parao
|
|
||||||
Line <44>NOOP parao
|
|
||||||
Line <44>NOOP number 5
|
|
||||||
Line <44>NOOP multiply
|
|
||||||
Line <44>NOOP number 5
|
|
||||||
Line <44>NOOP parac
|
|
||||||
Line <44>NOOP divide
|
|
||||||
Line <44>NOOP name sqrt
|
|
||||||
Line <44>NOOP parao
|
|
||||||
Line <44>NOOP number 144
|
|
||||||
Line <44>NOOP plus
|
|
||||||
Line <44>NOOP number 5
|
|
||||||
Line <44>NOOP parac
|
|
||||||
Line <44>NOOP parac
|
|
||||||
Line <44>NOOP parac
|
|
||||||
Line <44>NOOP pow
|
|
||||||
Line <44>NOOP number 2
|
|
||||||
Line <44>NOOP multiply
|
|
||||||
Line <44>NOOP number 2
|
|
||||||
Line <44>NOOP plus
|
|
||||||
Line <44>NOOP number 2
|
|
||||||
Line <44>NOOP newline
|
Line <44>NOOP newline
|
||||||
Line <45>NOOP name list
|
Line <45>NOOP name hungry
|
||||||
Line <45>NOOP bracketo
|
|
||||||
Line <45>NOOP number 1
|
|
||||||
Line <45>NOOP bracketc
|
|
||||||
Line <45>NOOP equal
|
Line <45>NOOP equal
|
||||||
Line <45>NOOP string Hello
|
Line <45>NOOP parao
|
||||||
|
Line <45>NOOP minus
|
||||||
|
Line <45>NOOP number 2
|
||||||
|
Line <45>NOOP plus
|
||||||
|
Line <45>NOOP number 4
|
||||||
|
Line <45>NOOP minus
|
||||||
|
Line <45>NOOP parao
|
||||||
|
Line <45>NOOP parao
|
||||||
|
Line <45>NOOP number 5
|
||||||
|
Line <45>NOOP multiply
|
||||||
|
Line <45>NOOP number 5
|
||||||
|
Line <45>NOOP parac
|
||||||
|
Line <45>NOOP divide
|
||||||
|
Line <45>NOOP name sqrt
|
||||||
|
Line <45>NOOP parao
|
||||||
|
Line <45>NOOP number 144
|
||||||
|
Line <45>NOOP plus
|
||||||
|
Line <45>NOOP number 5
|
||||||
|
Line <45>NOOP parac
|
||||||
|
Line <45>NOOP parac
|
||||||
|
Line <45>NOOP parac
|
||||||
|
Line <45>NOOP pow
|
||||||
|
Line <45>NOOP number 2
|
||||||
|
Line <45>NOOP multiply
|
||||||
|
Line <45>NOOP number 2
|
||||||
|
Line <45>NOOP plus
|
||||||
|
Line <45>NOOP number 2
|
||||||
Line <45>NOOP newline
|
Line <45>NOOP newline
|
||||||
Line <46>NOOP name var1
|
Line <46>NOOP name list
|
||||||
Line <46>NOOP number
|
Line <46>NOOP bracketo
|
||||||
Line <46>NOOP equal
|
|
||||||
Line <46>NOOP name func
|
|
||||||
Line <46>NOOP parao
|
|
||||||
Line <46>NOOP number 1
|
Line <46>NOOP number 1
|
||||||
Line <46>NOOP seperator
|
Line <46>NOOP bracketc
|
||||||
Line <46>NOOP string string
|
Line <46>NOOP equal
|
||||||
Line <46>NOOP seperator
|
Line <46>NOOP string Hello
|
||||||
Line <46>NOOP number 2
|
|
||||||
Line <46>NOOP plus
|
|
||||||
Line <46>NOOP number 5
|
|
||||||
Line <46>NOOP parac
|
|
||||||
Line <46>NOOP newline
|
Line <46>NOOP newline
|
||||||
Line <47>NOOP name a
|
Line <47>NOOP name var1
|
||||||
|
Line <47>NOOP number
|
||||||
Line <47>NOOP equal
|
Line <47>NOOP equal
|
||||||
Line <47>NOOP number 100
|
|
||||||
Line <47>NOOP plus
|
|
||||||
Line <47>NOOP name func
|
Line <47>NOOP name func
|
||||||
Line <47>NOOP parao
|
Line <47>NOOP parao
|
||||||
Line <47>NOOP number 1
|
Line <47>NOOP number 1
|
||||||
@ -192,9 +178,11 @@ Line <47>NOOP number 2
|
|||||||
Line <47>NOOP plus
|
Line <47>NOOP plus
|
||||||
Line <47>NOOP number 5
|
Line <47>NOOP number 5
|
||||||
Line <47>NOOP parac
|
Line <47>NOOP parac
|
||||||
Line <47>NOOP plus
|
|
||||||
Line <47>NOOP number 100
|
|
||||||
Line <47>NOOP newline
|
Line <47>NOOP newline
|
||||||
|
Line <48>NOOP name a
|
||||||
|
Line <48>NOOP equal
|
||||||
|
Line <48>NOOP number 100
|
||||||
|
Line <48>NOOP plus
|
||||||
Line <48>NOOP name func
|
Line <48>NOOP name func
|
||||||
Line <48>NOOP parao
|
Line <48>NOOP parao
|
||||||
Line <48>NOOP number 1
|
Line <48>NOOP number 1
|
||||||
@ -205,105 +193,122 @@ Line <48>NOOP number 2
|
|||||||
Line <48>NOOP plus
|
Line <48>NOOP plus
|
||||||
Line <48>NOOP number 5
|
Line <48>NOOP number 5
|
||||||
Line <48>NOOP parac
|
Line <48>NOOP parac
|
||||||
|
Line <48>NOOP plus
|
||||||
|
Line <48>NOOP number 100
|
||||||
Line <48>NOOP newline
|
Line <48>NOOP newline
|
||||||
Line <49>NOOP label label
|
Line <49>NOOP name func
|
||||||
|
Line <49>NOOP parao
|
||||||
|
Line <49>NOOP number 1
|
||||||
|
Line <49>NOOP seperator
|
||||||
|
Line <49>NOOP string string
|
||||||
|
Line <49>NOOP seperator
|
||||||
|
Line <49>NOOP number 2
|
||||||
|
Line <49>NOOP plus
|
||||||
|
Line <49>NOOP number 5
|
||||||
|
Line <49>NOOP parac
|
||||||
Line <49>NOOP newline
|
Line <49>NOOP newline
|
||||||
|
Line <50>NOOP label label
|
||||||
Line <50>NOOP newline
|
Line <50>NOOP newline
|
||||||
Line <51>NOOP newline
|
Line <51>NOOP newline
|
||||||
Line <52>CHOI control
|
|
||||||
Line <52>NOOP string Pick one:
|
|
||||||
Line <52>NOOP cbracketo
|
|
||||||
Line <52>NOOP newline
|
Line <52>NOOP newline
|
||||||
Line <53>NOOP string first
|
Line <53>CHOI control
|
||||||
Line <53>NOOP name func
|
Line <53>NOOP string Pick one:
|
||||||
Line <53>NOOP parao
|
Line <53>NOOP cbracketo
|
||||||
Line <53>NOOP number 1
|
|
||||||
Line <53>NOOP seperator
|
|
||||||
Line <53>NOOP number 2
|
|
||||||
Line <53>NOOP seperator
|
|
||||||
Line <53>NOOP number 3
|
|
||||||
Line <53>NOOP parac
|
|
||||||
Line <53>NOOP newline
|
Line <53>NOOP newline
|
||||||
Line <54>NOOP string second
|
Line <54>NOOP string first
|
||||||
Line <54>NOOP name func
|
Line <54>NOOP name func
|
||||||
Line <54>NOOP parao
|
Line <54>NOOP parao
|
||||||
Line <54>NOOP true true
|
Line <54>NOOP number 1
|
||||||
Line <54>NOOP seperator
|
Line <54>NOOP seperator
|
||||||
Line <54>NOOP false false
|
Line <54>NOOP number 2
|
||||||
Line <54>NOOP seperator
|
Line <54>NOOP seperator
|
||||||
Line <54>NOOP name func
|
Line <54>NOOP number 3
|
||||||
Line <54>NOOP parao
|
|
||||||
Line <54>NOOP string heehee
|
|
||||||
Line <54>NOOP parac
|
|
||||||
Line <54>NOOP parac
|
Line <54>NOOP parac
|
||||||
Line <54>NOOP newline
|
Line <54>NOOP newline
|
||||||
Line <55>NOOP string third
|
Line <55>NOOP string second
|
||||||
Line <55>NOOP name func
|
Line <55>NOOP name func
|
||||||
Line <55>NOOP parao
|
Line <55>NOOP parao
|
||||||
Line <55>NOOP string hehe
|
Line <55>NOOP true true
|
||||||
|
Line <55>NOOP seperator
|
||||||
|
Line <55>NOOP false false
|
||||||
|
Line <55>NOOP seperator
|
||||||
|
Line <55>NOOP name func
|
||||||
|
Line <55>NOOP parao
|
||||||
|
Line <55>NOOP string heehee
|
||||||
|
Line <55>NOOP parac
|
||||||
Line <55>NOOP parac
|
Line <55>NOOP parac
|
||||||
Line <55>NOOP newline
|
Line <55>NOOP newline
|
||||||
Line <56>NOOP string forth
|
Line <56>NOOP string third
|
||||||
Line <56>NOOP name func
|
Line <56>NOOP name func
|
||||||
Line <56>NOOP parao
|
Line <56>NOOP parao
|
||||||
Line <56>NOOP string 1
|
Line <56>NOOP string hehe
|
||||||
Line <56>NOOP seperator
|
|
||||||
Line <56>NOOP number 2
|
|
||||||
Line <56>NOOP seperator
|
|
||||||
Line <56>NOOP false false
|
|
||||||
Line <56>NOOP parac
|
Line <56>NOOP parac
|
||||||
Line <56>NOOP newline
|
Line <56>NOOP newline
|
||||||
Line <57>NOOP string fifth
|
Line <57>NOOP string forth
|
||||||
Line <57>NOOP gotoo
|
Line <57>NOOP name func
|
||||||
Line <57>NOOP string here
|
Line <57>NOOP parao
|
||||||
|
Line <57>NOOP string 1
|
||||||
|
Line <57>NOOP seperator
|
||||||
|
Line <57>NOOP number 2
|
||||||
|
Line <57>NOOP seperator
|
||||||
|
Line <57>NOOP false false
|
||||||
|
Line <57>NOOP parac
|
||||||
Line <57>NOOP newline
|
Line <57>NOOP newline
|
||||||
Line <58>NOOP string sixth
|
Line <58>NOOP string fifth
|
||||||
Line <58>NOOP gotoo
|
Line <58>NOOP gotoo
|
||||||
Line <58>NOOP name name
|
Line <58>NOOP string here
|
||||||
Line <58>NOOP newline
|
Line <58>NOOP newline
|
||||||
Line <59>NOOP string sevinth
|
Line <59>NOOP string sixth
|
||||||
Line <59>NOOP jump
|
Line <59>NOOP gotoo
|
||||||
Line <59>NOOP string there
|
Line <59>NOOP name name
|
||||||
Line <59>NOOP newline
|
Line <59>NOOP newline
|
||||||
Line <60>NOOP string eight
|
Line <60>NOOP string sevinth
|
||||||
Line <60>NOOP jump
|
Line <60>NOOP jump
|
||||||
Line <60>NOOP name name
|
Line <60>NOOP string there
|
||||||
Line <60>NOOP newline
|
Line <60>NOOP newline
|
||||||
Line <61>NOOP string nine
|
Line <61>NOOP string eight
|
||||||
Line <61>NOOP name exit
|
Line <61>NOOP jump
|
||||||
|
Line <61>NOOP name name
|
||||||
Line <61>NOOP newline
|
Line <61>NOOP newline
|
||||||
Line <62>NOOP cbracketc
|
Line <62>NOOP string nine
|
||||||
|
Line <62>NOOP name exit
|
||||||
Line <62>NOOP newline
|
Line <62>NOOP newline
|
||||||
Line <63>NOOP cbracketc
|
Line <63>NOOP string ten
|
||||||
|
Line <63>NOOP exit
|
||||||
|
Line <63>NOOP number 0
|
||||||
Line <63>NOOP newline
|
Line <63>NOOP newline
|
||||||
|
Line <64>NOOP cbracketc
|
||||||
Line <64>NOOP newline
|
Line <64>NOOP newline
|
||||||
|
Line <65>NOOP cbracketc
|
||||||
Line <65>NOOP newline
|
Line <65>NOOP newline
|
||||||
Line <66>NOOP newline
|
Line <66>NOOP newline
|
||||||
Line <67>NOOP bracketo
|
|
||||||
Line <67>NOOP name Bob
|
|
||||||
Line <67>NOOP colon
|
|
||||||
Line <67>NOOP name char
|
|
||||||
Line <67>NOOP bracketc
|
|
||||||
Line <67>NOOP newline
|
Line <67>NOOP newline
|
||||||
Line <68>NOOP name age
|
|
||||||
Line <68>NOOP equal
|
|
||||||
Line <68>NOOP number 24
|
|
||||||
Line <68>NOOP newline
|
Line <68>NOOP newline
|
||||||
Line <69>NOOP name money
|
Line <69>NOOP bracketo
|
||||||
Line <69>NOOP equal
|
Line <69>NOOP name Bob
|
||||||
Line <69>NOOP number 100
|
Line <69>NOOP colon
|
||||||
|
Line <69>NOOP name char
|
||||||
|
Line <69>NOOP bracketc
|
||||||
Line <69>NOOP newline
|
Line <69>NOOP newline
|
||||||
|
Line <70>NOOP name age
|
||||||
|
Line <70>NOOP equal
|
||||||
|
Line <70>NOOP number 24
|
||||||
Line <70>NOOP newline
|
Line <70>NOOP newline
|
||||||
Line <71>NOOP bracketo
|
Line <71>NOOP name money
|
||||||
Line <71>NOOP name newblock
|
Line <71>NOOP equal
|
||||||
Line <71>NOOP colon
|
Line <71>NOOP number 100
|
||||||
Line <71>NOOP name function
|
|
||||||
Line <71>NOOP parao
|
|
||||||
Line <71>NOOP parac
|
|
||||||
Line <71>NOOP bracketc
|
|
||||||
Line <71>NOOP newline
|
Line <71>NOOP newline
|
||||||
Line <72>NOOP string Test #2
|
|
||||||
Line <72>NOOP newline
|
Line <72>NOOP newline
|
||||||
Line <73>NOOP string Does it parse this part properly?
|
Line <73>NOOP bracketo
|
||||||
|
Line <73>NOOP name newblock
|
||||||
|
Line <73>NOOP colon
|
||||||
|
Line <73>NOOP name function
|
||||||
|
Line <73>NOOP parao
|
||||||
|
Line <73>NOOP parac
|
||||||
|
Line <73>NOOP bracketc
|
||||||
Line <73>NOOP newline
|
Line <73>NOOP newline
|
||||||
Line <75>NOOP eof
|
Line <74>NOOP string Test #2
|
||||||
|
Line <74>NOOP newline
|
||||||
|
Line <75>NOOP string Does it parse this part properly?
|
||||||
|
Line <75>NOOP newline
|
||||||
|
Line <77>NOOP eof
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include "chunk.h"
|
||||||
namespace dms::errors {
|
namespace dms::errors {
|
||||||
enum errortype {
|
enum errortype {
|
||||||
unknown,
|
unknown,
|
||||||
@ -17,5 +18,6 @@ namespace dms::errors {
|
|||||||
std::string err_msg;
|
std::string err_msg;
|
||||||
bool crash = true; // Set if you would like the state to exit
|
bool crash = true; // Set if you would like the state to exit
|
||||||
size_t linenum = 0;
|
size_t linenum = 0;
|
||||||
|
chunk* current_chunk = nullptr;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
7
DMS/packages.config
Normal file
7
DMS/packages.config
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<packages>
|
||||||
|
<package id="sfml-audio" version="2.4.2.0" targetFramework="native" />
|
||||||
|
<package id="sfml-audio.redist" version="2.4.2.0" targetFramework="native" />
|
||||||
|
<package id="sfml-system" version="2.4.2.0" targetFramework="native" />
|
||||||
|
<package id="sfml-system.redist" version="2.4.2.0" targetFramework="native" />
|
||||||
|
</packages>
|
||||||
@ -6,6 +6,7 @@ disable omniscient
|
|||||||
version 1.2
|
version 1.2
|
||||||
using extendedDefine
|
using extendedDefine
|
||||||
|
|
||||||
|
|
||||||
[main] {
|
[main] {
|
||||||
Ryan: "This works!"
|
Ryan: "This works!"
|
||||||
DEBUG "What's up" // Debug lines are removed when debug mode is disabled
|
DEBUG "What's up" // Debug lines are removed when debug mode is disabled
|
||||||
@ -59,6 +60,7 @@ using extendedDefine
|
|||||||
"sevinth" jump "there"
|
"sevinth" jump "there"
|
||||||
"eight" jump name
|
"eight" jump name
|
||||||
"nine" exit
|
"nine" exit
|
||||||
|
"ten" exit 0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
14
DMS/token.h
14
DMS/token.h
@ -21,8 +21,8 @@ namespace dms::tokens {
|
|||||||
minus,
|
minus,
|
||||||
multiply,
|
multiply,
|
||||||
divide,
|
divide,
|
||||||
pow,
|
caret,
|
||||||
mod,
|
percent,
|
||||||
equal,
|
equal,
|
||||||
colon,
|
colon,
|
||||||
control,
|
control,
|
||||||
@ -30,7 +30,7 @@ namespace dms::tokens {
|
|||||||
False,
|
False,
|
||||||
Or,
|
Or,
|
||||||
And,
|
And,
|
||||||
Not,
|
exclamation,
|
||||||
For,
|
For,
|
||||||
label,
|
label,
|
||||||
newline,
|
newline,
|
||||||
@ -40,6 +40,14 @@ namespace dms::tokens {
|
|||||||
gotoo,
|
gotoo,
|
||||||
jump,
|
jump,
|
||||||
exit,
|
exit,
|
||||||
|
// Other token types
|
||||||
|
tilde,
|
||||||
|
backtick,
|
||||||
|
at,
|
||||||
|
pound,
|
||||||
|
dollar,
|
||||||
|
ampersand,
|
||||||
|
|
||||||
nil
|
nil
|
||||||
};//stream, t_vec, line, isNum, buffer
|
};//stream, t_vec, line, isNum, buffer
|
||||||
struct token {
|
struct token {
|
||||||
|
|||||||
22
DMS/value.h
22
DMS/value.h
@ -60,25 +60,26 @@ namespace dms {
|
|||||||
std::string toString() const;
|
std::string toString() const;
|
||||||
friend std::ostream& operator << (std::ostream& out, const value& c) {
|
friend std::ostream& operator << (std::ostream& out, const value& c) {
|
||||||
if (c.type == string) {
|
if (c.type == string) {
|
||||||
out << c.s->getValue();
|
out << (char)c.type << c.s->getValue() << (char)0;
|
||||||
}
|
}
|
||||||
else if (c.type == number) {
|
else if (c.type == number) {
|
||||||
out << c.n->getValue();
|
out << (char)c.type << c.n->getValue();
|
||||||
}
|
}
|
||||||
else if (c.type == nil) {
|
else if (c.type == nil) {
|
||||||
out << "nil";
|
out << (char)c.type << "nil";
|
||||||
}
|
}
|
||||||
else if (c.type == boolean) {
|
else if (c.type == boolean) {
|
||||||
out << c.b->getValue();
|
out << (char)c.type << c.b->getValue();
|
||||||
}
|
}
|
||||||
else if (c.type == env) {
|
else if (c.type == env) {
|
||||||
out << "Env: " << c;
|
out << (char)c.type << "Env: " << c;
|
||||||
}
|
}
|
||||||
else if (c.type == custom) {
|
else if (c.type == custom) {
|
||||||
out << "Custom Data: " << c;
|
out << (char)c.type << "Custom Data: " << c;
|
||||||
}
|
}
|
||||||
|
// Internal kinda
|
||||||
else if (c.type == datatypes::variable) {
|
else if (c.type == datatypes::variable) {
|
||||||
out << c.s->getValue(); // Do the lookup
|
out << (char)c.type << c.s->getValue(); // Do the lookup
|
||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
};
|
};
|
||||||
@ -103,6 +104,13 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
std::string toString() {
|
||||||
|
std::stringstream str;
|
||||||
|
for (size_t i = 0; i < args.size(); i++) {
|
||||||
|
str << *args[i];
|
||||||
|
}
|
||||||
|
return str.str();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
struct dms_env
|
struct dms_env
|
||||||
{
|
{
|
||||||
|
|||||||
BIN
Debug/DMS.exe
BIN
Debug/DMS.exe
Binary file not shown.
BIN
Debug/DMS.ilk
BIN
Debug/DMS.ilk
Binary file not shown.
BIN
Debug/DMS.pdb
BIN
Debug/DMS.pdb
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user