diff --git a/DMS/Debug/DMS.log b/DMS/Debug/DMS.log index 58b89fe..9a61c78 100644 --- a/DMS/Debug/DMS.log +++ b/DMS/Debug/DMS.log @@ -1,2 +1,3 @@  LineParserMatchProcess.cpp +F:\VSCWorkspace\DMS\DMS\LineParserMatchProcess.cpp(678): warning C4715: 'dms::LineParser::match_process_expression': not all control paths return a value DMS.vcxproj -> F:\VSCWorkspace\DMS\Debug\DMS.exe diff --git a/DMS/Debug/DMS.obj b/DMS/Debug/DMS.obj index c8d22b8..4add843 100644 Binary files a/DMS/Debug/DMS.obj and b/DMS/Debug/DMS.obj differ diff --git a/DMS/Debug/DMS.tlog/CL.command.1.tlog b/DMS/Debug/DMS.tlog/CL.command.1.tlog index dcab84c..5651a64 100644 Binary files a/DMS/Debug/DMS.tlog/CL.command.1.tlog and b/DMS/Debug/DMS.tlog/CL.command.1.tlog differ diff --git a/DMS/Debug/DMS.tlog/CL.read.1.tlog b/DMS/Debug/DMS.tlog/CL.read.1.tlog index 168ffd1..737bdbd 100644 Binary files a/DMS/Debug/DMS.tlog/CL.read.1.tlog and b/DMS/Debug/DMS.tlog/CL.read.1.tlog differ diff --git a/DMS/Debug/DMS.tlog/CL.write.1.tlog b/DMS/Debug/DMS.tlog/CL.write.1.tlog index 4dbfe5f..0975834 100644 Binary files a/DMS/Debug/DMS.tlog/CL.write.1.tlog and b/DMS/Debug/DMS.tlog/CL.write.1.tlog differ diff --git a/DMS/Debug/cmd.obj b/DMS/Debug/cmd.obj index 598f6c6..2659d08 100644 Binary files a/DMS/Debug/cmd.obj and b/DMS/Debug/cmd.obj differ diff --git a/DMS/Debug/codes.obj b/DMS/Debug/codes.obj index ddb8d97..d878be7 100644 Binary files a/DMS/Debug/codes.obj and b/DMS/Debug/codes.obj differ diff --git a/DMS/Debug/dms_exceptions.obj b/DMS/Debug/dms_exceptions.obj index c783220..9438773 100644 Binary files a/DMS/Debug/dms_exceptions.obj and b/DMS/Debug/dms_exceptions.obj differ diff --git a/DMS/Debug/number_utils.obj b/DMS/Debug/number_utils.obj index 1338745..e6b4462 100644 Binary files a/DMS/Debug/number_utils.obj and b/DMS/Debug/number_utils.obj differ diff --git a/DMS/Debug/utils.obj b/DMS/Debug/utils.obj index 0ece3ae..d53b1fe 100644 Binary files a/DMS/Debug/utils.obj and b/DMS/Debug/utils.obj differ diff --git a/DMS/Debug/value.obj b/DMS/Debug/value.obj index f0e248b..96f5f83 100644 Binary files a/DMS/Debug/value.obj and b/DMS/Debug/value.obj differ diff --git a/DMS/Debug/vc142.idb b/DMS/Debug/vc142.idb index 0099bde..2e2b244 100644 Binary files a/DMS/Debug/vc142.idb and b/DMS/Debug/vc142.idb differ diff --git a/DMS/Debug/vc142.pdb b/DMS/Debug/vc142.pdb index 4076c31..b2d0aad 100644 Binary files a/DMS/Debug/vc142.pdb and b/DMS/Debug/vc142.pdb differ diff --git a/DMS/LineParser.h b/DMS/LineParser.h index aab2c85..3548da2 100644 --- a/DMS/LineParser.h +++ b/DMS/LineParser.h @@ -19,6 +19,8 @@ namespace dms { struct tokenstream { std::vector tokens; size_t pos = 0; + std::stack spos; + std::stack stack; void init(std::vector* ptr); tokens::token next(); void prev(); @@ -29,10 +31,8 @@ namespace dms { 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); - bool restore(size_t p) { - pos = p; - return false; // This is a convience for something I will be doing so much - } + void store(chunk* c); + bool restore(cmd* c, chunk* cnk); }; struct passer { std::string stream; diff --git a/DMS/LineParserMatchProcess.cpp b/DMS/LineParserMatchProcess.cpp index 2d42b10..2e7b488 100644 --- a/DMS/LineParserMatchProcess.cpp +++ b/DMS/LineParserMatchProcess.cpp @@ -9,7 +9,7 @@ namespace dms { Compound DISP */ - lastCall.push("MP_disp"); + //lastCall.push("MP_disp"); if ((isBlock(bt_block) || isBlock(bt_method)) && stream->match(tokens::newline, tokens::string, tokens::newline)) { stream->next(); // Standard consumption std::string msg = stream->next().name; @@ -18,7 +18,7 @@ namespace dms { c->args.push(buildValue()); c->args.push(buildValue(msg)); current_chunk->addCmd(c); // Add the cmd to the current chunk - lastCall.pop(); + //lastCall.pop(); return true; } else if ((isBlock(bt_block) || isBlock(bt_method)) && stream->match(tokens::newline, tokens::name, tokens::colon, tokens::string, tokens::newline)) { @@ -34,7 +34,7 @@ namespace dms { c->args.push(buildValue(msg)); current_chunk->addCmd(c); // Add the cmd to the current chunk // We might have to consume a newline... Depends on what's next - lastCall.pop(); + //lastCall.pop(); return true; } else if ((isBlock(bt_block) || isBlock(bt_method)) && stream->match(tokens::name,tokens::colon,tokens::cbracketo)) { @@ -104,17 +104,17 @@ namespace dms { // emotion: "path" // looks like a simple disp command else if (isBlock(bt_character) && stream->match(tokens::tab, tokens::name, tokens::colon, tokens::string, tokens::newline)) { - lastCall.pop(); + //lastCall.pop(); return true; } // TODO: We still have to implement the compound disp - lastCall.pop(); + //lastCall.pop(); return false; } bool LineParser::match_process_assignment(tokenstream* stream) { // something equals something else lets go - lastCall.push("MP_assignment"); + //lastCall.push("MP_assignment"); if (stream->match(tokens::name,tokens::equal)) { value* var = buildVariable(stream->next().name); // The variable that we will be setting stuff to stream->next(); // Consume the equal @@ -124,46 +124,47 @@ namespace dms { if (match_process_expression(stream, var)) { // Expressions can internally set variables // We actually need to clean up our cmds - lastCall.pop(); + //lastCall.pop(); return true; } else if (match_process_function(stream, var)) { // Functions can internally set variables // We actually need to clean up our cmds - lastCall.pop(); + print("> assign consumed!"); + //lastCall.pop(); return true; } else if (stream->match(tokens::True)) { stream->next(); c->args.push(buildValue(true)); current_chunk->addCmd(c); - lastCall.pop(); + //lastCall.pop(); return true; } else if (stream->match(tokens::False)) { stream->next(); c->args.push(buildValue(false)); current_chunk->addCmd(c); - lastCall.pop(); + //lastCall.pop(); return true; } else if (stream->match(tokens::string)) { c->args.push(buildValue(stream->next().name)); current_chunk->addCmd(c); - lastCall.pop(); + //lastCall.pop(); return true; } else if (stream->match(tokens::nil)) { stream->next(); c->args.push(buildValue()); current_chunk->addCmd(c); - lastCall.pop(); + //lastCall.pop(); return true; } else if (stream->match(tokens::number)) { c->args.push(buildValue(std::stod(stream->next().name))); current_chunk->addCmd(c); - lastCall.pop(); + //lastCall.pop(); return true; } else if (stream->match(tokens::bracketo, tokens::name, tokens::bracketc)) { @@ -172,20 +173,20 @@ namespace dms { c->args.push(buildBlock(stream->next().name)); current_chunk->addCmd(c); stream->next(); - lastCall.pop(); + //lastCall.pop(); return true; } else if (stream->match(tokens::name)) { c->args.push(buildVariable(stream->next().name)); current_chunk->addCmd(c); - lastCall.pop(); + //lastCall.pop(); return true; } else if (stream->match(tokens::newline)) { stream->next(); } } - lastCall.pop(); + //lastCall.pop(); return false; } bool LineParser::match_process_debug(tokenstream* stream) { @@ -212,7 +213,7 @@ namespace dms { return false; } bool LineParser::match_process_choice(tokenstream* stream) { - lastCall.push("MP_choice"); + //lastCall.push("MP_choice"); token temp = stream->peek(); if (temp.raw == codes::CHOI && stream->match(tokens::control,tokens::string)) { // Let's parse choice blocks. @@ -302,10 +303,10 @@ namespace dms { delete cc; if (hasfunc) buildLabel(str); - lastCall.pop(); + //lastCall.pop(); return true; } - lastCall.pop(); + //lastCall.pop(); return false; } @@ -314,7 +315,7 @@ namespace dms { delete[] v; // We didn't need it, lets clean it up! } bool LineParser::match_process_function(tokenstream* stream, value* v, bool nested) { - lastCall.push("MP_function"); + //lastCall.push("MP_function"); /* Functions should be able to handle function calls as arguments, HOWEVER functions cannot be passed as values since they aren't values like they are in other languages! @@ -373,11 +374,17 @@ namespace dms { tokenstream tempstream; // This is a balanced consuming method (()(())) std::vector t = stream->next(tokens::parao, tokens::parac); // Consume and get tokens + token end = t.back(); + t.pop_back(); + t.push_back(token{ tokens::seperator,codes::NOOP,"",t[0].line_num }); + t.push_back(token{ tokens::nil,codes::NOOP,"",t[0].line_num }); + t.push_back(end); tempstream.init(&t); // Turn tokens we consumed into a tokenstream value* tempval; token tok; // This part we add values to the opcodes for the bytecode FUNC val a1 a2 a3 ... an while (tempstream.peek().type != tokens::none) { // End of stream + print("> ", tempstream.peek()); tempval = buildVariable(); tok = tempstream.peek(); if (tempstream.match(tokens::seperator)) { @@ -385,6 +392,9 @@ namespace dms { tempstream.next(); // Consume it cleanup(tempval); // We don't need it } + else if (match_process_expression(&tempstream, tempval)) { + c->args.push(tempval); + } else if (tempstream.match(tokens::string)) { cleanup(tempval); tempval = buildValue(tempstream.next().name); // Get the string @@ -408,9 +418,11 @@ namespace dms { tempval = buildValue(false); c->args.push(tempval); tempstream.next(); - } - else if (match_process_expression(&tempstream, tempval)) { - // We have an expression and its been handled Whoo!!! + } else if (tempstream.match(tokens::nil)){ + cleanup(tempval); + tempval = buildValue(); + c->args.push(tempval); + tempstream.next(); } // Final match this could be a function it might also be an expression else if (match_process_function(&tempstream, tempval)) { @@ -432,7 +444,7 @@ namespace dms { cleanup(tempval); tempstream.next(); current_chunk->addCmd(c); // We push this onto the chunk after all dependants if any have been handled - lastCall.pop(); + //lastCall.pop(); return true; } else { @@ -441,7 +453,7 @@ namespace dms { } } } - lastCall.pop(); + //lastCall.pop(); return false; } bool LineParser::match_process_goto(tokenstream* stream) { @@ -493,14 +505,20 @@ namespace dms { bool LineParser::match_process_IFFF(tokenstream* stream) { return false; // TODO finish this } + void reset(value*& l,codes::op& op, value*& r) { + l = nullptr; + op = codes::NOOP; + r = nullptr; + } bool LineParser::match_process_expression(tokenstream* stream, value* v) { - return false; // I will have to consume for this to work so we need to keep track of what was incase we return false! - size_t start_pos = stream->pos; + stream->store(current_chunk); + cmd* lastcmd = nullptr; + /*if(!current_chunk->cmds.empty()) + lastcmd = current_chunk->cmds.back();*/ // It has to start with one of these 3 to even be considered an expression if (stream->match(tokens::number) || stream->match(tokens::name) || stream->match(tokens::parao)) { // What do we know, math expressions can only be on a single line. We know where to stop looking if we have to - token t = stream->peek(); cmd* c = new cmd; /* * We have a few built-in methods we will have to handle @@ -511,25 +529,151 @@ namespace dms { * POW val v1 v2 * MOD val v1 v2 */ - - token left; // lefthand - token op; // opperator - token right; // righthand + value* wv = nullptr; + value* left; // lefthand + codes::op op; // opperator + value* right; // righthand + reset(left, op, right); + size_t loops = 0; + bool hasOP = false; while (stream->peek().type != tokens::none) { - if (t.type == tokens::parao) { + print(stream->peek()); + if (stream->match(tokens::parao)) { tokenstream temp; temp.init(&(stream->next(tokens::parao, tokens::parac))); // Balanced match! value* tmpvalue = buildVariable(); - match_process_expression(&temp,tmpvalue); + if (match_process_expression(&temp, tmpvalue)) { + if (left == nullptr) + left = tmpvalue; + else if (right == nullptr) + right = tmpvalue; + else + badSymbol(); + } + else { + badSymbol(); + } + // Take that temp value and set it to left or right TODO finish this } - // We have a number - else if (t.type == tokens::number) { - + else if (stream->match(tokens::plus)) { + hasOP = true; + if (op == codes::NOOP) + op = codes::ADD; + else + badSymbol(); + stream->next(); + } + else if (stream->match(tokens::minus)) { + hasOP = true; + if (left == nullptr) { + left = buildValue(0); // -5 is the same as 0-5 right? Also -(5+5) is the same as 0-(5+5) So we good + } + if (op == codes::NOOP) + op = codes::SUB; + else + badSymbol(); + stream->next(); + } + else if (stream->match(tokens::multiply)) { + hasOP = true; + if (op == codes::NOOP) + op = codes::MUL; + else + badSymbol(); + stream->next(); + } + else if (stream->match(tokens::divide)) { + hasOP = true; + if (op == codes::NOOP) + op = codes::DIV; + else + badSymbol(); + stream->next(); + } + else if (stream->match(tokens::percent)) { + hasOP = true; + if (op == codes::NOOP) + op = codes::MOD; + else + badSymbol(); + stream->next(); + } + else if (stream->match(tokens::caret)) { + hasOP = true; + if (op == codes::NOOP) + op = codes::POW; + else + badSymbol(); + stream->next(); + } + else if (stream->match(tokens::name,tokens::parao)) { + //Function template ^^^ If we encounter an issue the method should push an error, incase it misses something we will! + value* tmpvalue = buildVariable(); + if (match_process_function(stream,tmpvalue)) { + if (left == nullptr) + left = tmpvalue; + else if (right == nullptr) + right = tmpvalue; + else + badSymbol(); + } + else { + badSymbol(); + } + } + else if (stream->match(tokens::number)) { + double num = std::stod(stream->next().name); + if (left == nullptr) + left = buildValue(num); + else if (right == nullptr) + right = buildValue(num); + else + badSymbol(); + } + 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! + if (left == nullptr) + left = buildVariable(stream->next().name); + else if (right == nullptr) + right = buildVariable(stream->next().name); + else + badSymbol(); + } + else if (stream->match(tokens::newline) || stream->match(tokens::parac) || stream->match(tokens::seperator)) { + if (wv == nullptr) + return stream->restore(lastcmd, current_chunk); // Always return false and restores the position in stream! + cmd* cc = new cmd; + cc->opcode = codes::ASGN; + cc->args.push(v); + cc->args.push(wv); + current_chunk->addCmd(cc); + if (stream->match(tokens::newline) || stream->match(tokens::parac)) + stream->next(); + // We done! + return true; + } + if (left != nullptr && right != nullptr && op != codes::NOOP) { + cmd* c = new cmd; + c->opcode = op; + if (wv == nullptr) { + value* temp = buildVariable(); + c->args.push(temp); + wv = temp; + } + else { + wv = buildVariable(); + c->args.push(wv); + } + c->args.push(left); + c->args.push(right); + current_chunk->addCmd(c); + reset(left, op, right); + left = wv; } } } else { - return stream->restore(start_pos); // Always return false and restores the position in stream! + return stream->restore(lastcmd, current_chunk); // Always return false and restores the position in stream! } } } \ No newline at end of file diff --git a/DMS/LineParserUtils.cpp b/DMS/LineParserUtils.cpp index fd0ea3d..f5021a7 100644 --- a/DMS/LineParserUtils.cpp +++ b/DMS/LineParserUtils.cpp @@ -16,6 +16,21 @@ namespace dms { void tokenstream::prev() { pos--; } + void tokenstream::store(chunk* c) { + stack.push(c->cmds.size()); + spos.push(pos); + } + bool tokenstream::restore(cmd* c, chunk* cnk) { + pos = spos.top(); + spos.pop(); + size_t temp = stack.top(); + stack.pop(); + if (temp == cnk->cmds.size()) + return false; + + //cnk->cmds.erase(cnk->cmds.begin()+temp, cnk->cmds.end()); + return false; + } std::vector tokenstream::next(tokentype to, tokentype tc) { std::vector tok; size_t open = 0; diff --git a/DMS/codes.cpp b/DMS/codes.cpp index 6c0bc3a..1d4cbec 100644 --- a/DMS/codes.cpp +++ b/DMS/codes.cpp @@ -1,6 +1,6 @@ #pragma once #include "Codes.h" -const std::string dms::codes::list[] = { +const std::string dms::codes::list[] = { "NOOP", "ENTR", "ENAB", @@ -36,5 +36,11 @@ const std::string dms::codes::list[] = { "DACT", "WAIT", "APND", - "SSPK" + "SSPK", + "ADD", + "SUB", + "MUL", + "DIV", + "POW", + "MOD" }; \ No newline at end of file diff --git a/DMS/codes.h b/DMS/codes.h index fff020f..ff60976 100644 --- a/DMS/codes.h +++ b/DMS/codes.h @@ -38,7 +38,13 @@ namespace dms::codes { DACT, WAIT, APND, - SSPK + SSPK, + ADD, + SUB, + MUL, + DIV, + POW, + MOD }; extern const std::string list[]; static bool isControl(const op code) { diff --git a/DMS/dump.bin b/DMS/dump.bin index f024800..64e0cfe 100644 Binary files a/DMS/dump.bin and b/DMS/dump.bin differ diff --git a/DMS/dump.txt b/DMS/dump.txt index 45a4ca8..79ed55e 100644 --- a/DMS/dump.txt +++ b/DMS/dump.txt @@ -33,177 +33,113 @@ Line <9>NOOP name main Line <9>NOOP bracketc Line <9>NOOP newline Line <9>NOOP newline -Line <10>NOOP string hello? +Line <10>NOOP name a +Line <10>NOOP equal +Line <10>NOOP number 100 +Line <10>NOOP plus +Line <10>NOOP name test +Line <10>NOOP parao +Line <10>NOOP number 1 +Line <10>NOOP seperator +Line <10>NOOP number 2 +Line <10>NOOP parac +Line <10>NOOP minus +Line <10>NOOP parao +Line <10>NOOP name test2 +Line <10>NOOP parao +Line <10>NOOP number 52 +Line <10>NOOP plus +Line <10>NOOP name re +Line <10>NOOP seperator +Line <10>NOOP number 44 +Line <10>NOOP minus +Line <10>NOOP name ee +Line <10>NOOP divide +Line <10>NOOP name test +Line <10>NOOP parao +Line <10>NOOP number 1 +Line <10>NOOP seperator +Line <10>NOOP number 3 +Line <10>NOOP parac +Line <10>NOOP seperator +Line <10>NOOP number 55 +Line <10>NOOP minus +Line <10>NOOP number 23 +Line <10>NOOP parac +Line <10>NOOP divide +Line <10>NOOP number 100 +Line <10>NOOP parac Line <10>NOOP newline Line <10>NOOP newline -Line <11>NOOP name var1 -Line <11>NOOP equal -Line <11>NOOP name func -Line <11>NOOP parao -Line <11>NOOP number 1 -Line <11>NOOP seperator -Line <11>NOOP string string -Line <11>NOOP seperator -Line <11>NOOP name test -Line <11>NOOP parao -Line <11>NOOP number 1 -Line <11>NOOP seperator -Line <11>NOOP number 2 -Line <11>NOOP parac -Line <11>NOOP seperator -Line <11>NOOP name test2 -Line <11>NOOP parao -Line <11>NOOP parac -Line <11>NOOP parac +Line <11>NOOP string Break for your eyes ;) Line <11>NOOP newline Line <11>NOOP newline -Line <12>NOOP name a +Line <12>NOOP name tes Line <12>NOOP equal Line <12>NOOP number 100 Line <12>NOOP plus -Line <12>NOOP name func -Line <12>NOOP parao -Line <12>NOOP number 1 -Line <12>NOOP seperator -Line <12>NOOP string string -Line <12>NOOP seperator -Line <12>NOOP number 2 -Line <12>NOOP plus Line <12>NOOP number 5 -Line <12>NOOP parac -Line <12>NOOP plus -Line <12>NOOP number 100 Line <12>NOOP newline Line <12>NOOP newline -Line <13>NOOP name func -Line <13>NOOP parao -Line <13>NOOP number 1 -Line <13>NOOP seperator -Line <13>NOOP string string -Line <13>NOOP seperator -Line <13>NOOP number 2 -Line <13>NOOP plus -Line <13>NOOP number 5 -Line <13>NOOP parac +Line <13>NOOP name gg +Line <13>NOOP equal +Line <13>NOOP true true Line <13>NOOP newline Line <13>NOOP newline -Line <14>NOOP label mylabel +Line <14>NOOP name temp +Line <14>NOOP equal +Line <14>NOOP name func +Line <14>NOOP parao +Line <14>NOOP number 123 +Line <14>NOOP plus +Line <14>NOOP name test +Line <14>NOOP parao +Line <14>NOOP number 1 +Line <14>NOOP seperator +Line <14>NOOP number 2 +Line <14>NOOP parac +Line <14>NOOP seperator +Line <14>NOOP string TEST +Line <14>NOOP parac Line <14>NOOP newline Line <14>NOOP newline Line <15>NOOP newline Line <15>NOOP newline -Line <16>CHOI control -Line <16>NOOP string Pick one: -Line <16>NOOP cbracketo +Line <16>NOOP bracketo +Line <16>NOOP name Bob +Line <16>NOOP colon +Line <16>NOOP name char +Line <16>NOOP bracketc Line <16>NOOP newline Line <16>NOOP newline -Line <17>NOOP string first -Line <17>NOOP name func -Line <17>NOOP parao -Line <17>NOOP number 1 -Line <17>NOOP seperator -Line <17>NOOP number 2 -Line <17>NOOP seperator -Line <17>NOOP number 3 -Line <17>NOOP parac +Line <17>NOOP name age +Line <17>NOOP equal +Line <17>NOOP number 24 Line <17>NOOP newline Line <17>NOOP newline -Line <18>NOOP string second -Line <18>NOOP name func -Line <18>NOOP parao -Line <18>NOOP true true -Line <18>NOOP seperator -Line <18>NOOP false false -Line <18>NOOP parac +Line <18>NOOP name money +Line <18>NOOP equal +Line <18>NOOP number 100 Line <18>NOOP newline Line <18>NOOP newline -Line <19>NOOP string third -Line <19>NOOP name func -Line <19>NOOP parao -Line <19>NOOP string hehe -Line <19>NOOP parac Line <19>NOOP newline Line <19>NOOP newline -Line <20>NOOP string forth -Line <20>NOOP name func +Line <20>NOOP bracketo +Line <20>NOOP name newblock +Line <20>NOOP colon +Line <20>NOOP name function Line <20>NOOP parao -Line <20>NOOP string 1 -Line <20>NOOP seperator -Line <20>NOOP number 2 -Line <20>NOOP seperator -Line <20>NOOP false false Line <20>NOOP parac +Line <20>NOOP bracketc Line <20>NOOP newline Line <20>NOOP newline -Line <21>NOOP string fifth -Line <21>NOOP gotoo -Line <21>NOOP string here +Line <21>NOOP string Test #2 Line <21>NOOP newline Line <21>NOOP newline -Line <22>NOOP string sixth -Line <22>NOOP gotoo -Line <22>NOOP name name +Line <22>NOOP string Does it parse this part properly? Line <22>NOOP newline Line <22>NOOP newline -Line <23>NOOP string sevinth -Line <23>NOOP jump -Line <23>NOOP string there +Line <23>NOOP string huh Line <23>NOOP newline Line <23>NOOP newline -Line <24>NOOP string eight -Line <24>NOOP jump -Line <24>NOOP name name -Line <24>NOOP newline -Line <24>NOOP newline -Line <25>NOOP string nine -Line <25>NOOP name exit -Line <25>NOOP newline -Line <25>NOOP newline -Line <26>NOOP string ten -Line <26>NOOP exit -Line <26>NOOP number 0 -Line <26>NOOP newline -Line <26>NOOP newline -Line <27>NOOP cbracketc -Line <27>NOOP newline -Line <27>NOOP newline -Line <28>NOOP newline -Line <28>NOOP newline -Line <29>NOOP bracketo -Line <29>NOOP name Bob -Line <29>NOOP colon -Line <29>NOOP name char -Line <29>NOOP bracketc -Line <29>NOOP newline -Line <29>NOOP newline -Line <30>NOOP name age -Line <30>NOOP equal -Line <30>NOOP number 24 -Line <30>NOOP newline -Line <30>NOOP newline -Line <31>NOOP name money -Line <31>NOOP equal -Line <31>NOOP number 100 -Line <31>NOOP newline -Line <31>NOOP newline -Line <32>NOOP newline -Line <32>NOOP newline -Line <33>NOOP bracketo -Line <33>NOOP name newblock -Line <33>NOOP colon -Line <33>NOOP name function -Line <33>NOOP parao -Line <33>NOOP parac -Line <33>NOOP bracketc -Line <33>NOOP newline -Line <33>NOOP newline -Line <34>NOOP string Test #2 -Line <34>NOOP newline -Line <34>NOOP newline -Line <35>NOOP string Does it parse this part properly? -Line <35>NOOP newline -Line <35>NOOP newline -Line <36>NOOP string huh -Line <36>NOOP newline -Line <36>NOOP newline -Line <36>NOOP eof +Line <23>NOOP eof diff --git a/DMS/test.dms b/DMS/test.dms index 36d51b6..3332bd3 100644 --- a/DMS/test.dms +++ b/DMS/test.dms @@ -7,24 +7,11 @@ version 1.2 using extendedDefine [main] - "hello?" - var1 = func(1,"string",test(1,2),test2()) - a = 100 + func(1,"string", 2+5) + 100 - func(1,"string", 2+5) - ::mylabel:: - - CHOICE "Pick one:" { - "first" func(1,2,3) - "second" func(true,false) - "third" func("hehe") - "forth" func("1",2,false) - "fifth" goto "here" - "sixth" goto name - "sevinth" jump "there" - "eight" jump name - "nine" exit - "ten" exit 0 - } + a = 100 + test(1,2) - (test2(52+re,44-ee/test(1,3),55-23)/100) + "Break for your eyes ;)" + tes = 100 + 5 + gg = true + temp = func(123+test(1,2),"TEST") [Bob:char] age = 24 diff --git a/Debug/DMS.exe b/Debug/DMS.exe index c12df3f..10bfc89 100644 Binary files a/Debug/DMS.exe and b/Debug/DMS.exe differ diff --git a/Debug/DMS.ilk b/Debug/DMS.ilk index 29264fe..4bb061b 100644 Binary files a/Debug/DMS.ilk and b/Debug/DMS.ilk differ diff --git a/Debug/DMS.pdb b/Debug/DMS.pdb index e8b62d3..a34ce66 100644 Binary files a/Debug/DMS.pdb and b/Debug/DMS.pdb differ