Implemented goto and jump as functons
This commit is contained in:
parent
34208eacff
commit
e534274d09
@ -79,6 +79,7 @@ namespace dms {
|
|||||||
|
|
||||||
// Build
|
// Build
|
||||||
void buildGoto(std::string g, bool v = false);
|
void buildGoto(std::string g, bool v = false);
|
||||||
|
void buildJump(std::string j, bool v = false);
|
||||||
void buildNoop();
|
void buildNoop();
|
||||||
void buildLabel(std::string l);
|
void buildLabel(std::string l);
|
||||||
void buildSpeed(double s);
|
void buildSpeed(double s);
|
||||||
|
|||||||
@ -11,6 +11,17 @@ namespace dms {
|
|||||||
}
|
}
|
||||||
current_chunk->addCmd(c);
|
current_chunk->addCmd(c);
|
||||||
}
|
}
|
||||||
|
void LineParser::buildJump(std::string g, bool v) {
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::JUMP;
|
||||||
|
if (v) {
|
||||||
|
c->args.push(value(g, datatypes::variable));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
c->args.push(value(g));
|
||||||
|
}
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
}
|
||||||
void LineParser::buildNoop() {
|
void LineParser::buildNoop() {
|
||||||
cmd* c = new cmd;
|
cmd* c = new cmd;
|
||||||
c->opcode = codes::NOOP;
|
c->opcode = codes::NOOP;
|
||||||
|
|||||||
@ -486,9 +486,10 @@ namespace dms {
|
|||||||
|
|
||||||
That's all there is to functions within the bytecode side of things, the vm is where things are a little more involved
|
That's all there is to functions within the bytecode side of things, the vm is where things are a little more involved
|
||||||
*/
|
*/
|
||||||
if (stream->match(tokens::name, tokens::parao)) {
|
if (stream->match(tokens::name, tokens::parao) || stream->match(tokens::gotoo, tokens::parao) || stream->match(tokens::name, tokens::jump)) {
|
||||||
cmd* c = new cmd;
|
cmd* c = new cmd;
|
||||||
c->opcode = codes::FUNC;
|
c->opcode = codes::FUNC;
|
||||||
|
token tokn = stream->peek();
|
||||||
std::string n = stream->next().name;
|
std::string n = stream->next().name;
|
||||||
c->args.push(value(n,datatypes::variable)); // Set the func identifier as the first variable
|
c->args.push(value(n,datatypes::variable)); // Set the func identifier as the first variable
|
||||||
// Let's set the target
|
// Let's set the target
|
||||||
@ -513,6 +514,30 @@ namespace dms {
|
|||||||
t.push_back(token{ tokens::nil,codes::NOOP,"",t[0].line_num });
|
t.push_back(token{ tokens::nil,codes::NOOP,"",t[0].line_num });
|
||||||
t.push_back(end);
|
t.push_back(end);
|
||||||
tempstream.init(&t); // Turn tokens we consumed into a tokenstream
|
tempstream.init(&t); // Turn tokens we consumed into a tokenstream
|
||||||
|
if (tokn.type==tokens::gotoo) {
|
||||||
|
if (tempstream.match(tokens::string) || tempstream.match(tokens::gotoo)) {
|
||||||
|
buildGoto(tempstream.next().name);
|
||||||
|
buildNoop();
|
||||||
|
delete c;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
badSymbol(&tempstream);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (tokn.type == tokens::jump) {
|
||||||
|
if (tempstream.match(tokens::string) || tempstream.match(tokens::jump)) {
|
||||||
|
buildJump(tempstream.next().name);
|
||||||
|
buildNoop();
|
||||||
|
delete c;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
badSymbol(&tempstream);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
value tempval;
|
value tempval;
|
||||||
token tok;
|
token tok;
|
||||||
value ref = value(datatypes::variable);
|
value ref = value(datatypes::variable);
|
||||||
|
|||||||
BIN
DMS/dump.bin
BIN
DMS/dump.bin
Binary file not shown.
163
DMS/dump.txt
163
DMS/dump.txt
@ -79,144 +79,145 @@ Line <20> gotoo
|
|||||||
Line <20> string this
|
Line <20> string this
|
||||||
Line <20> newline
|
Line <20> newline
|
||||||
Line <20> newline
|
Line <20> newline
|
||||||
Line <21> string test2
|
Line <21> string that
|
||||||
Line <21> name tryme
|
Line <21> gotoo
|
||||||
Line <21> parao (
|
Line <21> parao (
|
||||||
Line <21> true true
|
Line <21> string that
|
||||||
Line <21> parac )
|
Line <21> parac )
|
||||||
Line <21> newline
|
Line <21> newline
|
||||||
Line <21> newline
|
Line <21> newline
|
||||||
Line <22> string that
|
Line <22> cbracketc }
|
||||||
Line <22> gotoo
|
|
||||||
Line <22> string that
|
|
||||||
Line <22> newline
|
Line <22> newline
|
||||||
Line <22> newline
|
Line <22> newline
|
||||||
Line <23> string test
|
Line <23> label this
|
||||||
Line <23> name test
|
|
||||||
Line <23> parao (
|
|
||||||
Line <23> number 1
|
|
||||||
Line <23> seperator ,
|
|
||||||
Line <23> number 2
|
|
||||||
Line <23> seperator ,
|
|
||||||
Line <23> number 3
|
|
||||||
Line <23> parac )
|
|
||||||
Line <23> newline
|
Line <23> newline
|
||||||
Line <23> newline
|
Line <23> newline
|
||||||
Line <24> cbracketc }
|
Line <24> string At "this"
|
||||||
Line <24> newline
|
Line <24> newline
|
||||||
Line <24> newline
|
Line <24> newline
|
||||||
Line <25> label this
|
Line <25> gotoo
|
||||||
|
Line <25> parao (
|
||||||
|
Line <25> string loop
|
||||||
|
Line <25> parac )
|
||||||
Line <25> newline
|
Line <25> newline
|
||||||
Line <25> newline
|
Line <25> newline
|
||||||
Line <26> string At "this"
|
Line <26> label that
|
||||||
Line <26> newline
|
Line <26> newline
|
||||||
Line <26> newline
|
Line <26> newline
|
||||||
Line <27> gotoo
|
Line <27> string At "that"
|
||||||
Line <27> string loop
|
|
||||||
Line <27> newline
|
Line <27> newline
|
||||||
Line <27> newline
|
Line <27> newline
|
||||||
Line <28> label that
|
Line <28> label loop
|
||||||
Line <28> newline
|
Line <28> newline
|
||||||
Line <28> newline
|
Line <28> newline
|
||||||
Line <29> string At "that"
|
Line <29> name a
|
||||||
|
Line <29> equal =
|
||||||
|
Line <29> name a
|
||||||
|
Line <29> plus +
|
||||||
|
Line <29> number 1
|
||||||
Line <29> newline
|
Line <29> newline
|
||||||
Line <29> newline
|
Line <29> newline
|
||||||
Line <30> label loop
|
Line <30> string a = `a`
|
||||||
Line <30> newline
|
Line <30> newline
|
||||||
Line <30> newline
|
Line <30> newline
|
||||||
Line <31> name a
|
Line <31> gotoo
|
||||||
Line <31> equal =
|
Line <31> parao (
|
||||||
Line <31> name a
|
Line <31> string loop
|
||||||
Line <31> plus +
|
Line <31> parac )
|
||||||
Line <31> number 1
|
|
||||||
Line <31> newline
|
Line <31> newline
|
||||||
Line <31> newline
|
Line <31> newline
|
||||||
Line <32> string a = `a`
|
|
||||||
Line <32> newline
|
Line <32> newline
|
||||||
Line <32> newline
|
|
||||||
Line <33> gotoo
|
|
||||||
Line <33> string loop
|
|
||||||
Line <33> newline
|
Line <33> newline
|
||||||
Line <33> newline
|
Line <33> newline
|
||||||
Line <34> newline
|
Line <34> newline
|
||||||
Line <34> newline
|
|
||||||
Line <35> bracketo [
|
|
||||||
Line <35> name Bob
|
|
||||||
Line <35> colon :
|
|
||||||
Line <35> name char
|
|
||||||
Line <35> bracketc ]
|
|
||||||
Line <35> newline
|
Line <35> newline
|
||||||
Line <35> newline
|
Line <35> newline
|
||||||
Line <36> newline
|
Line <36> newline
|
||||||
Line <37> newline
|
Line <37> newline
|
||||||
|
Line <37> newline
|
||||||
Line <38> newline
|
Line <38> newline
|
||||||
Line <39> name unknown
|
|
||||||
Line <39> equal =
|
|
||||||
Line <39> string Some Random Guy
|
|
||||||
Line <39> newline
|
Line <39> newline
|
||||||
Line <39> newline
|
Line <39> newline
|
||||||
Line <40> name age
|
|
||||||
Line <40> equal =
|
|
||||||
Line <40> number 0.24
|
|
||||||
Line <40> newline
|
Line <40> newline
|
||||||
Line <40> newline
|
|
||||||
Line <41> name money
|
|
||||||
Line <41> equal =
|
|
||||||
Line <41> number 100
|
|
||||||
Line <41> newline
|
Line <41> newline
|
||||||
Line <41> newline
|
Line <41> newline
|
||||||
Line <42> name excited
|
Line <42> bracketo [
|
||||||
|
Line <42> name Bob
|
||||||
Line <42> colon :
|
Line <42> colon :
|
||||||
Line <42> string path/to/file
|
Line <42> name char
|
||||||
|
Line <42> bracketc ]
|
||||||
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 test1
|
|
||||||
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 <45> string Inside a function!
|
|
||||||
Line <45> newline
|
|
||||||
Line <45> newline
|
Line <45> newline
|
||||||
|
Line <46> name unknown
|
||||||
|
Line <46> equal =
|
||||||
|
Line <46> string Some Random Guy
|
||||||
Line <46> newline
|
Line <46> newline
|
||||||
|
Line <46> newline
|
||||||
|
Line <47> name age
|
||||||
|
Line <47> equal =
|
||||||
|
Line <47> number 0.24
|
||||||
Line <47> newline
|
Line <47> newline
|
||||||
|
Line <47> newline
|
||||||
|
Line <48> name money
|
||||||
|
Line <48> equal =
|
||||||
|
Line <48> number 100
|
||||||
Line <48> newline
|
Line <48> newline
|
||||||
Line <48> newline
|
Line <48> newline
|
||||||
Line <49> bracketo [
|
Line <49> name excited
|
||||||
Line <49> name newblock
|
|
||||||
Line <49> colon :
|
Line <49> colon :
|
||||||
Line <49> name function
|
Line <49> string path/to/file
|
||||||
Line <49> parao (
|
|
||||||
Line <49> name a
|
|
||||||
Line <49> seperator ,
|
|
||||||
Line <49> name b
|
|
||||||
Line <49> seperator ,
|
|
||||||
Line <49> name c
|
|
||||||
Line <49> parac )
|
|
||||||
Line <49> bracketc ]
|
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
Line <50> string Func Arguments: a = `a`, b = `b`, c = `c`
|
|
||||||
Line <50> newline
|
Line <50> newline
|
||||||
Line <50> newline
|
Line <50> newline
|
||||||
Line <51> string Time to return
|
Line <51> bracketo [
|
||||||
|
Line <51> name test1
|
||||||
|
Line <51> colon :
|
||||||
|
Line <51> name function
|
||||||
|
Line <51> parao (
|
||||||
|
Line <51> parac )
|
||||||
|
Line <51> bracketc ]
|
||||||
Line <51> newline
|
Line <51> newline
|
||||||
Line <51> newline
|
Line <51> newline
|
||||||
Line <52> ret
|
Line <52> string Inside a function!
|
||||||
Line <52> name a
|
|
||||||
Line <52> plus +
|
|
||||||
Line <52> name b
|
|
||||||
Line <52> plus +
|
|
||||||
Line <52> name c
|
|
||||||
Line <52> newline
|
Line <52> newline
|
||||||
Line <52> newline
|
Line <52> newline
|
||||||
Line <52> eof
|
Line <53> newline
|
||||||
|
Line <54> newline
|
||||||
|
Line <55> newline
|
||||||
|
Line <55> newline
|
||||||
|
Line <56> bracketo [
|
||||||
|
Line <56> name newblock
|
||||||
|
Line <56> colon :
|
||||||
|
Line <56> name function
|
||||||
|
Line <56> parao (
|
||||||
|
Line <56> name a
|
||||||
|
Line <56> seperator ,
|
||||||
|
Line <56> name b
|
||||||
|
Line <56> seperator ,
|
||||||
|
Line <56> name c
|
||||||
|
Line <56> parac )
|
||||||
|
Line <56> bracketc ]
|
||||||
|
Line <56> newline
|
||||||
|
Line <56> newline
|
||||||
|
Line <57> string Func Arguments: a = `a`, b = `b`, c = `c`
|
||||||
|
Line <57> newline
|
||||||
|
Line <57> newline
|
||||||
|
Line <58> string Time to return
|
||||||
|
Line <58> newline
|
||||||
|
Line <58> newline
|
||||||
|
Line <59> ret
|
||||||
|
Line <59> name a
|
||||||
|
Line <59> plus +
|
||||||
|
Line <59> name b
|
||||||
|
Line <59> plus +
|
||||||
|
Line <59> name c
|
||||||
|
Line <59> newline
|
||||||
|
Line <59> newline
|
||||||
|
Line <59> eof
|
||||||
Line <1> newline
|
Line <1> newline
|
||||||
Line <1> newline
|
Line <1> newline
|
||||||
Line <1> bracketo [
|
Line <1> bracketo [
|
||||||
|
|||||||
17
DMS/test.dms
17
DMS/test.dms
@ -18,19 +18,26 @@ using extendedDefine
|
|||||||
"Loop Test... `test`"
|
"Loop Test... `test`"
|
||||||
choice "Pick one" {
|
choice "Pick one" {
|
||||||
"this" goto "this"
|
"this" goto "this"
|
||||||
"test2" tryme(true)
|
"that" goto ("that")
|
||||||
"that" goto "that"
|
|
||||||
"test" test(1,2,3)
|
|
||||||
}
|
}
|
||||||
::this::
|
::this::
|
||||||
"At \"this\""
|
"At \"this\""
|
||||||
goto "loop"
|
goto ("loop")
|
||||||
::that::
|
::that::
|
||||||
"At \"that\""
|
"At \"that\""
|
||||||
::loop::
|
::loop::
|
||||||
a = a + 1
|
a = a + 1
|
||||||
"a = `a`"
|
"a = `a`"
|
||||||
goto "loop"
|
goto ("loop")
|
||||||
|
// if (this==that) this()|that()
|
||||||
|
|
||||||
|
// if(this == that){
|
||||||
|
|
||||||
|
// } else if (that > this) {
|
||||||
|
|
||||||
|
// } else {
|
||||||
|
|
||||||
|
// }
|
||||||
|
|
||||||
[Bob:char]
|
[Bob:char]
|
||||||
//fname = "Bob"
|
//fname = "Bob"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user