public override IAstNode VisitWhileStmt(MicroCParser.WhileStmtContext context) { var label = ++_label; IBExpr condition = Visit(context.b_expr()) as IBExpr; UnscopedBlock body = Visit(context.unscopedBlock()) as UnscopedBlock; var whileStmt = new WhileStmt(condition, body); whileStmt.Label = label; return(whileStmt); }
public override IAstNode VisitIfElseStmt(MicroCParser.IfElseStmtContext context) { var label = ++_label; IBExpr condition = Visit(context.b_expr()) as IBExpr; UnscopedBlock ifBody = Visit(context.ifBody) as UnscopedBlock; UnscopedBlock elseBody = Visit(context.elseBody) as UnscopedBlock; var ifElseStmt = new IfElseStmt(condition, ifBody, elseBody); ifElseStmt.Label = label; return(ifElseStmt); }
public override IAstNode VisitBexprBinop(MicroCParser.BexprBinopContext context) { IBExpr left = Visit(context.left) as IBExpr; IBExpr right = Visit(context.right) as IBExpr; BBinOperator op = context.bop.Text switch { "&" => BBinOperator.And, "|" => BBinOperator.Or, _ => throw new ArgumentException("Invalid BBinOpOperator") }; return(new BBinOp(left, right, op)); }
public BBinOp(IBExpr left, IBExpr right, BBinOperator op) { Left = left; Right = right; Op = op; }
public IfStmt(IBExpr condition, UnscopedBlock body) { Condition = condition; Body = body; }
public IfElseStmt(IBExpr condition, UnscopedBlock ifBody, UnscopedBlock elseBody) { Condition = condition; IfBody = ifBody; ElseBody = elseBody; }
public BUnOp(IBExpr left, BUnOperator op) { Left = left; Op = op; }
private FVDomain ConditionTransfer(IBExpr bExpr, FVDomain domain) => domain.Union(AnalysisUtil.FreeVariables(bExpr)).ToFVDomain();
public override IAstNode VisitBexprNot(MicroCParser.BexprNotContext context) { IBExpr left = Visit(context.b_expr()) as IBExpr; return(new BUnOp(left, BUnOperator.Not)); }
private DSDomain ConditionTransfer(IBExpr bExpr, DSDomain domain) => CopyDomain(domain);