Fixed some bugs. Will work on dialogue stuff more

This commit is contained in:
Ryan Ward 2020-09-12 21:09:07 -04:00
parent feb877ff40
commit 88c73f0a29
23 changed files with 196 additions and 180 deletions

View File

@ -1,3 +1,8 @@
 LineParserMatchProcess.cpp  DMS.cpp
F:\VSCWorkspace\DMS\DMS\LineParserMatchProcess.cpp(678): warning C4715: 'dms::LineParser::match_process_expression': not all control paths return a value 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 DMS.vcxproj -> F:\VSCWorkspace\DMS\Debug\DMS.exe

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -29,8 +29,12 @@ namespace dms {
stream->next(); // That colon stream->next(); // That colon
std::string msg = stream->next().name; std::string msg = stream->next().name;
cmd* c = new cmd; cmd* c = new cmd;
c->opcode = codes::DISP; c->opcode = codes::SSPK;
c->args.push(buildVariable(name)); 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)); c->args.push(buildValue(msg));
current_chunk->addCmd(c); // Add the cmd to the current chunk current_chunk->addCmd(c); // Add the cmd to the current chunk
// We might have to consume a newline... Depends on what's next // We might have to consume a newline... Depends on what's next
@ -43,6 +47,12 @@ namespace dms {
c->opcode = codes::SSPK; c->opcode = codes::SSPK;
c->args.push(buildVariable(name)); c->args.push(buildVariable(name));
current_chunk->addCmd(c); 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 // Command to set the speaker
stream->next(); stream->next();
stream->next(); stream->next();
@ -56,6 +66,7 @@ namespace dms {
} }
else { else {
badSymbol(stream); badSymbol(stream);
return false;
} }
} }
else if (mode == "wait") { else if (mode == "wait") {
@ -68,7 +79,10 @@ namespace dms {
} }
else { else {
// Assume we have a dact // 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; cmd* c = new cmd;
c->opcode = codes::DACT; c->opcode = codes::DACT;
c->args.push(buildValue(mode)); c->args.push(buildValue(mode));
@ -84,7 +98,6 @@ namespace dms {
return false; return false;
} }
} }
return true;
} }
else if (stream->match(tokens::string)) { else if (stream->match(tokens::string)) {
cmd* c = new cmd; cmd* c = new cmd;
@ -100,6 +113,8 @@ namespace dms {
return false; return false;
} }
} }
print(stream->next());
return true;
} }
// emotion: "path" // emotion: "path"
// looks like a simple disp command // looks like a simple disp command

View File

@ -112,67 +112,67 @@ namespace dms {
} }
else if (data == '[') { else if (data == '[') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == ']') { else if (data == ']') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '(') { else if (data == '(') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == ')') { else if (data == ')') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == ',') { else if (data == ',') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '.') { else if (data == '.') {
//doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); //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 == '{') { else if (data == '{') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '}') { else if (data == '}') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '+') { else if (data == '+') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '-') { else if (data == '-') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '*') { else if (data == '*') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '/') { else if (data == '/') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '^') { else if (data == '^') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '%') { else if (data == '%') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '=') { else if (data == '=') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == ':') { else if (data == ':') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == ';') { else if (data == ';') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer);
@ -180,35 +180,35 @@ namespace dms {
} }
else if (data == '!') { else if (data == '!') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '~') { else if (data == '~') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '`') { else if (data == '`') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '@') { else if (data == '@') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '#') { else if (data == '#') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '$') { else if (data == '$') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 == '&') { else if (data == '&') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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') { else if (data == '\t') {
doCheck(&stream, &t_vec, line, isNum, hasDec, &buffer); 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 if (data == ' ' && !isStr) { // tokens end with a space

View File

@ -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 }); state->push_error(errors::error{ err,concat("Unexpected symbol '",stream->next().toString(),"'"),true,stream->peek().line_num,current_chunk });
} }
void LineParser::badSymbol(tokenstream* stream) { 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() { void LineParser::badSymbol() {
state->push_error(errors::error{ errors::unknown,concat("Unexpected symbol '",_stream->next().toString(),"'"),true,_stream->peek().line_num,current_chunk }); 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; current_chunk->name = bk_name;
chunk_type = bk_type; chunk_type = bk_type;
current_chunk->type = bk_type; current_chunk->type = bk_type;
cmd* c = new cmd;
c->opcode = codes::NOOP;
current_chunk->addCmd(c);
return true; return true;
} }
void LineParser::tokenizer(dms_state* state,std::vector<token> &toks) { void LineParser::tokenizer(dms_state* state,std::vector<token> &toks) {

Binary file not shown.

View File

@ -1,145 +1,128 @@
Token Dump: Token Dump:
Line <1>NOOP newline Line <1> newline
Line <1>NOOP newline Line <1> newline
Line <1>ENTR flag Line <1> flag
Line <1>NOOP name main Line <1> name main
Line <1>NOOP newline Line <1> newline
Line <1>NOOP newline Line <1> newline
Line <2>ENAB flag Line <2> flag
Line <2>NOOP name warnings Line <2> name warnings
Line <2>NOOP newline Line <2> newline
Line <2>NOOP newline Line <2> newline
Line <3>DISA flag Line <3> flag
Line <3>NOOP name omniscient Line <3> name omniscient
Line <3>NOOP newline Line <3> newline
Line <3>NOOP newline Line <3> newline
Line <4>ENAB flag Line <4> flag
Line <4>NOOP name debugging Line <4> name debugging
Line <4>NOOP newline Line <4> newline
Line <4>NOOP newline Line <4> newline
Line <5>NOOP newline Line <5> newline
Line <6>VERN flag Line <6> flag
Line <6>NOOP number 1.2 Line <6> number 1.2
Line <6>NOOP newline Line <6> newline
Line <6>NOOP newline Line <6> newline
Line <7>USIN flag Line <7> flag
Line <7>NOOP name extendedDefine Line <7> name extendedDefine
Line <7>NOOP newline Line <7> newline
Line <7>NOOP newline Line <7> newline
Line <8>NOOP newline Line <8> newline
Line <8>NOOP newline Line <8> newline
Line <9>NOOP bracketo Line <9> bracketo [
Line <9>NOOP name main Line <9> name main
Line <9>NOOP bracketc Line <9> bracketc ]
Line <9>NOOP newline Line <9> newline
Line <9>NOOP newline Line <9> newline
Line <10>NOOP name a Line <10> string Testing
Line <10>NOOP equal Line <10> newline
Line <10>NOOP number 100 Line <10> newline
Line <10>NOOP plus Line <11> name Bob
Line <10>NOOP name test Line <11> colon :
Line <10>NOOP parao Line <11> cbracketo {
Line <10>NOOP number 1 Line <11> newline
Line <10>NOOP seperator Line <11> newline
Line <10>NOOP number 2 Line <12> name speed
Line <10>NOOP parac Line <12> number 50
Line <10>NOOP minus Line <12> newline
Line <10>NOOP parao Line <12> newline
Line <10>NOOP name test2 Line <13> name excited
Line <10>NOOP parao Line <13> multiply *
Line <10>NOOP number 52 Line <13> string Hello Ryan!
Line <10>NOOP plus Line <13> newline
Line <10>NOOP name re Line <13> newline
Line <10>NOOP seperator Line <14> name wait
Line <10>NOOP number 44 Line <14> number 200
Line <10>NOOP minus Line <14> newline
Line <10>NOOP name ee Line <14> newline
Line <10>NOOP divide Line <15> string How are you doing?
Line <10>NOOP name test Line <15> newline
Line <10>NOOP parao Line <15> newline
Line <10>NOOP number 1 Line <16> cbracketc }
Line <10>NOOP seperator Line <16> newline
Line <10>NOOP number 3 Line <16> newline
Line <10>NOOP parac Line <17> newline
Line <10>NOOP seperator Line <17> newline
Line <10>NOOP number 55 Line <18> name Ryan
Line <10>NOOP minus Line <18> colon :
Line <10>NOOP number 23 Line <18> cbracketo {
Line <10>NOOP parac Line <18> newline
Line <10>NOOP divide Line <18> newline
Line <10>NOOP number 100 Line <19> string Hey Bob I'm good how are you?
Line <10>NOOP parac Line <19> newline
Line <10>NOOP newline Line <19> newline
Line <10>NOOP newline Line <20> cbracketc }
Line <11>NOOP string Break for your eyes ;) Line <20> newline
Line <11>NOOP newline Line <20> newline
Line <11>NOOP newline Line <21> newline
Line <12>NOOP name tes Line <21> newline
Line <12>NOOP equal Line <22> name Bob
Line <12>NOOP number 100 Line <22> colon :
Line <12>NOOP plus Line <22> string Testing...
Line <12>NOOP number 5 Line <22> newline
Line <12>NOOP newline Line <22> newline
Line <12>NOOP newline Line <23> newline
Line <13>NOOP name gg Line <23> newline
Line <13>NOOP equal Line <24> bracketo [
Line <13>NOOP true true Line <24> name Bob
Line <13>NOOP newline Line <24> colon :
Line <13>NOOP newline Line <24> name char
Line <14>NOOP name temp Line <24> bracketc ]
Line <14>NOOP equal Line <24> newline
Line <14>NOOP name func Line <24> newline
Line <14>NOOP parao Line <25> name age
Line <14>NOOP number 123 Line <25> equal =
Line <14>NOOP plus Line <25> number 24
Line <14>NOOP name test Line <25> newline
Line <14>NOOP parao Line <25> newline
Line <14>NOOP number 1 Line <26> name money
Line <14>NOOP seperator Line <26> equal =
Line <14>NOOP number 2 Line <26> number 100
Line <14>NOOP parac Line <26> newline
Line <14>NOOP seperator Line <26> newline
Line <14>NOOP string TEST Line <27> name excited
Line <14>NOOP parac Line <27> colon :
Line <14>NOOP newline Line <27> string path/to/file
Line <14>NOOP newline Line <27> name function
Line <15>NOOP newline Line <27> newline
Line <15>NOOP newline Line <27> newline
Line <16>NOOP bracketo Line <28> newline
Line <16>NOOP name Bob Line <28> newline
Line <16>NOOP colon Line <29> bracketo [
Line <16>NOOP name char Line <29> name newblock
Line <16>NOOP bracketc Line <29> colon :
Line <16>NOOP newline Line <29> name function
Line <16>NOOP newline Line <29> parao (
Line <17>NOOP name age Line <29> parac )
Line <17>NOOP equal Line <29> bracketc ]
Line <17>NOOP number 24 Line <29> newline
Line <17>NOOP newline Line <29> newline
Line <17>NOOP newline Line <30> string Test #2
Line <18>NOOP name money Line <30> newline
Line <18>NOOP equal Line <30> newline
Line <18>NOOP number 100 Line <31> string Does it parse this part properly?
Line <18>NOOP newline Line <31> newline
Line <18>NOOP newline Line <31> newline
Line <19>NOOP newline Line <32> string huh
Line <19>NOOP newline Line <32> newline
Line <20>NOOP bracketo Line <32> newline
Line <20>NOOP name newblock Line <32> eof
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

View File

@ -7,15 +7,24 @@ version 1.2
using extendedDefine using extendedDefine
[main] [main]
a = 100 + test(1,2) - (test2(52+re,44-ee/test(1,3),55-23)/100) "Testing"
"Break for your eyes ;)" Bob: {
tes = 100 + 5 speed 50
gg = true excited: "Hello Ryan! "
temp = func(123+test(1,2),"TEST") wait 200
"How are you doing?"
}
Ryan: {
"Hey Bob I'm good how are you?"
}
Bob: "Testing..."
[Bob:char] [Bob:char]
age = 24 age = 24
money = 100 money = 100
excited: "path/to/file" | function
[newblock:function()] [newblock:function()]
"Test #2" "Test #2"

View File

@ -121,7 +121,7 @@ namespace dms::tokens {
"ampersand", "ampersand",
"nil" "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; return out;
} }
}; };

Binary file not shown.

Binary file not shown.

Binary file not shown.