implemented, grouping, if's, not
This commit is contained in:
parent
3f501d4cad
commit
60b8198842
@ -85,6 +85,7 @@ namespace dms {
|
|||||||
bool match_process_return(tokenstream* stream);
|
bool match_process_return(tokenstream* stream);
|
||||||
bool match_process_condition(tokenstream* stream, value& v);
|
bool match_process_condition(tokenstream* stream, value& v);
|
||||||
bool match_process_andor(tokenstream* stream,value& v);
|
bool match_process_andor(tokenstream* stream,value& v);
|
||||||
|
bool match_process_scope(tokenstream* stream);
|
||||||
|
|
||||||
// Build
|
// Build
|
||||||
void buildGoto(std::string g, bool v = false);
|
void buildGoto(std::string g, bool v = false);
|
||||||
@ -97,6 +98,7 @@ namespace dms {
|
|||||||
// Utils
|
// Utils
|
||||||
std::string random_string(std::size_t length);
|
std::string random_string(std::size_t length);
|
||||||
|
|
||||||
|
bool notBalanced(std::vector<tokens::token> ts, size_t last_line, tokenstream* stream, std::string o, std::string c);
|
||||||
void badSymbol(errors::errortype err, tokenstream* stream);
|
void badSymbol(errors::errortype err, tokenstream* stream);
|
||||||
void badSymbol(tokenstream* stream);
|
void badSymbol(tokenstream* stream);
|
||||||
void badSymbol();
|
void badSymbol();
|
||||||
|
|||||||
@ -3,6 +3,7 @@ namespace dms {
|
|||||||
void LineParser::buildGoto(std::string g, bool v) {
|
void LineParser::buildGoto(std::string g, bool v) {
|
||||||
cmd* c = new cmd;
|
cmd* c = new cmd;
|
||||||
c->opcode = codes::GOTO;
|
c->opcode = codes::GOTO;
|
||||||
|
//utils::debug("Building Goto: ",g);
|
||||||
if (v) {
|
if (v) {
|
||||||
c->args.push(value(g,datatypes::variable));
|
c->args.push(value(g,datatypes::variable));
|
||||||
}
|
}
|
||||||
@ -28,6 +29,7 @@ namespace dms {
|
|||||||
current_chunk->addCmd(c);
|
current_chunk->addCmd(c);
|
||||||
}
|
}
|
||||||
void LineParser::buildLabel(std::string l) {
|
void LineParser::buildLabel(std::string l) {
|
||||||
|
//utils::debug("Building Label: ", l);
|
||||||
cmd* c = new cmd;
|
cmd* c = new cmd;
|
||||||
c->opcode = codes::LABL;
|
c->opcode = codes::LABL;
|
||||||
c->args.push(value(l));
|
c->args.push(value(l));
|
||||||
|
|||||||
@ -8,8 +8,55 @@ namespace dms {
|
|||||||
if (stream->peek().type == tokens::none) {
|
if (stream->peek().type == tokens::none) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
//!something
|
||||||
|
if (stream->match(exclamation)) {
|
||||||
|
stream->next(); // Consume the token
|
||||||
|
// Within the standard we always get passed a valid value, We need to pass a new value to a recursive call to standard then pass through
|
||||||
|
if (stream->match(name)) {
|
||||||
|
v = value(stream->next().name, variable);
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::KNOT;
|
||||||
|
c->args.push(v);
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (stream->match(parao)) {
|
||||||
|
size_t last_line = stream->peek().line_num;
|
||||||
|
std::vector<tokens::token> toks = stream->next(tokens::parao, tokens::parac);
|
||||||
|
if (notBalanced(toks, last_line, stream, "(", ")"))
|
||||||
|
return false;
|
||||||
|
toks.pop_back(); // Remove the ')'
|
||||||
|
tokenstream tempstream(&toks);
|
||||||
|
value var(variable);
|
||||||
|
if (match_process_standard(&tempstream,var)) {
|
||||||
|
value assn = value(datatypes::variable); // The variable that we will be setting stuff to
|
||||||
|
stream->next(); // Consume the equal
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::ASGN;
|
||||||
|
c->args.push(assn);
|
||||||
|
c->args.push(var);
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
|
||||||
|
c = new cmd;
|
||||||
|
c->opcode = codes::KNOT;
|
||||||
|
c->args.push(assn);
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
v.set(assn.s);
|
||||||
|
v.type = variable;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
stop = true;
|
||||||
|
state->push_error(errors::error{ errors::unknown,concat("Unexpected symbol '",stream->next().toString(), "' near '!' \"Not\" can only be used on a varaible or a group!"),true,stream->peek().line_num,current_chunk });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (stream->match(tokens::parao)) {
|
if (stream->match(tokens::parao)) {
|
||||||
|
size_t last_line = stream->peek().line_num;
|
||||||
std::vector<tokens::token> toks = stream->next(tokens::parao, tokens::parac);
|
std::vector<tokens::token> toks = stream->next(tokens::parao, tokens::parac);
|
||||||
|
if (notBalanced(toks, last_line, stream, "(", ")"))
|
||||||
|
return false;
|
||||||
toks.pop_back(); // Remove the ')'
|
toks.pop_back(); // Remove the ')'
|
||||||
toks.push_back(tokens::token{tokens::newline,codes::NOOP,"",stream->peek().line_num});
|
toks.push_back(tokens::token{tokens::newline,codes::NOOP,"",stream->peek().line_num});
|
||||||
tokenstream tempstream(&toks);
|
tokenstream tempstream(&toks);
|
||||||
@ -164,7 +211,7 @@ namespace dms {
|
|||||||
stream->next();
|
stream->next();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
return false;
|
return match_process_andor(stream,v);
|
||||||
}
|
}
|
||||||
// So if all is good we continue here
|
// So if all is good we continue here
|
||||||
value right = value(datatypes::variable);
|
value right = value(datatypes::variable);
|
||||||
@ -196,7 +243,10 @@ namespace dms {
|
|||||||
if (stream->match(tokens::cbracketo)) {
|
if (stream->match(tokens::cbracketo)) {
|
||||||
token start = stream->peek();
|
token start = stream->peek();
|
||||||
token ancor = start;
|
token ancor = start;
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> t = stream->next(tokens::cbracketo, tokens::cbracketc);
|
std::vector<token> t = stream->next(tokens::cbracketo, tokens::cbracketc);
|
||||||
|
if (notBalanced(t, last_line, stream, "{", "}"))
|
||||||
|
return false;
|
||||||
tokenstream tempstream(&t);
|
tokenstream tempstream(&t);
|
||||||
value ref = value(datatypes::variable);
|
value ref = value(datatypes::variable);
|
||||||
value length = value();
|
value length = value();
|
||||||
@ -636,7 +686,10 @@ namespace dms {
|
|||||||
// Already we have built: FUNC name val
|
// Already we have built: FUNC name val
|
||||||
// Next we add arguments this is where things get interesting
|
// Next we add arguments this is where things get interesting
|
||||||
// This is a balanced consuming method (()(()))
|
// This is a balanced consuming method (()(()))
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> t = stream->next(tokens::parao, tokens::parac); // Consume and get tokens
|
std::vector<token> t = stream->next(tokens::parao, tokens::parac); // Consume and get tokens
|
||||||
|
if (notBalanced(t, last_line, stream, "(", ")"))
|
||||||
|
return false;
|
||||||
//t.pop_back();
|
//t.pop_back();
|
||||||
tokenstream tempstream(&t);
|
tokenstream tempstream(&t);
|
||||||
if (t.size() == 1) { // No arg function!
|
if (t.size() == 1) { // No arg function!
|
||||||
@ -726,7 +779,10 @@ namespace dms {
|
|||||||
// Already we have built: FUNC name val
|
// Already we have built: FUNC name val
|
||||||
// Next we add arguments this is where things get interesting
|
// Next we add arguments this is where things get interesting
|
||||||
// This is a balanced consuming method (()(()))
|
// This is a balanced consuming method (()(()))
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> t = stream->next(tokens::parao, tokens::parac); // Consume and get tokens
|
std::vector<token> t = stream->next(tokens::parao, tokens::parac); // Consume and get tokens
|
||||||
|
if (notBalanced(t, last_line, stream, "(", ")"))
|
||||||
|
return false;
|
||||||
t.pop_back();
|
t.pop_back();
|
||||||
tokenstream tempstream(&t);
|
tokenstream tempstream(&t);
|
||||||
if (t.size() == 1) { // No arg function!
|
if (t.size() == 1) { // No arg function!
|
||||||
@ -858,6 +914,23 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
We need to match {...}
|
||||||
|
This doesn't pass any varaible. It should be used to match and process program flow
|
||||||
|
*/
|
||||||
|
bool LineParser::match_process_scope(tokenstream* stream) {
|
||||||
|
if (stream->match(cbracketo)) {
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
|
std::vector<token> t = stream->next(cbracketo, cbracketc); // Consume and get tokens
|
||||||
|
tokenstream tempstream(&t);
|
||||||
|
if (notBalanced(t, last_line, stream, "{", "}"))
|
||||||
|
return false;
|
||||||
|
// We got the balanced match, time to simple do it
|
||||||
|
ParseLoop(&tempstream); // Done
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
bool LineParser::match_process_IFFF(tokenstream* stream) {
|
bool LineParser::match_process_IFFF(tokenstream* stream) {
|
||||||
/*if(this) {
|
/*if(this) {
|
||||||
* then()
|
* then()
|
||||||
@ -873,7 +946,10 @@ namespace dms {
|
|||||||
// 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
|
// 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,tokens::parao) && stream->peek().name == "if") {
|
if (stream->match(tokens::name,tokens::parao) && stream->peek().name == "if") {
|
||||||
stream->next();
|
stream->next();
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> ts = stream->next(tokens::parao, tokens::parac);
|
std::vector<token> ts = stream->next(tokens::parao, tokens::parac);
|
||||||
|
if (notBalanced(ts, last_line, stream, "(", ")"))
|
||||||
|
return false;
|
||||||
ts.pop_back();
|
ts.pop_back();
|
||||||
tokenstream tmpstream(&ts);
|
tokenstream tmpstream(&ts);
|
||||||
value cmp(datatypes::variable);
|
value cmp(datatypes::variable);
|
||||||
@ -882,7 +958,10 @@ namespace dms {
|
|||||||
std::string ifend = std::string("IFE_") + random_string(4);
|
std::string ifend = std::string("IFE_") + random_string(4);
|
||||||
std::string next = std::string("IFF_") + random_string(4);
|
std::string next = std::string("IFF_") + random_string(4);
|
||||||
if (stream->match(tokens::cbracketo)) {
|
if (stream->match(tokens::cbracketo)) {
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> toks = stream->next(tokens::cbracketo, tokens::cbracketc);
|
std::vector<token> toks = stream->next(tokens::cbracketo, tokens::cbracketc);
|
||||||
|
if (notBalanced(toks, last_line, stream, "{", "}"))
|
||||||
|
return false;
|
||||||
toks.pop_back();
|
toks.pop_back();
|
||||||
tokenstream tempstream(&toks);
|
tokenstream tempstream(&toks);
|
||||||
cmd* c = new cmd;
|
cmd* c = new cmd;
|
||||||
@ -909,8 +988,8 @@ namespace dms {
|
|||||||
stream->next();
|
stream->next();
|
||||||
buildGoto(ifend);
|
buildGoto(ifend);
|
||||||
buildLabel(next);
|
buildLabel(next);
|
||||||
if (!match_process_function(stream, nil)) {
|
if (!match_process_function(stream, nil) && !match_process_scope(stream)) {
|
||||||
state->push_error(errors::error{ errors::unknown,"Missing else function",true,stream->peek().line_num,current_chunk });
|
state->push_error(errors::error{ errors::unknown,"Missing else function or scope",true,stream->peek().line_num,current_chunk });
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -938,7 +1017,10 @@ namespace dms {
|
|||||||
bool LineParser::match_process_ELSE(tokenstream* stream, std::string ifend) {
|
bool LineParser::match_process_ELSE(tokenstream* stream, std::string ifend) {
|
||||||
if (stream->match(tokens::name, tokens::cbracketo) && stream->peek().name == "else") {
|
if (stream->match(tokens::name, tokens::cbracketo) && stream->peek().name == "else") {
|
||||||
stream->next();
|
stream->next();
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> ts = stream->next(tokens::cbracketo, tokens::cbracketc);
|
std::vector<token> ts = stream->next(tokens::cbracketo, tokens::cbracketc);
|
||||||
|
if (notBalanced(ts, last_line, stream, "{", "}"))
|
||||||
|
return false;
|
||||||
ts.pop_back();
|
ts.pop_back();
|
||||||
tokenstream tempstream(&ts);
|
tokenstream tempstream(&ts);
|
||||||
ParseLoop(&tempstream);
|
ParseLoop(&tempstream);
|
||||||
@ -949,7 +1031,10 @@ namespace dms {
|
|||||||
bool LineParser::match_process_ELIF(tokenstream* stream, std::string ifend) {
|
bool LineParser::match_process_ELIF(tokenstream* stream, std::string ifend) {
|
||||||
if (stream->match(tokens::name, tokens::parao) && stream->peek().name == "elseif") {
|
if (stream->match(tokens::name, tokens::parao) && stream->peek().name == "elseif") {
|
||||||
stream->next();
|
stream->next();
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> ts = stream->next(tokens::parao, tokens::parac);
|
std::vector<token> ts = stream->next(tokens::parao, tokens::parac);
|
||||||
|
if (notBalanced(ts, last_line, stream, "(", ")"))
|
||||||
|
return false;
|
||||||
ts.pop_back();
|
ts.pop_back();
|
||||||
tokenstream tmpstream(&ts);
|
tokenstream tmpstream(&ts);
|
||||||
value cmp(datatypes::variable);
|
value cmp(datatypes::variable);
|
||||||
@ -957,7 +1042,10 @@ namespace dms {
|
|||||||
if (match_process_standard(&tmpstream, cmp)) {
|
if (match_process_standard(&tmpstream, cmp)) {
|
||||||
std::string next = std::string("IFF_") + random_string(4);
|
std::string next = std::string("IFF_") + random_string(4);
|
||||||
if (stream->match(tokens::cbracketo)) {
|
if (stream->match(tokens::cbracketo)) {
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
std::vector<token> toks = stream->next(tokens::cbracketo, tokens::cbracketc);
|
std::vector<token> toks = stream->next(tokens::cbracketo, tokens::cbracketc);
|
||||||
|
if (notBalanced(ts, last_line, stream, "{", "}"))
|
||||||
|
return false;
|
||||||
toks.pop_back();
|
toks.pop_back();
|
||||||
tokenstream tempstream(&toks);
|
tokenstream tempstream(&toks);
|
||||||
cmd* c = new cmd;
|
cmd* c = new cmd;
|
||||||
@ -1017,7 +1105,10 @@ namespace dms {
|
|||||||
while (stream->peek().type != tokens::none) {
|
while (stream->peek().type != tokens::none) {
|
||||||
debugInvoker(stream);
|
debugInvoker(stream);
|
||||||
if (stream->match(tokens::parao)) {
|
if (stream->match(tokens::parao)) {
|
||||||
|
size_t last_line = stream->last().line_num;
|
||||||
auto ts = stream->next(tokens::parao, tokens::parac);
|
auto ts = stream->next(tokens::parao, tokens::parac);
|
||||||
|
if (notBalanced(ts, last_line, stream, "(", ")"))
|
||||||
|
return false;
|
||||||
tokenstream temp(&ts);
|
tokenstream temp(&ts);
|
||||||
value tmpvalue = value(datatypes::variable);
|
value tmpvalue = value(datatypes::variable);
|
||||||
if (match_process_expression(&temp, tmpvalue)) {
|
if (match_process_expression(&temp, tmpvalue)) {
|
||||||
@ -1108,6 +1199,14 @@ namespace dms {
|
|||||||
else
|
else
|
||||||
badSymbol(stream);
|
badSymbol(stream);
|
||||||
}
|
}
|
||||||
|
else if (stream->match(tokens::string)) {
|
||||||
|
if (left.isNil())
|
||||||
|
left = value(stream->next().name,string);
|
||||||
|
else if (right.isNil())
|
||||||
|
right = value(stream->next().name, string);
|
||||||
|
else
|
||||||
|
badSymbol(stream);
|
||||||
|
}
|
||||||
else if (stream->match(tokens::name)) {
|
else if (stream->match(tokens::name)) {
|
||||||
// We tested functions already! So if that fails and we have a name then... we have a variable lets handle this!
|
// We tested functions already! So if that fails and we have a name then... we have a variable lets handle this!
|
||||||
if (left.isNil())
|
if (left.isNil())
|
||||||
|
|||||||
@ -514,12 +514,6 @@ namespace dms {
|
|||||||
void LineParser::_Parse(tokenstream* stream) {
|
void LineParser::_Parse(tokenstream* stream) {
|
||||||
if (stop) return;
|
if (stop) return;
|
||||||
createBlock("$INIT", blocktype::bt_block);
|
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);
|
ParseLoop(stream);
|
||||||
if (stop) return;
|
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!
|
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!
|
||||||
|
|||||||
@ -11,7 +11,7 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
token tokenstream::next() {
|
token tokenstream::next() {
|
||||||
if (pos > this->tokens.size()-1)
|
if (pos > this->tokens.size()-1)
|
||||||
return token{ tokentype::none,codes::NOOP,"EOS",0 };
|
return token{ tokentype::none,codes::NOOP,"EOS", this->tokens[pos - 2].line_num };
|
||||||
return this->tokens[pos++];
|
return this->tokens[pos++];
|
||||||
}
|
}
|
||||||
void tokenstream::prev() {
|
void tokenstream::prev() {
|
||||||
@ -38,13 +38,16 @@ namespace dms {
|
|||||||
if (peek().type == to) {
|
if (peek().type == to) {
|
||||||
open++;
|
open++;
|
||||||
next(); // Consume
|
next(); // Consume
|
||||||
while (open != 0) {
|
while (open != 0 && peek().type!=tokens::none) {
|
||||||
if (peek().type == to)
|
if (peek().type == to)
|
||||||
open++;
|
open++;
|
||||||
else if (peek().type == tc)
|
else if (peek().type == tc)
|
||||||
open--;
|
open--;
|
||||||
tok.push_back(next());
|
tok.push_back(next());
|
||||||
}
|
}
|
||||||
|
if (tok.back().type == tokens::eof) {
|
||||||
|
tok.clear(); // Empty the vector
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return tok;
|
return tok;
|
||||||
}
|
}
|
||||||
@ -68,7 +71,7 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
token tokenstream::peek() {
|
token tokenstream::peek() {
|
||||||
if (pos > this->tokens.size()-1)
|
if (pos > this->tokens.size()-1)
|
||||||
return token{ tokentype::none,codes::NOOP,"EOS",0 };
|
return token{ tokentype::none,codes::NOOP,"EOS",this->tokens[pos - 2].line_num };
|
||||||
return this->tokens[pos];
|
return this->tokens[pos];
|
||||||
}
|
}
|
||||||
tokenstream::tokenstream() {}
|
tokenstream::tokenstream() {}
|
||||||
@ -133,7 +136,14 @@ namespace dms {
|
|||||||
|
|
||||||
return random_string;
|
return random_string;
|
||||||
}
|
}
|
||||||
|
bool LineParser::notBalanced(std::vector<tokens::token> ts, size_t last_line, tokenstream* stream, std::string o, std::string c) {
|
||||||
|
if (ts.size() == 0) {
|
||||||
|
stop = true;
|
||||||
|
state->push_error(errors::error{ errors::unknown,utils::concat("Unbalanced match! '",c,"' Expected to close '",o,"' At Line: ",last_line),true,stream->peek().line_num,current_chunk });
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
bool LineParser::isBlock() {
|
bool LineParser::isBlock() {
|
||||||
return isBlock(bt_block); // Default block type
|
return isBlock(bt_block); // Default block type
|
||||||
}
|
}
|
||||||
@ -257,12 +267,6 @@ namespace dms {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (bk_name == "$END") {
|
else if (bk_name == "$END") {
|
||||||
/*cmd* c = new cmd;
|
|
||||||
c->opcode = codes::JUMP;
|
|
||||||
c->args.push(buildValue("$END"));
|
|
||||||
current_chunk->addCmd(c);
|
|
||||||
state->push_chunk(current_chunk->name, current_chunk);
|
|
||||||
current_chunk = state->chunks["$END"];*/
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -292,6 +296,14 @@ namespace dms {
|
|||||||
current_chunk->name = bk_name;
|
current_chunk->name = bk_name;
|
||||||
chunk_type = bk_type;
|
chunk_type = bk_type;
|
||||||
current_chunk->type = bk_type;
|
current_chunk->type = bk_type;
|
||||||
|
|
||||||
|
if (state->isEnabled("debugging")) {
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::FILE;
|
||||||
|
c->args.push(value(fn));
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
}
|
||||||
|
|
||||||
state->push_chunk(bk_name, current_chunk);
|
state->push_chunk(bk_name, current_chunk);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -18,7 +18,7 @@ const std::string dms::codes::list[] = {
|
|||||||
"WHLE",
|
"WHLE",
|
||||||
"FUNC",
|
"FUNC",
|
||||||
"IFFF",
|
"IFFF",
|
||||||
"ELIF",
|
"KNOT",
|
||||||
"ELSE",
|
"ELSE",
|
||||||
"DEFN",
|
"DEFN",
|
||||||
"SKIP",
|
"SKIP",
|
||||||
|
|||||||
17
DMS/codes.h
17
DMS/codes.h
@ -10,23 +10,23 @@ namespace dms::codes {
|
|||||||
LOAD, // Done
|
LOAD, // Done
|
||||||
VERN, // Done
|
VERN, // Done
|
||||||
USIN, // TODO
|
USIN, // TODO
|
||||||
STAT,
|
STAT, // Done
|
||||||
DISP, // Done
|
DISP, // Done
|
||||||
ASGN, // Done
|
ASGN, // Done
|
||||||
LABL,
|
LABL, // Done
|
||||||
CHOI, // Done
|
CHOI, // Done
|
||||||
OPTN,
|
OPTN,
|
||||||
FORE,
|
FORE,
|
||||||
WHLE,
|
WHLE,
|
||||||
FUNC, // Done
|
FUNC, // Done
|
||||||
IFFF,
|
IFFF, // Done
|
||||||
ELIF,
|
KNOT, // Done
|
||||||
ELSE,
|
ELSE, // Scraped
|
||||||
DEFN,
|
DEFN,
|
||||||
SKIP,
|
SKIP,
|
||||||
COMP,
|
COMP, // Done
|
||||||
INDX, // Done
|
INDX, // Done
|
||||||
JMPZ,
|
JMPZ, // Scraped see [COMP]
|
||||||
INST, // Done
|
INST, // Done
|
||||||
ERRO,
|
ERRO,
|
||||||
GOTO,
|
GOTO,
|
||||||
@ -54,7 +54,4 @@ namespace dms::codes {
|
|||||||
OFUN // Done
|
OFUN // Done
|
||||||
};
|
};
|
||||||
extern const std::string list[];
|
extern const std::string list[];
|
||||||
static bool isControl(const op code) {
|
|
||||||
return (code == STAT || code == CHOI || code == FORE || code == WHLE || code == IFFF || code == ELIF || code == ELSE);
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
@ -157,7 +157,7 @@ namespace dms {
|
|||||||
std::cout << err.err_msg << " On Line <" << err.linenum << ">" << std::endl;
|
std::cout << err.err_msg << " On Line <" << err.linenum << ">" << std::endl;
|
||||||
}
|
}
|
||||||
else if (isEnabled("debugging")) {
|
else if (isEnabled("debugging")) {
|
||||||
std::cout << err.err_msg << " On Line <" << cur_line << ">" << std::endl;
|
std::cout << err.err_msg << " In File " << cur_file << " On Line <" << cur_line << ">" << std::endl;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::cout << err.err_msg << std::endl;
|
std::cout << err.err_msg << std::endl;
|
||||||
|
|||||||
@ -33,6 +33,7 @@ namespace dms {
|
|||||||
std::string entry = "$undefined";
|
std::string entry = "$undefined";
|
||||||
std::unordered_map<std::string, bool> enables;
|
std::unordered_map<std::string, bool> enables;
|
||||||
std::size_t cur_line=0;
|
std::size_t cur_line=0;
|
||||||
|
std::string cur_file = "";
|
||||||
int exitcode = 0;
|
int exitcode = 0;
|
||||||
const double Iversion = 1.0;
|
const double Iversion = 1.0;
|
||||||
double Sversion; // The version of
|
double Sversion; // The version of
|
||||||
|
|||||||
@ -158,6 +158,8 @@ namespace dms {
|
|||||||
case DISA:
|
case DISA:
|
||||||
disable(c->args.args[0].getPrintable());
|
disable(c->args.args[0].getPrintable());
|
||||||
break;
|
break;
|
||||||
|
case codes::FILE:
|
||||||
|
cur_file = c->args.args[0].getPrintable();
|
||||||
case LOAD:
|
case LOAD:
|
||||||
// Nothing needs to be done here
|
// Nothing needs to be done here
|
||||||
break;
|
break;
|
||||||
@ -184,6 +186,22 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
break;
|
break;
|
||||||
|
case KNOT:
|
||||||
|
{
|
||||||
|
value cmp = c->args.args[0];
|
||||||
|
if (cmp.resolve(this).type == datatypes::boolean || cmp.resolve(this).isNil()) {
|
||||||
|
if (!cmp.resolve(this).b || cmp.resolve(this).isNil()) {
|
||||||
|
assign(cmp, value(true));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assign(cmp, value(false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assign(cmp, value(false));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case IFFF:
|
case IFFF:
|
||||||
{
|
{
|
||||||
value cmp = c->args.args[0].resolve(this);
|
value cmp = c->args.args[0].resolve(this);
|
||||||
|
|||||||
BIN
DMS/dump.bin
BIN
DMS/dump.bin
Binary file not shown.
322
DMS/dump.txt
322
DMS/dump.txt
@ -21,6 +21,9 @@ Line <6> name savestate
|
|||||||
Line <6> newline
|
Line <6> newline
|
||||||
Line <6> newline
|
Line <6> newline
|
||||||
Line <7> newline
|
Line <7> newline
|
||||||
|
Line <8> flag
|
||||||
|
Line <8> name debugging
|
||||||
|
Line <8> newline
|
||||||
Line <8> newline
|
Line <8> newline
|
||||||
Line <9> flag
|
Line <9> flag
|
||||||
Line <9> string loadtest.dms
|
Line <9> string loadtest.dms
|
||||||
@ -44,152 +47,147 @@ Line <13> equal =
|
|||||||
Line <13> number 10
|
Line <13> number 10
|
||||||
Line <13> newline
|
Line <13> newline
|
||||||
Line <13> newline
|
Line <13> newline
|
||||||
Line <14> name a2
|
Line <14> name b1
|
||||||
Line <14> equal =
|
Line <14> equal =
|
||||||
Line <14> number 10
|
Line <14> number 15
|
||||||
Line <14> newline
|
Line <14> newline
|
||||||
Line <14> newline
|
Line <14> newline
|
||||||
Line <15> name a3
|
Line <15> name print
|
||||||
|
Line <15> parao (
|
||||||
|
Line <15> parao (
|
||||||
|
Line <15> name a1
|
||||||
|
Line <15> not !
|
||||||
Line <15> equal =
|
Line <15> equal =
|
||||||
Line <15> number 10
|
Line <15> name b1
|
||||||
|
Line <15> parac )
|
||||||
|
Line <15> parac )
|
||||||
Line <15> newline
|
Line <15> newline
|
||||||
Line <15> newline
|
Line <15> newline
|
||||||
Line <16> name b1
|
|
||||||
Line <16> equal =
|
|
||||||
Line <16> number 15
|
|
||||||
Line <16> newline
|
Line <16> newline
|
||||||
Line <16> newline
|
Line <16> newline
|
||||||
Line <17> name b2
|
Line <17> name if
|
||||||
|
Line <17> parao (
|
||||||
|
Line <17> name a
|
||||||
Line <17> equal =
|
Line <17> equal =
|
||||||
Line <17> number 15
|
Line <17> equal =
|
||||||
|
Line <17> name b
|
||||||
|
Line <17> parac )
|
||||||
|
Line <17> cbracketo {
|
||||||
Line <17> newline
|
Line <17> newline
|
||||||
Line <17> newline
|
Line <17> newline
|
||||||
Line <18> name b3
|
Line <18> name print
|
||||||
Line <18> equal =
|
Line <18> parao (
|
||||||
Line <18> number 15
|
Line <18> string Doing a test!
|
||||||
|
Line <18> parac )
|
||||||
Line <18> newline
|
Line <18> newline
|
||||||
Line <18> newline
|
Line <18> newline
|
||||||
|
Line <19> name if
|
||||||
|
Line <19> parao (
|
||||||
|
Line <19> name a
|
||||||
|
Line <19> not !
|
||||||
|
Line <19> equal =
|
||||||
|
Line <19> name b
|
||||||
|
Line <19> parac )
|
||||||
|
Line <19> cbracketo {
|
||||||
Line <19> newline
|
Line <19> newline
|
||||||
Line <19> newline
|
Line <19> newline
|
||||||
Line <20> name print
|
Line <20> name print
|
||||||
Line <20> parao (
|
Line <20> parao (
|
||||||
Line <20> name a1
|
Line <20> string Doing more tests!
|
||||||
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> parac )
|
||||||
Line <20> newline
|
Line <20> newline
|
||||||
Line <20> newline
|
Line <20> newline
|
||||||
|
Line <21> cbracketc }
|
||||||
Line <21> newline
|
Line <21> newline
|
||||||
Line <21> newline
|
Line <21> newline
|
||||||
Line <22> name if
|
Line <22> cbracketc }
|
||||||
|
Line <22> name elseif
|
||||||
Line <22> parao (
|
Line <22> parao (
|
||||||
Line <22> name a
|
Line <22> name a1
|
||||||
Line <22> equal =
|
Line <22> equal =
|
||||||
Line <22> equal =
|
Line <22> equal =
|
||||||
Line <22> name b
|
Line <22> number 10
|
||||||
Line <22> parac )
|
Line <22> parac )
|
||||||
Line <22> cbracketo {
|
Line <22> cbracketo {
|
||||||
Line <22> newline
|
Line <22> newline
|
||||||
Line <22> newline
|
Line <22> newline
|
||||||
Line <23> name print
|
Line <23> name print
|
||||||
Line <23> parao (
|
Line <23> parao (
|
||||||
Line <23> string Doing a test!
|
Line <23> string Does this work?
|
||||||
Line <23> parac )
|
Line <23> parac )
|
||||||
Line <23> newline
|
Line <23> newline
|
||||||
Line <23> newline
|
Line <23> newline
|
||||||
Line <24> name if
|
Line <24> cbracketc }
|
||||||
Line <24> parao (
|
Line <24> name else
|
||||||
Line <24> name a
|
|
||||||
Line <24> not !
|
|
||||||
Line <24> equal =
|
|
||||||
Line <24> name b
|
|
||||||
Line <24> parac )
|
|
||||||
Line <24> cbracketo {
|
Line <24> cbracketo {
|
||||||
Line <24> newline
|
Line <24> newline
|
||||||
Line <24> newline
|
Line <24> newline
|
||||||
Line <25> name print
|
Line <25> name print
|
||||||
Line <25> parao (
|
Line <25> parao (
|
||||||
Line <25> string Doing more tests!
|
Line <25> string This is an else!
|
||||||
Line <25> parac )
|
Line <25> parac )
|
||||||
Line <25> newline
|
Line <25> newline
|
||||||
Line <25> newline
|
Line <25> newline
|
||||||
Line <26> cbracketc }
|
Line <26> cbracketc }
|
||||||
Line <26> newline
|
Line <26> newline
|
||||||
Line <26> newline
|
Line <26> newline
|
||||||
Line <27> cbracketc }
|
|
||||||
Line <27> name elseif
|
|
||||||
Line <27> parao (
|
|
||||||
Line <27> name a1
|
|
||||||
Line <27> equal =
|
|
||||||
Line <27> equal =
|
|
||||||
Line <27> number 10
|
|
||||||
Line <27> parac )
|
|
||||||
Line <27> cbracketo {
|
|
||||||
Line <27> newline
|
Line <27> newline
|
||||||
Line <27> newline
|
Line <27> newline
|
||||||
Line <28> name print
|
Line <28> name if
|
||||||
Line <28> parao (
|
Line <28> parao (
|
||||||
Line <28> string Does this work?
|
Line <28> name a1
|
||||||
|
Line <28> not !
|
||||||
|
Line <28> equal =
|
||||||
|
Line <28> number 10
|
||||||
Line <28> parac )
|
Line <28> parac )
|
||||||
|
Line <28> name this
|
||||||
|
Line <28> parao (
|
||||||
|
Line <28> parac )
|
||||||
|
Line <28> pipe |
|
||||||
|
Line <28> cbracketo {
|
||||||
Line <28> newline
|
Line <28> newline
|
||||||
Line <28> newline
|
Line <28> newline
|
||||||
Line <29> cbracketc }
|
Line <29> name print
|
||||||
Line <29> name else
|
Line <29> parao (
|
||||||
Line <29> cbracketo {
|
Line <29> string Do you work?
|
||||||
|
Line <29> parac )
|
||||||
Line <29> newline
|
Line <29> newline
|
||||||
Line <29> newline
|
Line <29> newline
|
||||||
Line <30> name print
|
Line <30> cbracketc }
|
||||||
Line <30> parao (
|
|
||||||
Line <30> string This is an else!
|
|
||||||
Line <30> parac )
|
|
||||||
Line <30> newline
|
Line <30> newline
|
||||||
Line <30> newline
|
Line <30> newline
|
||||||
Line <31> cbracketc }
|
|
||||||
Line <31> newline
|
Line <31> newline
|
||||||
Line <31> newline
|
Line <31> newline
|
||||||
Line <32> newline
|
Line <32> newline
|
||||||
Line <32> newline
|
Line <32> newline
|
||||||
Line <33> name if
|
Line <33> name print
|
||||||
Line <33> parao (
|
Line <33> parao (
|
||||||
Line <33> name a1
|
Line <33> string This is coming along nicely!
|
||||||
Line <33> equal =
|
|
||||||
Line <33> equal =
|
|
||||||
Line <33> number 10
|
|
||||||
Line <33> parac )
|
Line <33> parac )
|
||||||
Line <33> cbracketo {
|
|
||||||
Line <33> newline
|
Line <33> newline
|
||||||
Line <33> newline
|
Line <33> newline
|
||||||
Line <34> name print
|
|
||||||
Line <34> parao (
|
|
||||||
Line <34> string Hi
|
|
||||||
Line <34> parac )
|
|
||||||
Line <34> newline
|
Line <34> newline
|
||||||
Line <34> newline
|
Line <34> newline
|
||||||
Line <35> cbracketc }
|
Line <35> name print
|
||||||
|
Line <35> parao (
|
||||||
|
Line <35> string concat test
|
||||||
|
Line <35> parac )
|
||||||
Line <35> newline
|
Line <35> newline
|
||||||
Line <35> newline
|
Line <35> newline
|
||||||
|
Line <36> name test1
|
||||||
|
Line <36> equal =
|
||||||
|
Line <36> string Hello
|
||||||
Line <36> newline
|
Line <36> newline
|
||||||
Line <36> newline
|
Line <36> newline
|
||||||
Line <37> name print
|
Line <37> name print
|
||||||
Line <37> parao (
|
Line <37> parao (
|
||||||
Line <37> string This is coming along nicely!
|
Line <37> number 2.2
|
||||||
|
Line <37> plus +
|
||||||
|
Line <37> name test1
|
||||||
|
Line <37> plus +
|
||||||
|
Line <37> string World!
|
||||||
|
Line <37> plus +
|
||||||
|
Line <37> name fake
|
||||||
Line <37> parac )
|
Line <37> parac )
|
||||||
Line <37> newline
|
Line <37> newline
|
||||||
Line <37> newline
|
Line <37> newline
|
||||||
@ -197,136 +195,136 @@ Line <38> newline
|
|||||||
Line <39> newline
|
Line <39> newline
|
||||||
Line <40> newline
|
Line <40> newline
|
||||||
Line <41> newline
|
Line <41> newline
|
||||||
|
Line <41> newline
|
||||||
|
Line <42> name if
|
||||||
|
Line <42> parao (
|
||||||
|
Line <42> name this
|
||||||
|
Line <42> equal =
|
||||||
|
Line <42> equal =
|
||||||
|
Line <42> name that
|
||||||
|
Line <42> parac )
|
||||||
|
Line <42> name this
|
||||||
|
Line <42> parao (
|
||||||
|
Line <42> parac )
|
||||||
|
Line <42> pipe |
|
||||||
|
Line <42> name that
|
||||||
|
Line <42> parao (
|
||||||
|
Line <42> parac )
|
||||||
Line <42> newline
|
Line <42> newline
|
||||||
Line <42> newline
|
Line <42> newline
|
||||||
Line <43> newline
|
Line <43> newline
|
||||||
|
Line <43> newline
|
||||||
|
Line <44> bracketo [
|
||||||
|
Line <44> name this
|
||||||
|
Line <44> colon :
|
||||||
|
Line <44> name function
|
||||||
|
Line <44> parao (
|
||||||
|
Line <44> parac )
|
||||||
|
Line <44> bracketc ]
|
||||||
Line <44> newline
|
Line <44> newline
|
||||||
Line <44> newline
|
Line <44> newline
|
||||||
|
Line <45> name print
|
||||||
|
Line <45> parao (
|
||||||
|
Line <45> string This
|
||||||
|
Line <45> parac )
|
||||||
Line <45> newline
|
Line <45> newline
|
||||||
Line <45> newline
|
Line <45> newline
|
||||||
Line <46> newline
|
Line <46> newline
|
||||||
|
Line <46> newline
|
||||||
|
Line <47> bracketo [
|
||||||
|
Line <47> name that
|
||||||
|
Line <47> colon :
|
||||||
|
Line <47> name function
|
||||||
|
Line <47> parao (
|
||||||
|
Line <47> parac )
|
||||||
|
Line <47> bracketc ]
|
||||||
Line <47> newline
|
Line <47> newline
|
||||||
Line <47> newline
|
Line <47> newline
|
||||||
|
Line <48> name print
|
||||||
|
Line <48> parao (
|
||||||
|
Line <48> string That
|
||||||
|
Line <48> parac )
|
||||||
|
Line <48> newline
|
||||||
Line <48> newline
|
Line <48> newline
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
|
Line <50> bracketo [
|
||||||
|
Line <50> name Bob
|
||||||
|
Line <50> colon :
|
||||||
|
Line <50> name char
|
||||||
|
Line <50> bracketc ]
|
||||||
|
Line <50> newline
|
||||||
Line <50> newline
|
Line <50> newline
|
||||||
Line <51> newline
|
|
||||||
Line <51> newline
|
Line <51> newline
|
||||||
Line <52> newline
|
Line <52> newline
|
||||||
Line <53> newline
|
Line <53> newline
|
||||||
Line <53> newline
|
Line <54> name unknown
|
||||||
Line <54> bracketo [
|
Line <54> equal =
|
||||||
Line <54> name this
|
Line <54> string Some Random Guy
|
||||||
Line <54> colon :
|
|
||||||
Line <54> name function
|
|
||||||
Line <54> parao (
|
|
||||||
Line <54> parac )
|
|
||||||
Line <54> bracketc ]
|
|
||||||
Line <54> newline
|
Line <54> newline
|
||||||
Line <54> newline
|
Line <54> newline
|
||||||
Line <55> name print
|
Line <55> name age
|
||||||
Line <55> parao (
|
Line <55> equal =
|
||||||
Line <55> string This
|
Line <55> number .24
|
||||||
Line <55> parac )
|
|
||||||
Line <55> newline
|
Line <55> newline
|
||||||
Line <55> newline
|
Line <55> newline
|
||||||
|
Line <56> name money
|
||||||
|
Line <56> equal =
|
||||||
|
Line <56> number 100
|
||||||
Line <56> newline
|
Line <56> newline
|
||||||
Line <56> newline
|
Line <56> newline
|
||||||
Line <57> bracketo [
|
Line <57> name excited
|
||||||
Line <57> name that
|
|
||||||
Line <57> colon :
|
Line <57> colon :
|
||||||
Line <57> name function
|
Line <57> string path/to/file
|
||||||
Line <57> parao (
|
|
||||||
Line <57> parac )
|
|
||||||
Line <57> bracketc ]
|
|
||||||
Line <57> newline
|
Line <57> newline
|
||||||
Line <57> newline
|
Line <57> newline
|
||||||
Line <58> name print
|
|
||||||
Line <58> parao (
|
|
||||||
Line <58> string That
|
|
||||||
Line <58> parac )
|
|
||||||
Line <58> newline
|
Line <58> newline
|
||||||
Line <58> newline
|
Line <58> newline
|
||||||
|
Line <59> bracketo [
|
||||||
|
Line <59> name test1
|
||||||
|
Line <59> colon :
|
||||||
|
Line <59> name function
|
||||||
|
Line <59> parao (
|
||||||
|
Line <59> parac )
|
||||||
|
Line <59> bracketc ]
|
||||||
Line <59> newline
|
Line <59> newline
|
||||||
Line <59> newline
|
Line <59> newline
|
||||||
Line <60> bracketo [
|
Line <60> string Inside a function!
|
||||||
Line <60> name Bob
|
|
||||||
Line <60> colon :
|
|
||||||
Line <60> name char
|
|
||||||
Line <60> bracketc ]
|
|
||||||
Line <60> newline
|
Line <60> newline
|
||||||
Line <60> newline
|
Line <60> newline
|
||||||
Line <61> newline
|
Line <61> newline
|
||||||
Line <62> newline
|
Line <62> newline
|
||||||
Line <63> newline
|
Line <63> newline
|
||||||
Line <64> name unknown
|
Line <63> newline
|
||||||
Line <64> equal =
|
Line <64> bracketo [
|
||||||
Line <64> string Some Random Guy
|
Line <64> name newblock
|
||||||
|
Line <64> colon :
|
||||||
|
Line <64> name function
|
||||||
|
Line <64> parao (
|
||||||
|
Line <64> name a
|
||||||
|
Line <64> seperator ,
|
||||||
|
Line <64> name b
|
||||||
|
Line <64> seperator ,
|
||||||
|
Line <64> name c
|
||||||
|
Line <64> parac )
|
||||||
|
Line <64> bracketc ]
|
||||||
Line <64> newline
|
Line <64> newline
|
||||||
Line <64> newline
|
Line <64> newline
|
||||||
Line <65> name age
|
Line <65> string Func Arguments: a = `a`, b = `b`, c = `c`
|
||||||
Line <65> equal =
|
|
||||||
Line <65> number 0.24
|
|
||||||
Line <65> newline
|
Line <65> newline
|
||||||
Line <65> newline
|
Line <65> newline
|
||||||
Line <66> name money
|
Line <66> string Time to return
|
||||||
Line <66> equal =
|
|
||||||
Line <66> number 100
|
|
||||||
Line <66> newline
|
Line <66> newline
|
||||||
Line <66> newline
|
Line <66> newline
|
||||||
Line <67> name excited
|
Line <67> ret
|
||||||
Line <67> colon :
|
Line <67> name a
|
||||||
Line <67> string path/to/file
|
Line <67> plus +
|
||||||
|
Line <67> name b
|
||||||
|
Line <67> plus +
|
||||||
|
Line <67> name c
|
||||||
Line <67> newline
|
Line <67> newline
|
||||||
Line <67> newline
|
Line <67> newline
|
||||||
Line <68> newline
|
Line <67> eof
|
||||||
Line <68> newline
|
|
||||||
Line <69> bracketo [
|
|
||||||
Line <69> name test1
|
|
||||||
Line <69> colon :
|
|
||||||
Line <69> name function
|
|
||||||
Line <69> parao (
|
|
||||||
Line <69> parac )
|
|
||||||
Line <69> bracketc ]
|
|
||||||
Line <69> newline
|
|
||||||
Line <69> newline
|
|
||||||
Line <70> string Inside a function!
|
|
||||||
Line <70> newline
|
|
||||||
Line <70> newline
|
|
||||||
Line <71> newline
|
|
||||||
Line <72> newline
|
|
||||||
Line <73> newline
|
|
||||||
Line <73> newline
|
|
||||||
Line <74> bracketo [
|
|
||||||
Line <74> name newblock
|
|
||||||
Line <74> colon :
|
|
||||||
Line <74> name function
|
|
||||||
Line <74> parao (
|
|
||||||
Line <74> name a
|
|
||||||
Line <74> seperator ,
|
|
||||||
Line <74> name b
|
|
||||||
Line <74> seperator ,
|
|
||||||
Line <74> name c
|
|
||||||
Line <74> parac )
|
|
||||||
Line <74> bracketc ]
|
|
||||||
Line <74> newline
|
|
||||||
Line <74> newline
|
|
||||||
Line <75> string Func Arguments: a = `a`, b = `b`, c = `c`
|
|
||||||
Line <75> newline
|
|
||||||
Line <75> newline
|
|
||||||
Line <76> string Time to return
|
|
||||||
Line <76> newline
|
|
||||||
Line <76> newline
|
|
||||||
Line <77> ret
|
|
||||||
Line <77> name a
|
|
||||||
Line <77> plus +
|
|
||||||
Line <77> name b
|
|
||||||
Line <77> plus +
|
|
||||||
Line <77> name c
|
|
||||||
Line <77> newline
|
|
||||||
Line <77> newline
|
|
||||||
Line <77> eof
|
|
||||||
Line <1> newline
|
Line <1> newline
|
||||||
Line <1> newline
|
Line <1> newline
|
||||||
Line <1> bracketo [
|
Line <1> bracketo [
|
||||||
|
|||||||
30
DMS/test.dms
30
DMS/test.dms
@ -5,19 +5,14 @@ enable fullname
|
|||||||
enable forwardlabels // Do most of your labels exist ahead?
|
enable forwardlabels // Do most of your labels exist ahead?
|
||||||
enable savestate
|
enable savestate
|
||||||
//enable leaking
|
//enable leaking
|
||||||
//enable debugging
|
enable debugging
|
||||||
loadfile "loadtest.dms"
|
loadfile "loadtest.dms"
|
||||||
version 0.2
|
version 0.2
|
||||||
using extendedDefine
|
using extendedDefine
|
||||||
[main]
|
[main]
|
||||||
a1 = 10
|
a1 = 10
|
||||||
a2 = 10
|
|
||||||
a3 = 10
|
|
||||||
b1 = 15
|
b1 = 15
|
||||||
b2 = 15
|
print((a1!=b1))
|
||||||
b3 = 15
|
|
||||||
|
|
||||||
print(a1==b1 or (a2!=b2 and a3==a3) or a3>b3)
|
|
||||||
|
|
||||||
if(a==b){
|
if(a==b){
|
||||||
print("Doing a test!")
|
print("Doing a test!")
|
||||||
@ -30,24 +25,21 @@ using extendedDefine
|
|||||||
print("This is an else!")
|
print("This is an else!")
|
||||||
}
|
}
|
||||||
|
|
||||||
if(a1==10) this()|that()
|
if(a1!=10) this() | {
|
||||||
|
print("Do you work?")
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
print("This is coming along nicely!")
|
print("This is coming along nicely!")
|
||||||
|
|
||||||
|
print("concat test")
|
||||||
|
test1 = "Hello "
|
||||||
|
print(2.2+test1+"World!"+fake)
|
||||||
// for(x, 10, 1, -1){
|
// for(x, 10, 1, -1){
|
||||||
// print(x)
|
// print(x)
|
||||||
// }
|
// }
|
||||||
// 0 + (1 * 0) + 0
|
|
||||||
|
|
||||||
// if (this==that) this()|that()
|
if (this==that) this()|that()
|
||||||
|
|
||||||
|
|
||||||
// if(this == that){
|
|
||||||
|
|
||||||
// } elseif (that > this) {
|
|
||||||
|
|
||||||
// } else {
|
|
||||||
|
|
||||||
// }
|
|
||||||
|
|
||||||
[this:function()]
|
[this:function()]
|
||||||
print("This")
|
print("This")
|
||||||
|
|||||||
@ -176,7 +176,7 @@ namespace dms {
|
|||||||
else if (lhs.type == datatypes::boolean && rhs.type == datatypes::boolean) {
|
else if (lhs.type == datatypes::boolean && rhs.type == datatypes::boolean) {
|
||||||
return value((bool)(lhs.b + rhs.b));
|
return value((bool)(lhs.b + rhs.b));
|
||||||
}
|
}
|
||||||
else if (lhs.type == datatypes::string || rhs.type == datatypes::string) {
|
else if ((lhs.type == datatypes::string && !(rhs.type == nil)) || rhs.type == datatypes::string && !(lhs.type == nil)) {
|
||||||
return lhs.getPrintable() + rhs.getPrintable();
|
return lhs.getPrintable() + rhs.getPrintable();
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -371,7 +371,14 @@ namespace dms {
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
else if (type == number) {
|
else if (type == number) {
|
||||||
return std::to_string(n);
|
std::string temp = std::to_string(n);
|
||||||
|
while (temp.find(".") != std::string::npos // !=string::npos is important!!!
|
||||||
|
&& temp.substr(temp.length() - 1, 1) == "0"
|
||||||
|
|| temp.substr(temp.length() - 1, 1) == ".")
|
||||||
|
{
|
||||||
|
temp.pop_back();
|
||||||
|
}
|
||||||
|
return temp;
|
||||||
}
|
}
|
||||||
else if (type == nil) {
|
else if (type == nil) {
|
||||||
return "nil";
|
return "nil";
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user