Implemented simple if's
This commit is contained in:
parent
a2f1995b1d
commit
3f501d4cad
@ -33,7 +33,6 @@ namespace dms {
|
|||||||
c->args.push(value(l));
|
c->args.push(value(l));
|
||||||
current_chunk->addCmd(c);
|
current_chunk->addCmd(c);
|
||||||
current_chunk->addLabel(l);
|
current_chunk->addLabel(l);
|
||||||
utils::debug("Building Label: ",l);
|
|
||||||
}
|
}
|
||||||
void LineParser::buildSpeed(double s) {
|
void LineParser::buildSpeed(double s) {
|
||||||
cmd* c = new cmd;
|
cmd* c = new cmd;
|
||||||
|
|||||||
@ -877,6 +877,7 @@ namespace dms {
|
|||||||
ts.pop_back();
|
ts.pop_back();
|
||||||
tokenstream tmpstream(&ts);
|
tokenstream tmpstream(&ts);
|
||||||
value cmp(datatypes::variable);
|
value cmp(datatypes::variable);
|
||||||
|
value nil;
|
||||||
if (match_process_standard(&tmpstream,cmp)) {
|
if (match_process_standard(&tmpstream,cmp)) {
|
||||||
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);
|
||||||
@ -892,16 +893,41 @@ namespace dms {
|
|||||||
ParseLoop(&tempstream);
|
ParseLoop(&tempstream);
|
||||||
buildGoto(ifend);
|
buildGoto(ifend);
|
||||||
buildLabel(next);
|
buildLabel(next);
|
||||||
if (match_process_ELIF(stream,ifend)) {
|
if (match_process_ELIF(stream,ifend) || match_process_ELSE(stream, ifend)) {}
|
||||||
utils::debug("here");
|
|
||||||
}
|
|
||||||
else if (match_process_ELSE(stream,ifend)) {
|
|
||||||
utils::debug("here");
|
|
||||||
}
|
|
||||||
buildLabel(ifend);
|
buildLabel(ifend);
|
||||||
// We keep trying to match else if/else until nothing is left
|
// We keep trying to match else if/else until nothing is left
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (stream->match(tokens::name,tokens::parao)) {
|
||||||
|
cmd* c = new cmd;
|
||||||
|
c->opcode = codes::IFFF;
|
||||||
|
c->args.push(cmp);
|
||||||
|
c->args.push(value(next));
|
||||||
|
current_chunk->addCmd(c);
|
||||||
|
if (match_process_function(stream, nil)) {
|
||||||
|
if (stream->match(tokens::pipe)) {
|
||||||
|
stream->next();
|
||||||
|
buildGoto(ifend);
|
||||||
|
buildLabel(next);
|
||||||
|
if (!match_process_function(stream, nil)) {
|
||||||
|
state->push_error(errors::error{ errors::unknown,"Missing else function",true,stream->peek().line_num,current_chunk });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state->push_error(errors::error{ errors::unknown,"Expected '|'",true,stream->peek().line_num,current_chunk });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
state->push_error(errors::error{ errors::unknown,"Expected '{' or function pair!",true,stream->peek().line_num,current_chunk });
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
buildLabel(ifend);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
badSymbol(stream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
badSymbol(stream);
|
badSymbol(stream);
|
||||||
@ -942,12 +968,7 @@ namespace dms {
|
|||||||
ParseLoop(&tempstream);
|
ParseLoop(&tempstream);
|
||||||
buildGoto(ifend);
|
buildGoto(ifend);
|
||||||
buildLabel(next);
|
buildLabel(next);
|
||||||
if (match_process_ELIF(stream, ifend)) {
|
if (match_process_ELIF(stream, ifend) || match_process_ELSE(stream, ifend)) {}
|
||||||
utils::debug("here");
|
|
||||||
}
|
|
||||||
else if (match_process_ELSE(stream, ifend)) {
|
|
||||||
utils::debug("here");
|
|
||||||
}
|
|
||||||
// We keep trying to match else if/else until nothing is left
|
// We keep trying to match else if/else until nothing is left
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -191,7 +191,6 @@ namespace dms {
|
|||||||
if (cmp.type == datatypes::boolean || cmp.isNil()) {
|
if (cmp.type == datatypes::boolean || cmp.isNil()) {
|
||||||
if (!cmp.b || cmp.isNil()) {
|
if (!cmp.b || cmp.isNil()) {
|
||||||
pos = seek(gt.getPrintable(), cmds, LABL, pos);
|
pos = seek(gt.getPrintable(), cmds, LABL, pos);
|
||||||
debug("> set pos: ", pos);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
BIN
DMS/dump.bin
BIN
DMS/dump.bin
Binary file not shown.
164
DMS/dump.txt
164
DMS/dump.txt
@ -101,7 +101,7 @@ Line <21> newline
|
|||||||
Line <22> name if
|
Line <22> name if
|
||||||
Line <22> parao (
|
Line <22> parao (
|
||||||
Line <22> name a
|
Line <22> name a
|
||||||
Line <22> not !
|
Line <22> equal =
|
||||||
Line <22> equal =
|
Line <22> equal =
|
||||||
Line <22> name b
|
Line <22> name b
|
||||||
Line <22> parac )
|
Line <22> parac )
|
||||||
@ -117,7 +117,7 @@ Line <23> newline
|
|||||||
Line <24> name if
|
Line <24> name if
|
||||||
Line <24> parao (
|
Line <24> parao (
|
||||||
Line <24> name a
|
Line <24> name a
|
||||||
Line <24> equal =
|
Line <24> not !
|
||||||
Line <24> equal =
|
Line <24> equal =
|
||||||
Line <24> name b
|
Line <24> name b
|
||||||
Line <24> parac )
|
Line <24> parac )
|
||||||
@ -137,7 +137,7 @@ Line <27> cbracketc }
|
|||||||
Line <27> name elseif
|
Line <27> name elseif
|
||||||
Line <27> parao (
|
Line <27> parao (
|
||||||
Line <27> name a1
|
Line <27> name a1
|
||||||
Line <27> not !
|
Line <27> equal =
|
||||||
Line <27> equal =
|
Line <27> equal =
|
||||||
Line <27> number 10
|
Line <27> number 10
|
||||||
Line <27> parac )
|
Line <27> parac )
|
||||||
@ -165,59 +165,59 @@ 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 <33> name if
|
||||||
|
Line <33> parao (
|
||||||
|
Line <33> name a1
|
||||||
|
Line <33> equal =
|
||||||
|
Line <33> equal =
|
||||||
|
Line <33> number 10
|
||||||
|
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 <35> cbracketc }
|
||||||
Line <35> newline
|
Line <35> newline
|
||||||
Line <35> newline
|
Line <35> newline
|
||||||
Line <36> newline
|
Line <36> newline
|
||||||
Line <36> newline
|
Line <36> newline
|
||||||
|
Line <37> name print
|
||||||
|
Line <37> parao (
|
||||||
|
Line <37> string This is coming along nicely!
|
||||||
|
Line <37> parac )
|
||||||
|
Line <37> newline
|
||||||
Line <37> newline
|
Line <37> newline
|
||||||
Line <38> newline
|
Line <38> newline
|
||||||
Line <38> newline
|
|
||||||
Line <39> newline
|
Line <39> newline
|
||||||
Line <40> newline
|
Line <40> newline
|
||||||
Line <40> newline
|
|
||||||
Line <41> newline
|
Line <41> newline
|
||||||
Line <42> newline
|
Line <42> newline
|
||||||
Line <42> newline
|
Line <42> newline
|
||||||
Line <43> newline
|
Line <43> newline
|
||||||
Line <44> newline
|
Line <44> newline
|
||||||
Line <44> newline
|
Line <44> newline
|
||||||
Line <45> bracketo [
|
|
||||||
Line <45> name Bob
|
|
||||||
Line <45> colon :
|
|
||||||
Line <45> name char
|
|
||||||
Line <45> bracketc ]
|
|
||||||
Line <45> newline
|
Line <45> newline
|
||||||
Line <45> newline
|
Line <45> newline
|
||||||
Line <46> newline
|
Line <46> newline
|
||||||
Line <47> newline
|
Line <47> newline
|
||||||
|
Line <47> newline
|
||||||
Line <48> newline
|
Line <48> newline
|
||||||
Line <49> name unknown
|
|
||||||
Line <49> equal =
|
|
||||||
Line <49> string Some Random Guy
|
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
Line <49> newline
|
Line <49> newline
|
||||||
Line <50> name age
|
|
||||||
Line <50> equal =
|
|
||||||
Line <50> number 0.24
|
|
||||||
Line <50> newline
|
Line <50> newline
|
||||||
Line <50> newline
|
|
||||||
Line <51> name money
|
|
||||||
Line <51> equal =
|
|
||||||
Line <51> number 100
|
|
||||||
Line <51> newline
|
Line <51> newline
|
||||||
Line <51> newline
|
Line <51> newline
|
||||||
Line <52> name excited
|
|
||||||
Line <52> colon :
|
|
||||||
Line <52> string path/to/file
|
|
||||||
Line <52> newline
|
|
||||||
Line <52> newline
|
Line <52> newline
|
||||||
Line <53> newline
|
Line <53> newline
|
||||||
Line <53> newline
|
Line <53> newline
|
||||||
Line <54> bracketo [
|
Line <54> bracketo [
|
||||||
Line <54> name test1
|
Line <54> name this
|
||||||
Line <54> colon :
|
Line <54> colon :
|
||||||
Line <54> name function
|
Line <54> name function
|
||||||
Line <54> parao (
|
Line <54> parao (
|
||||||
@ -225,42 +225,108 @@ Line <54> parac )
|
|||||||
Line <54> bracketc ]
|
Line <54> bracketc ]
|
||||||
Line <54> newline
|
Line <54> newline
|
||||||
Line <54> newline
|
Line <54> newline
|
||||||
Line <55> string Inside a function!
|
Line <55> name print
|
||||||
|
Line <55> parao (
|
||||||
|
Line <55> string This
|
||||||
|
Line <55> parac )
|
||||||
Line <55> newline
|
Line <55> newline
|
||||||
Line <55> newline
|
Line <55> newline
|
||||||
Line <56> newline
|
Line <56> newline
|
||||||
|
Line <56> newline
|
||||||
|
Line <57> bracketo [
|
||||||
|
Line <57> name that
|
||||||
|
Line <57> colon :
|
||||||
|
Line <57> name function
|
||||||
|
Line <57> parao (
|
||||||
|
Line <57> parac )
|
||||||
|
Line <57> bracketc ]
|
||||||
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 newblock
|
|
||||||
Line <59> colon :
|
|
||||||
Line <59> name function
|
|
||||||
Line <59> parao (
|
|
||||||
Line <59> name a
|
|
||||||
Line <59> seperator ,
|
|
||||||
Line <59> name b
|
|
||||||
Line <59> seperator ,
|
|
||||||
Line <59> name c
|
|
||||||
Line <59> parac )
|
|
||||||
Line <59> bracketc ]
|
|
||||||
Line <59> newline
|
Line <59> newline
|
||||||
Line <59> newline
|
Line <59> newline
|
||||||
Line <60> string Func Arguments: a = `a`, b = `b`, c = `c`
|
Line <60> bracketo [
|
||||||
|
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> string Time to return
|
|
||||||
Line <61> newline
|
Line <61> newline
|
||||||
Line <61> newline
|
|
||||||
Line <62> ret
|
|
||||||
Line <62> name a
|
|
||||||
Line <62> plus +
|
|
||||||
Line <62> name b
|
|
||||||
Line <62> plus +
|
|
||||||
Line <62> name c
|
|
||||||
Line <62> newline
|
Line <62> newline
|
||||||
Line <62> newline
|
Line <63> newline
|
||||||
Line <62> eof
|
Line <64> name unknown
|
||||||
|
Line <64> equal =
|
||||||
|
Line <64> string Some Random Guy
|
||||||
|
Line <64> newline
|
||||||
|
Line <64> newline
|
||||||
|
Line <65> name age
|
||||||
|
Line <65> equal =
|
||||||
|
Line <65> number 0.24
|
||||||
|
Line <65> newline
|
||||||
|
Line <65> newline
|
||||||
|
Line <66> name money
|
||||||
|
Line <66> equal =
|
||||||
|
Line <66> number 100
|
||||||
|
Line <66> newline
|
||||||
|
Line <66> newline
|
||||||
|
Line <67> name excited
|
||||||
|
Line <67> colon :
|
||||||
|
Line <67> string path/to/file
|
||||||
|
Line <67> newline
|
||||||
|
Line <67> newline
|
||||||
|
Line <68> newline
|
||||||
|
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 [
|
||||||
|
|||||||
13
DMS/test.dms
13
DMS/test.dms
@ -29,6 +29,13 @@ using extendedDefine
|
|||||||
} else {
|
} else {
|
||||||
print("This is an else!")
|
print("This is an else!")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(a1==10) this()|that()
|
||||||
|
|
||||||
|
print("This is coming along nicely!")
|
||||||
|
// for(x, 10, 1, -1){
|
||||||
|
// print(x)
|
||||||
|
// }
|
||||||
// 0 + (1 * 0) + 0
|
// 0 + (1 * 0) + 0
|
||||||
|
|
||||||
// if (this==that) this()|that()
|
// if (this==that) this()|that()
|
||||||
@ -42,6 +49,12 @@ using extendedDefine
|
|||||||
|
|
||||||
// }
|
// }
|
||||||
|
|
||||||
|
[this:function()]
|
||||||
|
print("This")
|
||||||
|
|
||||||
|
[that:function()]
|
||||||
|
print("That")
|
||||||
|
|
||||||
[Bob:char]
|
[Bob:char]
|
||||||
//fname = "Bob"
|
//fname = "Bob"
|
||||||
//known = true // defaults to false
|
//known = true // defaults to false
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user