diff --git a/DMS/DMS.vcxproj b/DMS/DMS.vcxproj
index 0ca3c8f..d8d205e 100644
--- a/DMS/DMS.vcxproj
+++ b/DMS/DMS.vcxproj
@@ -125,8 +125,6 @@
false
Default
false
- Full
- Speed
Console
diff --git a/DMS/LineParser.h b/DMS/LineParser.h
index a5ca101..1905706 100644
--- a/DMS/LineParser.h
+++ b/DMS/LineParser.h
@@ -18,6 +18,8 @@
namespace dms {
struct tokenstream {
+ tokenstream();
+ tokenstream(std::vector*);
std::vector tokens;
size_t pos = 0;
std::stack spos;
@@ -30,7 +32,6 @@ namespace dms {
tokens::token peek();
tokens::token last();
std::vector next(tokens::tokentype tk);
- bool match(codes::op t1 = codes::NOOP);
bool match(tokens::tokentype t1 = tokens::none, tokens::tokentype t2 = tokens::none, tokens::tokentype t3 = tokens::none, tokens::tokentype t4 = tokens::none, tokens::tokentype t5 = tokens::none, tokens::tokentype t6 = tokens::none, tokens::tokentype t7 = tokens::none, tokens::tokentype t8 = tokens::none, tokens::tokentype t9 = tokens::none, tokens::tokentype t10 = tokens::none, tokens::tokentype t11 = tokens::none, tokens::tokentype t12 = tokens::none);
bool match(tokens::tokentype* t1 = nullptr, tokens::tokentype* t2 = nullptr, tokens::tokentype* t3 = nullptr, tokens::tokentype* t4 = nullptr, tokens::tokentype* t5 = nullptr, tokens::tokentype* t6 = nullptr, tokens::tokentype* t7 = nullptr, tokens::tokentype* t8 = nullptr, tokens::tokentype* t9 = nullptr, tokens::tokentype* t10 = nullptr, tokens::tokentype* t11 = nullptr, tokens::tokentype* t12 = nullptr);
bool hasScope(size_t tabs);
@@ -49,6 +50,7 @@ namespace dms {
};
class LineParser
{
+ bool stop = false;
std::string fn;
chunk* current_chunk = nullptr;
std::string chunk_name;
@@ -61,6 +63,7 @@ namespace dms {
dms_state* state = nullptr;
void doCheck(passer* stream, std::vector* t_vec, size_t line, bool& isNum, bool& hasDec, std::vector* buffer);
void _Parse(tokenstream* stream);
+ void ParseLoop(tokenstream* stream);
std::stack lastCall;
// Match Process Code
bool match_process_debug(tokenstream* stream);
@@ -72,6 +75,8 @@ namespace dms {
bool match_process_exit(tokenstream* stream);
bool match_process_expression(tokenstream* stream, value& v);
bool match_process_IFFF(tokenstream* stream);
+ bool match_process_ELIF(tokenstream* stream,std::string);
+ bool match_process_ELSE(tokenstream* stream,std::string);
bool match_process_assignment(tokenstream* stream);
bool match_process_list(tokenstream* stream, value& v);
bool match_process_wait(tokenstream* stream);
@@ -80,7 +85,6 @@ namespace dms {
bool match_process_return(tokenstream* stream);
bool match_process_condition(tokenstream* stream, value& v);
bool match_process_andor(tokenstream* stream,value& v);
- bool match_process_if(tokenstream* stream);
// Build
void buildGoto(std::string g, bool v = false);
@@ -91,6 +95,8 @@ namespace dms {
void buildWait(double w);
// Utils
+ std::string random_string(std::size_t length);
+
void badSymbol(errors::errortype err, tokenstream* stream);
void badSymbol(tokenstream* stream);
void badSymbol();
diff --git a/DMS/LineParserBuilds.cpp b/DMS/LineParserBuilds.cpp
index 6914837..cceec42 100644
--- a/DMS/LineParserBuilds.cpp
+++ b/DMS/LineParserBuilds.cpp
@@ -33,6 +33,7 @@ namespace dms {
c->args.push(value(l));
current_chunk->addCmd(c);
current_chunk->addLabel(l);
+ utils::debug("Building Label: ",l);
}
void LineParser::buildSpeed(double s) {
cmd* c = new cmd;
diff --git a/DMS/LineParserMatchProcess.cpp b/DMS/LineParserMatchProcess.cpp
index 3713d3e..01ba63e 100644
--- a/DMS/LineParserMatchProcess.cpp
+++ b/DMS/LineParserMatchProcess.cpp
@@ -4,12 +4,15 @@ using namespace dms::utils;
// TODO: process if elseif else statements, for loops and while loops
namespace dms {
bool LineParser::match_process_standard(tokenstream* stream, value& v) {
+ //utils::debug(stream->peek());
+ if (stream->peek().type == tokens::none) {
+ return false;
+ }
if (stream->match(tokens::parao)) {
std::vector toks = stream->next(tokens::parao, tokens::parac);
- //toks.pop_back(); // Remove the ')'
+ toks.pop_back(); // Remove the ')'
toks.push_back(tokens::token{tokens::newline,codes::NOOP,"",stream->peek().line_num});
- tokenstream tempstream;
- tempstream.init(&toks);
+ tokenstream tempstream(&toks);
value var(datatypes::variable);
if (match_process_standard(&tempstream, var)) {
v.set(var.s);
@@ -22,7 +25,8 @@ namespace dms {
}
return true;
}
- else if (match_process_andor(stream, v)) {
+ if (match_process_andor(stream, v)) {
+ match_process_condition(stream, v);
return true;
}
if (match_process_expression(stream, v)) {
@@ -85,6 +89,7 @@ namespace dms {
return true;
}
else if (stream->match(tokens::newline)) {
+ stream->next();
return match_process_standard(stream,v);
}
return false;
@@ -192,8 +197,7 @@ namespace dms {
token start = stream->peek();
token ancor = start;
std::vector t = stream->next(tokens::cbracketo, tokens::cbracketc);
- tokenstream tempstream;
- tempstream.init(&t);
+ tokenstream tempstream(&t);
value ref = value(datatypes::variable);
value length = value();
value dict = value();
@@ -631,9 +635,10 @@ namespace dms {
}
// Already we have built: FUNC name val
// Next we add arguments this is where things get interesting
- tokenstream tempstream;
// This is a balanced consuming method (()(()))
std::vector t = stream->next(tokens::parao, tokens::parac); // Consume and get tokens
+ //t.pop_back();
+ tokenstream tempstream(&t);
if (t.size() == 1) { // No arg function!
current_chunk->addCmd(c);
return true;
@@ -702,6 +707,7 @@ namespace dms {
badSymbol(&tempstream);
}
}
+
}
else if (stream->match(tokens::name,tokens::dot,tokens::name,tokens::parao)) {
cmd* c = new cmd;
@@ -719,9 +725,10 @@ namespace dms {
}
// Already we have built: FUNC name val
// Next we add arguments this is where things get interesting
- tokenstream tempstream;
// This is a balanced consuming method (()(()))
std::vector t = stream->next(tokens::parao, tokens::parac); // Consume and get tokens
+ t.pop_back();
+ tokenstream tempstream(&t);
if (t.size() == 1) { // No arg function!
current_chunk->addCmd(c);
return true;
@@ -750,16 +757,14 @@ namespace dms {
else if (tempstream.match(tokens::newline)) {
tempstream.next();
}
- else if (tempstream.match(tokens::parac)) {
- tempstream.next();
- current_chunk->addCmd(c); // We push this onto the chunk after all dependants if any have been handled
- //lastCall.pop();
- return true;
- }
else {
badSymbol(&tempstream);
}
}
+ tempstream.next();
+ current_chunk->addCmd(c); // We push this onto the chunk after all dependants if any have been handled
+ //lastCall.pop();
+ return true;
}
return false;
}
@@ -779,11 +784,10 @@ namespace dms {
bool LineParser::match_process_index(tokenstream* stream, value& v, bool leftside) {
if (stream->match(tokens::name,tokens::bracketo)) {
std::string name = stream->next().name;
- std::vector tok = stream->next(tokens::bracketo, tokens::bracketc);
- tok.pop_back(); // Remove the last element since its a ']'
- tok.push_back(token{ tokens::newline,codes::NOOP,"",tok[0].line_num });
- tokenstream tempstream; // As usual the tokens are balanced match to [...] where the contents of tok = ...
- tempstream.init(&tok);
+ std::vector toks = stream->next(tokens::bracketo, tokens::bracketc);
+ toks.pop_back(); // Remove the last element since its a ']'
+ toks.push_back(token{ tokens::newline,codes::NOOP,"",toks[0].line_num });
+ tokenstream tempstream(&toks); // As usual the tokens are balanced match to [...] where the contents of tok = ...
value tempval = value(datatypes::variable);
cmd* c = new cmd;
if (leftside) {
@@ -867,11 +871,93 @@ namespace dms {
// We match a condition, or anything that is non nil/false
// God controls are from a time past... I could refactor, but I'm lazy and would have to change a lot of old code... So we will deal with controls
- if (stream->match(tokens::name) && stream->peek().name == "if") {
- utils::debug("Let's process an if");
+ if (stream->match(tokens::name,tokens::parao) && stream->peek().name == "if") {
+ stream->next();
+ std::vector ts = stream->next(tokens::parao, tokens::parac);
+ ts.pop_back();
+ tokenstream tmpstream(&ts);
+ value cmp(datatypes::variable);
+ if (match_process_standard(&tmpstream,cmp)) {
+ std::string ifend = std::string("IFE_") + random_string(4);
+ std::string next = std::string("IFF_") + random_string(4);
+ if (stream->match(tokens::cbracketo)) {
+ std::vector toks = stream->next(tokens::cbracketo, tokens::cbracketc);
+ toks.pop_back();
+ tokenstream tempstream(&toks);
+ cmd* c = new cmd;
+ c->opcode = codes::IFFF;
+ c->args.push(cmp);
+ c->args.push(value(next));
+ current_chunk->addCmd(c);
+ ParseLoop(&tempstream);
+ buildGoto(ifend);
+ buildLabel(next);
+ if (match_process_ELIF(stream,ifend)) {
+ utils::debug("here");
+ }
+ else if (match_process_ELSE(stream,ifend)) {
+ utils::debug("here");
+ }
+ buildLabel(ifend);
+ // We keep trying to match else if/else until nothing is left
+ return true;
+ }
+ }
+ else {
+ badSymbol(stream);
+ }
}
return false; // TODO finish this
}
+ bool LineParser::match_process_ELSE(tokenstream* stream, std::string ifend) {
+ if (stream->match(tokens::name, tokens::cbracketo) && stream->peek().name == "else") {
+ stream->next();
+ std::vector ts = stream->next(tokens::cbracketo, tokens::cbracketc);
+ ts.pop_back();
+ tokenstream tempstream(&ts);
+ ParseLoop(&tempstream);
+ return true;
+ }
+ return false;
+ }
+ bool LineParser::match_process_ELIF(tokenstream* stream, std::string ifend) {
+ if (stream->match(tokens::name, tokens::parao) && stream->peek().name == "elseif") {
+ stream->next();
+ std::vector ts = stream->next(tokens::parao, tokens::parac);
+ ts.pop_back();
+ tokenstream tmpstream(&ts);
+ value cmp(datatypes::variable);
+ //buildLabel(iff);
+ if (match_process_standard(&tmpstream, cmp)) {
+ std::string next = std::string("IFF_") + random_string(4);
+ if (stream->match(tokens::cbracketo)) {
+ std::vector toks = stream->next(tokens::cbracketo, tokens::cbracketc);
+ toks.pop_back();
+ tokenstream tempstream(&toks);
+ cmd* c = new cmd;
+ c->opcode = codes::IFFF;
+ c->args.push(cmp);
+ c->args.push(value(next));
+ current_chunk->addCmd(c);
+ ParseLoop(&tempstream);
+ buildGoto(ifend);
+ buildLabel(next);
+ if (match_process_ELIF(stream, ifend)) {
+ utils::debug("here");
+ }
+ else if (match_process_ELSE(stream, ifend)) {
+ utils::debug("here");
+ }
+ // We keep trying to match else if/else until nothing is left
+ return true;
+ }
+ }
+ else {
+ badSymbol(stream);
+ }
+ }
+ return false;
+ }
bool LineParser::match_process_wait(tokenstream* stream) {
if (stream->match(tokens::name, tokens::number)) {
@@ -910,9 +996,8 @@ namespace dms {
while (stream->peek().type != tokens::none) {
debugInvoker(stream);
if (stream->match(tokens::parao)) {
- tokenstream temp;
auto ts = stream->next(tokens::parao, tokens::parac);
- temp.init(&ts); // Balanced match!
+ tokenstream temp(&ts);
value tmpvalue = value(datatypes::variable);
if (match_process_expression(&temp, tmpvalue)) {
if (left.isNil())
@@ -1050,6 +1135,7 @@ namespace dms {
left = wv;
}
}
+ return stream->restore(lastcmd, current_chunk); // Always return false and restores the position in stream!
}
else {
return stream->restore(lastcmd, current_chunk); // Always return false and restores the position in stream!
diff --git a/DMS/LineParserParse.cpp b/DMS/LineParserParse.cpp
index f1ab222..fd1f21b 100644
--- a/DMS/LineParserParse.cpp
+++ b/DMS/LineParserParse.cpp
@@ -246,7 +246,6 @@ namespace dms {
if ((data == ' ' || data == '(') && !isStr) { // tokens end with a space
std::string str = stream.processBuffer(buffer);
- utils::debug("> ",str);
tolower(str);
if (str == "enable") {
t_vec.push_back(token{ tokens::flag,codes::ENAB,"",line });
@@ -317,6 +316,9 @@ namespace dms {
tokenDump(&t_vec);
// Tokens build let's parse
tokenizer(state, t_vec);
+ if (stop) {
+ state->stop = true;
+ }
if (isFirst) {
state->init();
}
@@ -340,19 +342,15 @@ namespace dms {
outputFile.close();
}
}
- void LineParser::_Parse(tokenstream* stream) {
+ void LineParser::ParseLoop(tokenstream* stream) {
+ if (stop) return;
token current = stream->next();
- createBlock("$INIT", blocktype::bt_block);
cmd* flagcmd = new cmd;
- if (state->isEnabled("debugging")) {
- cmd* c = new cmd;
- c->opcode = codes::FILE;
- c->args.push(value(fn));
- current_chunk->addCmd(c);
- }
- while (stream->peek().type != tokens::eof) {
+ value nil;
+ while (stream->peek().type != tokens::none) {
+ if (stop) return;
debugInvoker(stream);
- //utils::print(current);
+ //utils::debug(current);
//utils::print("[flags]");
if (current.type == tokens::flag) {
temp = stream->next(tokens::newline);
@@ -413,7 +411,7 @@ namespace dms {
}
}
// Default block
- if (stream->match(tokens::newline,tokens::bracketo, tokens::name, tokens::bracketc,tokens::newline)) {
+ if (stream->match(tokens::newline, tokens::bracketo, tokens::name, tokens::bracketc, tokens::newline)) {
stream->next();
stream->next();
std::string name = stream->next().name;
@@ -469,7 +467,7 @@ namespace dms {
std::stringstream str;
str << "Unexpected symbol: " << tokens[i];
state->push_error(errors::error{ errors::badtoken,str.str(),true,line,current_chunk });
-
+
return;
}
}
@@ -480,7 +478,7 @@ namespace dms {
else {
str << "'function' keyword expected got " << b;
state->push_error(errors::error{ errors::badtoken, str.str(),true,line,current_chunk });
-
+
return;
}
}
@@ -492,12 +490,11 @@ namespace dms {
//utils::print("[disp]");
match_process_disp(stream); // Match and process dialogue
//utils::print("[label]");
- if (stream->match(tokens::newline,tokens::label)) { // Match and process labels
+ if (stream->match(tokens::newline, tokens::label)) { // Match and process labels
stream->next();
buildLabel(stream->next().name);
}
//utils::print("[func]");
- value nil;
match_process_function(stream, nil); // Naked Function
//utils::print("[assn]");
match_process_assignment(stream);
@@ -513,6 +510,18 @@ namespace dms {
match_process_jump(stream);
current = stream->next();
}
+ }
+ void LineParser::_Parse(tokenstream* stream) {
+ if (stop) return;
+ createBlock("$INIT", blocktype::bt_block);
+ if (state->isEnabled("debugging")) {
+ cmd* c = new cmd;
+ c->opcode = codes::FILE;
+ c->args.push(value(fn));
+ current_chunk->addCmd(c);
+ }
+ ParseLoop(stream);
+ if (stop) return;
createBlock("$END", blocktype::bt_block);// Runs code that ensures that last user block is processed into the chunks array. Yes, I could have simply added in the lines of code at the end, but I didn't want to rewrite code again!
}
}
\ No newline at end of file
diff --git a/DMS/LineParserUtils.cpp b/DMS/LineParserUtils.cpp
index 5352fdb..de4d281 100644
--- a/DMS/LineParserUtils.cpp
+++ b/DMS/LineParserUtils.cpp
@@ -1,4 +1,5 @@
#include "LineParser.h"
+#include
using namespace dms::tokens;
using namespace dms::utils;
namespace dms {
@@ -70,6 +71,10 @@ namespace dms {
return token{ tokentype::none,codes::NOOP,"EOS",0 };
return this->tokens[pos];
}
+ tokenstream::tokenstream() {}
+ tokenstream::tokenstream(std::vector* stream) {
+ this->tokens = *stream;
+ }
bool tokenstream::hasScope(size_t tabs) {
return false;
}
@@ -111,6 +116,24 @@ namespace dms {
return std::string(buf.begin(), buf.end());
}
+ std::string LineParser::random_string(std::size_t length)
+ {
+ const std::string CHARACTERS = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
+
+ std::random_device random_device;
+ std::mt19937 generator(random_device());
+ std::uniform_int_distribution<> distribution(0, CHARACTERS.size() - 1);
+
+ std::string random_string;
+
+ for (std::size_t i = 0; i < length; ++i)
+ {
+ random_string += CHARACTERS[distribution(generator)];
+ }
+
+ return random_string;
+ }
+
bool LineParser::isBlock() {
return isBlock(bt_block); // Default block type
}
@@ -123,6 +146,9 @@ namespace dms {
bool tokenstream::match(tokens::tokentype t1, tokens::tokentype t2, tokens::tokentype t3, tokens::tokentype t4, tokens::tokentype t5, tokens::tokentype t6, tokens::tokentype t7, tokens::tokentype t8, tokens::tokentype t9, tokens::tokentype t10, tokens::tokentype t11, tokens::tokentype t12) {
tokens::tokentype types[12] = { t1,t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12 };
for (size_t i = 0; i < 12; i++) {
+ //std::cout << this->tokens.size() << " " << pos + i << std::endl;
+ if (this->tokens.size() == pos + i && types[i] != tokens::none)
+ return false;
if (types[i] == tokens::none)
return true;
if (this->tokens[pos+i].type != types[i])
@@ -196,12 +222,15 @@ namespace dms {
}
void LineParser::badSymbol(errors::errortype err,tokenstream* stream) {
state->push_error(errors::error{ err,concat("Unexpected symbol '",stream->next().toString(),"'"),true,stream->peek().line_num,current_chunk });
+ stop = true;
}
void LineParser::badSymbol(tokenstream* stream) {
state->push_error(errors::error{ errors::unknown,concat("Unexpected symbol '",stream->peek().toString(),"'"),true,stream->next().line_num,current_chunk });
+ stop = true;
}
void LineParser::badSymbol() {
state->push_error(errors::error{ errors::unknown,concat("Unexpected symbol '",_stream->peek().toString(),"'"),true,_stream->next().line_num,current_chunk });
+ stop = true;
}
void LineParser::debugInvoker(tokenstream* stream) {
if (state->isEnabled("debugging") && stream->peek().type != tokens::newline) {
@@ -267,8 +296,7 @@ namespace dms {
return true;
}
void LineParser::tokenizer(dms_state* state,std::vector &toks) {
- tokenstream stream;
- stream.init(&toks);
+ tokenstream stream(&toks);
_stream = &stream;
this->state = state; // Grab the pointer to the state and store it within the parser object
_Parse(&stream);
diff --git a/DMS/dms_state_interpret.cpp b/DMS/dms_state_interpret.cpp
index 6e094e3..c603d43 100644
--- a/DMS/dms_state_interpret.cpp
+++ b/DMS/dms_state_interpret.cpp
@@ -143,7 +143,7 @@ namespace dms {
while (!stop || !halt) {
c = cmds[pos++];
code = c->opcode;
- //print("(",pos,")> ",*c);
+ //debug("(",pos,")> ",*c);
//wait();
switch (code)
{
@@ -184,6 +184,18 @@ namespace dms {
}
return true;
break;
+ case IFFF:
+ {
+ value cmp = c->args.args[0].resolve(this);
+ value gt = c->args.args[1].resolve(this);
+ if (cmp.type == datatypes::boolean || cmp.isNil()) {
+ if (!cmp.b || cmp.isNil()) {
+ pos = seek(gt.getPrintable(), cmds, LABL, pos);
+ debug("> set pos: ", pos);
+ }
+ }
+ break;
+ }
case GOTO:
{
value labl = c->args.args[0];
diff --git a/DMS/dump.bin b/DMS/dump.bin
index e6ed8d0..1e9b9cb 100644
Binary files a/DMS/dump.bin and b/DMS/dump.bin differ
diff --git a/DMS/dump.txt b/DMS/dump.txt
index 133f529..b7bfdce 100644
--- a/DMS/dump.txt
+++ b/DMS/dump.txt
@@ -39,153 +39,228 @@ Line <12> name main
Line <12> bracketc ]
Line <12> newline
Line <12> newline
-Line <13> name a
+Line <13> name a1
Line <13> equal =
Line <13> number 10
Line <13> newline
Line <13> newline
-Line <14> name b
+Line <14> name a2
Line <14> equal =
-Line <14> number 15
+Line <14> number 10
Line <14> newline
Line <14> newline
-Line <15> name print
-Line <15> parao (
-Line <15> name a
+Line <15> name a3
Line <15> equal =
-Line <15> equal =
-Line <15> name b
-Line <15> or
-Line <15> parao (
-Line <15> name a
-Line <15> not !
-Line <15> equal =
-Line <15> name b
-Line <15> and
-Line <15> name a
-Line <15> equal =
-Line <15> equal =
-Line <15> name a
-Line <15> parac )
-Line <15> or
-Line <15> name a
-Line <15> anglebracketC >
-Line <15> name b
-Line <15> parac )
+Line <15> number 10
Line <15> newline
Line <15> newline
-Line <16> name if
-Line <16> parao (
-Line <16> name a
+Line <16> name b1
Line <16> equal =
-Line <16> equal =
-Line <16> name b
-Line <16> parac )
-Line <16> cbracketo {
+Line <16> number 15
Line <16> newline
Line <16> newline
+Line <17> name b2
+Line <17> equal =
+Line <17> number 15
Line <17> newline
Line <17> newline
-Line <18> cbracketc }
+Line <18> name b3
+Line <18> equal =
+Line <18> number 15
Line <18> newline
Line <18> newline
Line <19> newline
+Line <19> newline
+Line <20> name print
+Line <20> parao (
+Line <20> name a1
+Line <20> equal =
+Line <20> equal =
+Line <20> name b1
+Line <20> or
+Line <20> parao (
+Line <20> name a2
+Line <20> not !
+Line <20> equal =
+Line <20> name b2
+Line <20> and
+Line <20> name a3
+Line <20> equal =
+Line <20> equal =
+Line <20> name a3
+Line <20> parac )
+Line <20> or
+Line <20> name a3
+Line <20> anglebracketC >
+Line <20> name b3
+Line <20> parac )
Line <20> newline
Line <20> newline
Line <21> newline
+Line <21> newline
+Line <22> name if
+Line <22> parao (
+Line <22> name a
+Line <22> not !
+Line <22> equal =
+Line <22> name b
+Line <22> parac )
+Line <22> cbracketo {
Line <22> newline
Line <22> newline
+Line <23> name print
+Line <23> parao (
+Line <23> string Doing a test!
+Line <23> parac )
Line <23> newline
Line <23> newline
+Line <24> name if
+Line <24> parao (
+Line <24> name a
+Line <24> equal =
+Line <24> equal =
+Line <24> name b
+Line <24> parac )
+Line <24> cbracketo {
Line <24> newline
+Line <24> newline
+Line <25> name print
+Line <25> parao (
+Line <25> string Doing more tests!
+Line <25> parac )
Line <25> newline
Line <25> newline
+Line <26> cbracketc }
Line <26> newline
+Line <26> newline
+Line <27> cbracketc }
+Line <27> name elseif
+Line <27> parao (
+Line <27> name a1
+Line <27> not !
+Line <27> equal =
+Line <27> number 10
+Line <27> parac )
+Line <27> cbracketo {
Line <27> newline
Line <27> newline
+Line <28> name print
+Line <28> parao (
+Line <28> string Does this work?
+Line <28> parac )
Line <28> newline
+Line <28> newline
+Line <29> cbracketc }
+Line <29> name else
+Line <29> cbracketo {
Line <29> newline
Line <29> newline
+Line <30> name print
+Line <30> parao (
+Line <30> string This is an else!
+Line <30> parac )
Line <30> newline
+Line <30> newline
+Line <31> cbracketc }
Line <31> newline
Line <31> newline
-Line <32> bracketo [
-Line <32> name Bob
-Line <32> colon :
-Line <32> name char
-Line <32> bracketc ]
-Line <32> newline
Line <32> newline
Line <33> newline
+Line <33> newline
Line <34> newline
Line <35> newline
-Line <36> name unknown
-Line <36> equal =
-Line <36> string Some Random Guy
+Line <35> newline
Line <36> newline
Line <36> newline
-Line <37> name age
-Line <37> equal =
-Line <37> number 0.24
Line <37> newline
-Line <37> newline
-Line <38> name money
-Line <38> equal =
-Line <38> number 100
Line <38> newline
Line <38> newline
-Line <39> name excited
-Line <39> colon :
-Line <39> string path/to/file
-Line <39> newline
Line <39> newline
Line <40> newline
Line <40> newline
-Line <41> bracketo [
-Line <41> name test1
-Line <41> colon :
-Line <41> name function
-Line <41> parao (
-Line <41> parac )
-Line <41> bracketc ]
Line <41> newline
-Line <41> newline
-Line <42> string Inside a function!
Line <42> newline
Line <42> newline
Line <43> newline
Line <44> newline
+Line <44> newline
+Line <45> bracketo [
+Line <45> name Bob
+Line <45> colon :
+Line <45> name char
+Line <45> bracketc ]
Line <45> newline
Line <45> newline
-Line <46> bracketo [
-Line <46> name newblock
-Line <46> colon :
-Line <46> name function
-Line <46> parao (
-Line <46> name a
-Line <46> seperator ,
-Line <46> name b
-Line <46> seperator ,
-Line <46> name c
-Line <46> parac )
-Line <46> bracketc ]
Line <46> newline
-Line <46> newline
-Line <47> string Func Arguments: a = `a`, b = `b`, c = `c`
Line <47> newline
-Line <47> newline
-Line <48> string Time to return
Line <48> newline
-Line <48> newline
-Line <49> ret
-Line <49> name a
-Line <49> plus +
-Line <49> name b
-Line <49> plus +
-Line <49> name c
+Line <49> name unknown
+Line <49> equal =
+Line <49> string Some Random Guy
Line <49> newline
Line <49> newline
-Line <49> eof
+Line <50> name age
+Line <50> equal =
+Line <50> number 0.24
+Line <50> newline
+Line <50> newline
+Line <51> name money
+Line <51> equal =
+Line <51> number 100
+Line <51> newline
+Line <51> newline
+Line <52> name excited
+Line <52> colon :
+Line <52> string path/to/file
+Line <52> newline
+Line <52> newline
+Line <53> newline
+Line <53> newline
+Line <54> bracketo [
+Line <54> name test1
+Line <54> colon :
+Line <54> name function
+Line <54> parao (
+Line <54> parac )
+Line <54> bracketc ]
+Line <54> newline
+Line <54> newline
+Line <55> string Inside a function!
+Line <55> newline
+Line <55> newline
+Line <56> newline
+Line <57> newline
+Line <58> newline
+Line <58> newline
+Line <59> bracketo [
+Line <59> name newblock
+Line <59> colon :
+Line <59> name function
+Line <59> parao (
+Line <59> name a
+Line <59> seperator ,
+Line <59> name b
+Line <59> seperator ,
+Line <59> name c
+Line <59> parac )
+Line <59> bracketc ]
+Line <59> newline
+Line <59> newline
+Line <60> string Func Arguments: a = `a`, b = `b`, c = `c`
+Line <60> newline
+Line <60> newline
+Line <61> string Time to return
+Line <61> newline
+Line <61> newline
+Line <62> ret
+Line <62> name a
+Line <62> plus +
+Line <62> name b
+Line <62> plus +
+Line <62> name c
+Line <62> newline
+Line <62> newline
+Line <62> eof
Line <1> newline
Line <1> newline
Line <1> bracketo [
@@ -264,16 +339,6 @@ Line <15> newline
Line <15> newline
Line <16> string Testing...
Line <16> newline
-Line <17> name d
-Line <17> equal =
-Line <17> parao (
-Line <17> number 100
-Line <17> plus +
-Line <17> name b
-Line <17> parac )
-Line <17> divide /
-Line <17> name c
-Line <17> newline
Line <17> newline
Line <18> name e
Line <18> equal =
diff --git a/DMS/loadtest.dms b/DMS/loadtest.dms
index ee34156..d17cddc 100644
--- a/DMS/loadtest.dms
+++ b/DMS/loadtest.dms
@@ -14,7 +14,7 @@
[step:function(a,b,c)]
"Testing..." // testing
- d = (100 + b) / c
+ //d = (100 + b) / c
e = "somestring"
e = nil
g = false
diff --git a/DMS/test.dms b/DMS/test.dms
index fc54720..d09c8f6 100644
--- a/DMS/test.dms
+++ b/DMS/test.dms
@@ -10,11 +10,24 @@ loadfile "loadtest.dms"
version 0.2
using extendedDefine
[main]
- a = 10
- b = 15
- print(a==b or (a!=b and a==a) or a>b)
+ a1 = 10
+ a2 = 10
+ a3 = 10
+ b1 = 15
+ b2 = 15
+ b3 = 15
+
+ print(a1==b1 or (a2!=b2 and a3==a3) or a3>b3)
+
if(a==b){
-
+ print("Doing a test!")
+ if(a!=b){
+ print("Doing more tests!")
+ }
+ } elseif (a1==10) {
+ print("Does this work?")
+ } else {
+ print("This is an else!")
}
// 0 + (1 * 0) + 0