Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
85
Task/Extend-your-language/XBS/extend-your-language.xbs
Normal file
85
Task/Extend-your-language/XBS/extend-your-language.xbs
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
#>
|
||||
newsyntax
|
||||
@in:CH
|
||||
@token:does
|
||||
@CH:"function(Stack){
|
||||
this.Next(Stack);
|
||||
this.ChunkWrite(Stack,this.ParseExpression(Stack));
|
||||
this.TestNext(Stack,\"Bracket\",\"TK_BOPEN\");
|
||||
this.Move(Stack,2);
|
||||
this.CodeBlock(Stack);
|
||||
this.JumpBack(Stack);
|
||||
this.OpenChunk(Stack);
|
||||
while(this.CheckNext(Stack,\"Identifier\",\"otherwise\")||this.CheckNext(Stack,\"Identifier\",\"or\")){
|
||||
if(this.CheckNext(Stack,\"Identifier\",\"otherwise\")){
|
||||
this.OpenChunk(Stack);
|
||||
this.ChunkWrite(Stack,\"else\");
|
||||
this.Next(Stack);
|
||||
this.TestNext(Stack,\"Bracket\",\"TK_BOPEN\");
|
||||
this.Move(Stack,2);
|
||||
this.CodeBlock(Stack);
|
||||
this.JumpBack(Stack);
|
||||
this.CloseChunk(Stack);
|
||||
break;
|
||||
}else{
|
||||
this.OpenChunk(Stack);
|
||||
this.ChunkWrite(Stack,\"elif\");
|
||||
this.Move(Stack,2);
|
||||
this.ChunkWrite(Stack,this.ParseExpression(Stack));
|
||||
this.TestNext(Stack,\"Bracket\",\"TK_BOPEN\");
|
||||
this.Move(Stack,2);
|
||||
this.CodeBlock(Stack);
|
||||
this.JumpBack(Stack);
|
||||
this.CloseChunk(Stack);
|
||||
}
|
||||
}
|
||||
this.CloseChunk(Stack);
|
||||
}"
|
||||
@Interpret:"function(AST,Token){
|
||||
let Condition = this.Parse(AST,Token[3]);
|
||||
if(Condition){
|
||||
this.CondState(AST,Token[4]);
|
||||
} else {
|
||||
let Conds = Token[5];
|
||||
if(Conds.length<1){return}
|
||||
let DidCond = false;
|
||||
let ElseCond = undefined;
|
||||
for(let v of Conds){
|
||||
if(DidCond){break}
|
||||
if(v[0]==\"else\"){
|
||||
ElseCond=v;
|
||||
break;
|
||||
}else if(v[0]==\"elif\"){
|
||||
let Exp = this.Parse(AST,v[1]);
|
||||
if(Exp){
|
||||
DidCond=true;
|
||||
this.CondState(AST,v[2]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!DidCond&&ElseCond){
|
||||
this.CondState(AST,ElseCond[1]);
|
||||
}
|
||||
}
|
||||
}"
|
||||
<#
|
||||
|
||||
func equalsOneOrTwo(a){
|
||||
does a == 1 {
|
||||
log(`Yep! {a} == 1`);
|
||||
} or a == 2 {
|
||||
log(`Yes, {a} == 2`);
|
||||
} otherwise {
|
||||
does a <= 0 {
|
||||
log(`Sorry, your number {a} must be greater than 0!`);
|
||||
} otherwise {
|
||||
log(`Nope. {a} != 1 or 2`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
equalsOneOrTwo(1);
|
||||
equalsOneOrTwo(2);
|
||||
equalsOneOrTwo(3);
|
||||
equalsOneOrTwo(0);
|
||||
Loading…
Add table
Add a link
Reference in a new issue