diff --git a/DMS/Debug/DMS.log b/DMS/Debug/DMS.log index 9a61c78..85df714 100644 --- a/DMS/Debug/DMS.log +++ b/DMS/Debug/DMS.log @@ -1,3 +1,8 @@ - LineParserMatchProcess.cpp -F:\VSCWorkspace\DMS\DMS\LineParserMatchProcess.cpp(678): warning C4715: 'dms::LineParser::match_process_expression': not all control paths return a value + DMS.cpp + LineParserBuilds.cpp + LineParserMatchProcess.cpp + LineParserParse.cpp + LineParserUtils.cpp + Generating Code... +F:\VSCWorkspace\DMS\DMS\LineParserMatchProcess.cpp(693): 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 4add843..1fdbfb3 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 5651a64..3658295 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 737bdbd..300e990 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 0975834..2527e7a 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 2659d08..d584cb6 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 d878be7..6beea59 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 9438773..175481b 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 e6b4462..d7f933d 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 d53b1fe..7cf0ce9 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 96f5f83..06ea2eb 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 2e2b244..2cebbc4 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 b2d0aad..06ab4d5 100644 Binary files a/DMS/Debug/vc142.pdb and b/DMS/Debug/vc142.pdb differ diff --git a/DMS/LineParserMatchProcess.cpp b/DMS/LineParserMatchProcess.cpp index 2e7b488..8df040b 100644 --- a/DMS/LineParserMatchProcess.cpp +++ b/DMS/LineParserMatchProcess.cpp @@ -29,8 +29,12 @@ namespace dms { stream->next(); // That colon std::string msg = stream->next().name; cmd* c = new cmd; - c->opcode = codes::DISP; + c->opcode = codes::SSPK; c->args.push(buildVariable(name)); + current_chunk->addCmd(c); + c = new cmd; + c->opcode = codes::DISP; + c->args.push(buildValue()); 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 @@ -43,6 +47,12 @@ namespace dms { c->opcode = codes::SSPK; c->args.push(buildVariable(name)); current_chunk->addCmd(c); + // Reset the display for the new speaker. Append can be used! + c = new cmd; + c->opcode = codes::DISP; + c->args.push(buildValue()); + c->args.push(buildValue(std::string(""))); + current_chunk->addCmd(c); // Command to set the speaker stream->next(); stream->next(); @@ -56,6 +66,7 @@ namespace dms { } else { badSymbol(stream); + return false; } } else if (mode == "wait") { @@ -68,7 +79,10 @@ namespace dms { } else { // Assume we have a dact - if (stream->match(tokens::string)) { + if (stream->match(tokens::string) || stream->match(tokens::colon,tokens::string)) { + if (stream->match(tokens::colon)) { + stream->next(); + } cmd* c = new cmd; c->opcode = codes::DACT; c->args.push(buildValue(mode)); @@ -84,7 +98,6 @@ namespace dms { return false; } } - return true; } else if (stream->match(tokens::string)) { cmd* c = new cmd; @@ -100,6 +113,8 @@ namespace dms { return false; } } + print(stream->next()); + return true; } // emotion: "path" // looks like a simple disp command diff --git a/DMS/LineParserParse.cpp b/DMS/LineParserParse.cpp index 1f37bd9..2aa4f14 100644 --- a/DMS/LineParserParse.cpp +++ b/DMS/LineParserParse.cpp @@ -112,67 +112,67 @@ namespace dms { } else if (data == '[') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::bracketo,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::bracketo,codes::NOOP,"[",line }); } else if (data == ']') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::bracketc,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::bracketc,codes::NOOP,"]",line }); } else if (data == '(') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::parao,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::parao,codes::NOOP,"(",line }); } else if (data == ')') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::parac,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::parac,codes::NOOP,")",line }); } else if (data == ',') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::seperator,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::seperator,codes::NOOP,",",line }); } else if (data == '.') { //doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::dot,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::dot,codes::NOOP,".",line }); } else if (data == '{') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::cbracketo,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::cbracketo,codes::NOOP,"{",line }); } else if (data == '}') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::cbracketc,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::cbracketc,codes::NOOP,"}",line }); } else if (data == '+') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::plus,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::plus,codes::NOOP,"+",line }); } else if (data == '-') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::minus,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::minus,codes::NOOP,"-",line }); } else if (data == '*') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::multiply,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::multiply,codes::NOOP,"*",line }); } else if (data == '/') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::divide,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::divide,codes::NOOP,"/",line }); } else if (data == '^') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::caret,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::caret,codes::NOOP,"^",line }); } else if (data == '%') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::percent,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::percent,codes::NOOP,"%",line }); } else if (data == '=') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::equal,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::equal,codes::NOOP,"=",line }); } else if (data == ':') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::colon,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::colon,codes::NOOP,":",line }); } else if (data == ';') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); @@ -180,35 +180,35 @@ namespace dms { } else if (data == '!') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::exclamation,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::exclamation,codes::NOOP,"!",line }); } else if (data == '~') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::tilde,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::tilde,codes::NOOP,"~",line }); } else if (data == '`') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::backtick,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::backtick,codes::NOOP,"`",line }); } else if (data == '@') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::at,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::at,codes::NOOP,"@",line }); } else if (data == '#') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::pound,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::pound,codes::NOOP,"#",line }); } else if (data == '$') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::dollar,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::dollar,codes::NOOP,"$",line }); } else if (data == '&') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::ampersand,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::ampersand,codes::NOOP,"&",line }); } else if (data == '\t') { doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); - t_vec.push_back(token{ tokens::tab,codes::NOOP,"",line }); + t_vec.push_back(token{ tokens::tab,codes::NOOP,"\t",line }); } if (data == ' ' && !isStr) { // tokens end with a space diff --git a/DMS/LineParserUtils.cpp b/DMS/LineParserUtils.cpp index f5021a7..5633c43 100644 --- a/DMS/LineParserUtils.cpp +++ b/DMS/LineParserUtils.cpp @@ -180,7 +180,7 @@ namespace dms { state->push_error(errors::error{ err,concat("Unexpected symbol '",stream->next().toString(),"'"),true,stream->peek().line_num,current_chunk }); } void LineParser::badSymbol(tokenstream* stream) { - state->push_error(errors::error{ errors::unknown,concat("Unexpected symbol '",stream->next().toString(),"' RAW:",stream->last(), " Last Call: ",lastCall.top()),true,stream->peek().line_num,current_chunk }); + state->push_error(errors::error{ errors::unknown,concat("Unexpected symbol '",stream->next().toString(),"' RAW:",stream->last()),true,stream->peek().line_num,current_chunk }); } void LineParser::badSymbol() { state->push_error(errors::error{ errors::unknown,concat("Unexpected symbol '",_stream->next().toString(),"'"),true,_stream->peek().line_num,current_chunk }); @@ -213,6 +213,10 @@ namespace dms { current_chunk->name = bk_name; chunk_type = bk_type; current_chunk->type = bk_type; + + cmd* c = new cmd; + c->opcode = codes::NOOP; + current_chunk->addCmd(c); return true; } void LineParser::tokenizer(dms_state* state,std::vector &toks) { diff --git a/DMS/dump.bin b/DMS/dump.bin index 64e0cfe..95d9362 100644 Binary files a/DMS/dump.bin and b/DMS/dump.bin differ diff --git a/DMS/dump.txt b/DMS/dump.txt index 79ed55e..70b5719 100644 --- a/DMS/dump.txt +++ b/DMS/dump.txt @@ -1,145 +1,128 @@ Token Dump: -Line <1>NOOP newline -Line <1>NOOP newline -Line <1>ENTR flag -Line <1>NOOP name main -Line <1>NOOP newline -Line <1>NOOP newline -Line <2>ENAB flag -Line <2>NOOP name warnings -Line <2>NOOP newline -Line <2>NOOP newline -Line <3>DISA flag -Line <3>NOOP name omniscient -Line <3>NOOP newline -Line <3>NOOP newline -Line <4>ENAB flag -Line <4>NOOP name debugging -Line <4>NOOP newline -Line <4>NOOP newline -Line <5>NOOP newline -Line <6>VERN flag -Line <6>NOOP number 1.2 -Line <6>NOOP newline -Line <6>NOOP newline -Line <7>USIN flag -Line <7>NOOP name extendedDefine -Line <7>NOOP newline -Line <7>NOOP newline -Line <8>NOOP newline -Line <8>NOOP newline -Line <9>NOOP bracketo -Line <9>NOOP name main -Line <9>NOOP bracketc -Line <9>NOOP newline -Line <9>NOOP newline -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 string Break for your eyes ;) -Line <11>NOOP newline -Line <11>NOOP newline -Line <12>NOOP name tes -Line <12>NOOP equal -Line <12>NOOP number 100 -Line <12>NOOP plus -Line <12>NOOP number 5 -Line <12>NOOP newline -Line <12>NOOP newline -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 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>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 name age -Line <17>NOOP equal -Line <17>NOOP number 24 -Line <17>NOOP newline -Line <17>NOOP newline -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 newline -Line <19>NOOP newline -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 parac -Line <20>NOOP bracketc -Line <20>NOOP newline -Line <20>NOOP newline -Line <21>NOOP string Test #2 -Line <21>NOOP newline -Line <21>NOOP newline -Line <22>NOOP string Does it parse this part properly? -Line <22>NOOP newline -Line <22>NOOP newline -Line <23>NOOP string huh -Line <23>NOOP newline -Line <23>NOOP newline -Line <23>NOOP eof +Line <1> newline +Line <1> newline +Line <1> flag +Line <1> name main +Line <1> newline +Line <1> newline +Line <2> flag +Line <2> name warnings +Line <2> newline +Line <2> newline +Line <3> flag +Line <3> name omniscient +Line <3> newline +Line <3> newline +Line <4> flag +Line <4> name debugging +Line <4> newline +Line <4> newline +Line <5> newline +Line <6> flag +Line <6> number 1.2 +Line <6> newline +Line <6> newline +Line <7> flag +Line <7> name extendedDefine +Line <7> newline +Line <7> newline +Line <8> newline +Line <8> newline +Line <9> bracketo [ +Line <9> name main +Line <9> bracketc ] +Line <9> newline +Line <9> newline +Line <10> string Testing +Line <10> newline +Line <10> newline +Line <11> name Bob +Line <11> colon : +Line <11> cbracketo { +Line <11> newline +Line <11> newline +Line <12> name speed +Line <12> number 50 +Line <12> newline +Line <12> newline +Line <13> name excited +Line <13> multiply * +Line <13> string Hello Ryan! +Line <13> newline +Line <13> newline +Line <14> name wait +Line <14> number 200 +Line <14> newline +Line <14> newline +Line <15> string How are you doing? +Line <15> newline +Line <15> newline +Line <16> cbracketc } +Line <16> newline +Line <16> newline +Line <17> newline +Line <17> newline +Line <18> name Ryan +Line <18> colon : +Line <18> cbracketo { +Line <18> newline +Line <18> newline +Line <19> string Hey Bob I'm good how are you? +Line <19> newline +Line <19> newline +Line <20> cbracketc } +Line <20> newline +Line <20> newline +Line <21> newline +Line <21> newline +Line <22> name Bob +Line <22> colon : +Line <22> string Testing... +Line <22> newline +Line <22> newline +Line <23> newline +Line <23> newline +Line <24> bracketo [ +Line <24> name Bob +Line <24> colon : +Line <24> name char +Line <24> bracketc ] +Line <24> newline +Line <24> newline +Line <25> name age +Line <25> equal = +Line <25> number 24 +Line <25> newline +Line <25> newline +Line <26> name money +Line <26> equal = +Line <26> number 100 +Line <26> newline +Line <26> newline +Line <27> name excited +Line <27> colon : +Line <27> string path/to/file +Line <27> name function +Line <27> newline +Line <27> newline +Line <28> newline +Line <28> newline +Line <29> bracketo [ +Line <29> name newblock +Line <29> colon : +Line <29> name function +Line <29> parao ( +Line <29> parac ) +Line <29> bracketc ] +Line <29> newline +Line <29> newline +Line <30> string Test #2 +Line <30> newline +Line <30> newline +Line <31> string Does it parse this part properly? +Line <31> newline +Line <31> newline +Line <32> string huh +Line <32> newline +Line <32> newline +Line <32> eof diff --git a/DMS/test.dms b/DMS/test.dms index 3332bd3..77a54f0 100644 --- a/DMS/test.dms +++ b/DMS/test.dms @@ -7,15 +7,24 @@ version 1.2 using extendedDefine [main] - 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") + "Testing" + Bob: { + speed 50 + excited: "Hello Ryan! " + wait 200 + "How are you doing?" + } + + Ryan: { + "Hey Bob I'm good how are you?" + } + + Bob: "Testing..." [Bob:char] age = 24 money = 100 + excited: "path/to/file" | function [newblock:function()] "Test #2" diff --git a/DMS/token.h b/DMS/token.h index eed80c2..c485bcc 100644 --- a/DMS/token.h +++ b/DMS/token.h @@ -121,7 +121,7 @@ namespace dms::tokens { "ampersand", "nil" }; - out << "Line <" << c.line_num << ">" << codes::list[(int)c.raw] << " " << tokenlist[c.type] << " \t\t " << c.name; + out << "Line <" << c.line_num << "> " << tokenlist[c.type] << " \t\t " << c.name; return out; } }; diff --git a/Debug/DMS.exe b/Debug/DMS.exe index 10bfc89..cf7a0f6 100644 Binary files a/Debug/DMS.exe and b/Debug/DMS.exe differ diff --git a/Debug/DMS.ilk b/Debug/DMS.ilk index 4bb061b..6d4fee1 100644 Binary files a/Debug/DMS.ilk and b/Debug/DMS.ilk differ diff --git a/Debug/DMS.pdb b/Debug/DMS.pdb index a34ce66..a6ad3ac 100644 Binary files a/Debug/DMS.pdb and b/Debug/DMS.pdb differ