public ExprSeq ParseExprSeq(ParseFlag flags = ParseFlag.None) { CurrentState.ParseFlags |= flags; // ExprSeq = new ExprSeq(); Expression expr = null; if (CurrentToken.Kind == TokenKind.RoundList) { if (CurrentList.Count != 0) { CreateState(CurrentList); expr = ParseExpression(); PopState(); } Advance(); } else { expr = ParseExpression(); } if (expr == null) { return(null); } if (!(expr is ClauseExpr)) { //Debug.Print(expr.ToString()); ExprSeq.AddChild(expr); } return(ExprSeq); }
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); }
void ParseContextItem(ContextDef parent) { PushNode(parent); ExprSeq exprSeq = ParseExprSeq(ParseFlag.ParseLines); //parent.ExprSeq = expr; parent.CreateTopicDef(exprSeq); PopNode(); }
public void EvalEqual(Token op) { Expression argument = PopExpr(); Expression subject = PopExpr(); Expression expr = Create.Equal(op, subject, argument); ExprSeq.AddChild(expr); PushExpr(expr); }
void ParseCondition() { LhsCondStmt def = new LhsCondStmt(); PushNode(def); ExprSeq expr = ParseExprSeq(); PopNode(); def.ExprSeq = expr; CurrentNode.AddChild(def); }
MessageEffect ParseMessageEffect() { MessageEffect effect = new MessageEffect(); PushNode(effect); ExprSeq expr = ParseExprSeq(); PopNode(); //TODO:!!!:Add new keyword support //ParseProperties(messageEffect); //parent.Add(effect); effect.ExprSeq = expr; PeekNode().AddChild(effect); return(effect); }
void ParseTrigger(TaskDef taskDef) { TriggerStmt triggerDecl = new TriggerStmt(taskDef); PushNode(triggerDecl); ExprSeq exprSeq = ParseExprSeq(); PopNode(); // triggerDecl.ExprSeq = exprSeq; taskDef.TriggerDef = triggerDecl; bool isCreator = taskDef.IsCreator; taskDef.Parent.AddTriggerDef(taskDef.TriggerDef, isCreator); }
void ParseCase(AstNode parent) { Advance(); //past name CaseStmt def = new CaseStmt(CurrentToken); // PushNode(def); ExprSeq expr = ParseExprSeq(); PopNode(); def.ExprSeq = expr; parent.AddChild(def); ParseRhs(def); }