// static bool Write_Default(Transpiler t, ClauseExpr d) { if (d.IsProperty) { t.WriteLine("if (_bwxClause != null && _bwxClause.Exists<{0}>({1}, {2}))", d.Predicate.ToPredicate().Spec, t.Translate(d.Predicate), t.Translate(d.Object)); } /*else if (d.HasMetaDefs) * { * t.WriteLine("_bwxClause = bwxTask.Context.Find(new ClausePattern({0}, {1}, {2}));", * t.Translate(d.Subject), t.Translate(d.Predicate), t.Translate(d.Object)); * t.WriteLine("if (_bwxClause != null)"); * }*/ else { if (d.Object.IsSnippet) { t.WriteLine("if(bwxTask.Context.Exists<{0}>({1}, {2}, {3}))", d.Type, t.Translate(d.Subject), t.Translate(d.Predicate), t.Translate(d.Object)); } else { t.WriteLine("if(bwxTask.Context.Exists({0}, {1}, {2}))", t.Translate(d.Subject), t.Translate(d.Predicate), t.Translate(d.Object)); } } return(false); }
public ClauseExpr EvalClause(Token op) { Expression argument = PopExpr(); Expression subject = PopExpr(); Expression klassExpr = null; if (subject == Expression.Nil) { subject = BuiltinDefs.Self.CreateName(); klassExpr = BuiltinDefs.Perform.CreateName(); } else if (subject.IsClauseExpr) { subject = new Name(TokenInstance.CSharp._BWXSUBJECT); } Expression predicate = new Name(op); ClauseExpr expr = new ClauseExpr(subject, predicate, argument); expr.AtomTypeExpr = klassExpr; PushExpr(expr); // ExprSeq.AddChild(expr); return(expr); }
static bool Write_FS_TS_U(Transpiler t, ClauseExpr d) { t.WriteLine("foreach({0} {1} in bwxTask.Context.QueryType({2}))", d.Subject.Type, t.Translate(d.Subject), t.Translate(d.Subject.AtomTypeExpr)); t.StartBlock(null); Write_U(t, d); return(false); }
public void EvalProperty(Token op) { Expression argument = PopExpr(); Expression subject = PopExpr(); Expression predicate = new Name(op); ClauseExpr expr = new ClauseExpr(predicate, argument); subject.AddPropertyExpr(expr); PushExpr(subject); }
public void Visitback(AstNode n, Action cps) { if (n.MessageTag.TaskDef != null) { List <Var> vars = new List <Var>(); t.CurrentScope.CollectVariables(vars); n.MessageTag.TaskDef.Parameters = vars; //(MessageCallback) var code = "(__bwxContext, __bwxExpert, __bwxMessage) => { "; code += "Method __bwxTask = new Method(__bwxContext, __bwxMessage); "; code += "__bwxContext.ScheduleTask(__bwxTask, "; code += string.Format("{0}({1}));", n.MessageTag.TaskDef.ProcedureDef.Name, n.MessageTag.TaskDef.CreateParameterString(t, false)); code += " }"; //TODO:There must be a problem here. ClauseExpr nClause = (ClauseExpr)n; nClause.Object.Token = new Token(TokenKind.Snippet, code); nClause.Type = nClause.Predicate.ToPredicate().Spec; } if (n.MessageTag.Wait && n.MessageTag.Result.NotNil) { t.WriteLine("_bwxResult = new TaskResult(bwxTask);"); } t.WriteIndented("_bwxMsg = "); if (n.IsNil) { t.Write("Message.NilMessage"); t.Write(")"); t.WriteStatementEnd(); return; } //else t.Write("new Message(MessageKind.{0}, {1}, {2}, ", n.MessageTag.MessageKind, t.Translate(n.MessageTag.Sender), t.Translate(n.MessageTag.Result)); //t.Visit(n); cps(); // t.Write(")"); t.WriteStatementEnd(); // WriteSend(n); // if (n.MessageTag.Wait && n.MessageTag.Result.NotNil) { t.WriteLine("yield return TaskStatus.Suspended;"); t.WriteLine("if(_bwxResult.Status != TaskStatus.Succeeded)"); t.Indent(); t.WriteLine("yield return Fail(bwxTask.Process, bwxTask.Message);"); t.Dedent(); } }
static bool Write_FO(Transpiler t, ClauseExpr d) { if (d.IsMeta) { t.WriteLine("{0} {1} = ({0})_bwxClause[{2}];", d.Type, t.Translate(d.Object), t.Translate(d.Predicate)); return(false); } t.WriteLine("foreach({0} {1} in bwxTask.Context.QuerySubjPred<{0}>({2}, {3}))", d.Type, t.Translate(d.Object), t.Translate(d.Subject), t.Translate(d.Predicate)); return(true); }
void ParseTaskMessage(ClauseExpr messageDef) { Advance(); //past 'task // TaskDef taskDef = CurrentTaskDef.CreateSubtaskDef(); messageDef.MessageTag.TaskDef = taskDef; // ParseProperties(taskDef); // PushTaskDef(taskDef); ParseTaskItems(taskDef.ProcedureDef); PopTaskDef(); // messageDef.MakeCallback(); }
public void WriteReceive(AstNode n_) { if (n_.IsVariable) { t.WriteLine("Atom {0} = bwxMsg.Clause;", t.Translate(n_)); return; } //else ClauseExpr n = ((ClauseExpr)n_); if (n.HasBinding) { t.WriteLine("Atom {0} = bwxMsg.Clause;", n.Binding.Translate()); } if (n.Subject != null && n.Subject.IsVariable) { t.CurrentScope.CreateVar(n.Subject.Token); t.WriteLine("Atom {0} = bwxMsg.Clause.Subject;", t.Translate(n.Subject)); } if (n.Object != null && n.Object.IsVariable) { t.CurrentScope.CreateVar(n.Object.Token, n.Object.Type); t.WriteLine("{0} {1} = ({0})bwxMsg.Clause.Object;", n.Object.Type, t.Translate(n.Object)); } foreach (ClauseExpr propExpr in n.PropertyExprs) { AstNode propPred = propExpr.Predicate; AstNode propObj = propExpr.Object; Token propSpec = propExpr.Type; if (propObj.Token.Kind == TokenKind.Variable) { t.CurrentScope.CreateVar(propObj.Token); t.WriteLine("{0} {1} = ({0})bwxMsg.Clause[{2}];", propSpec, t.Translate(propObj), t.Translate(propPred)); } } }
static bool Write_B(Transpiler t, ClauseExpr d) { t.WriteLine("if({0} {1} {2})", t.Translate(d.Subject), t.Translate(d.Predicate), t.Translate(d.Object)); return(false); }
static bool Write_U(Transpiler t, ClauseExpr d) { t.WriteLine("if(!bwxTask.Context.Exists({0}, {1}, {2}))", t.Translate(d.Subject), t.Translate(d.Predicate), t.Translate(d.Object)); return(false); }
// static bool Write_FS(Transpiler t, ClauseExpr d) { t.WriteLine("foreach({0} {1} in bwxTask.Context.QueryPredObj({2}, {3}))", "Atom", t.Translate(d.Subject), t.Translate(d.Predicate), t.Translate(d.Object)); return(true); }
// static bool Write_TS(Transpiler t, ClauseExpr d) { t.WriteLine("if({0}.TypeCheck({1}) && bwxTask.Context.Exists({0}, {2}, {3}))", t.Translate(d.Subject), t.Translate(d.Subject.AtomTypeExpr), t.Translate(d.Predicate), t.Translate(d.Object)); return(false); }