private DSDomain IntDeclTransfer(IntDecl intDecl, DSDomain domain) { var ident = new Identifier(intDecl.Name, VarType.Int, intDecl.Id); var newDomain = CopyDomain(domain); newDomain[ident] = DSSign.Zero.Singleton().ToHashSet(); return(newDomain); }
public override IAstNode VisitIntDecl(MicroCParser.IntDeclContext context) { var label = ++_label; var name = context.IDENT().GetText(); var id = _symbolTable.InsertSymbol(name, VarType.Int); var intDecl = new IntDecl(name); intDecl.Label = label; intDecl.Id = id; return(intDecl); }
private IADomain IntDeclTransfer(IntDecl intDecl, IADomain domain) { var newDomain = CopyDomain(domain); if (domain.IsBottom()) { return(newDomain); } var ident = new Identifier(intDecl.Name, VarType.Int, intDecl.Id); newDomain[ident] = new Interval(new ExtendedZ(0), new ExtendedZ(0)).ToIntervalK(_program); return(newDomain); }
protected override ILattice <IADomain> TransferFunctions(int label) { var block = GetBlock(label); var domain = _analysisCircle[label].GetDomain(); var newDomain = block switch { IntDecl intDecl => IntDeclTransfer(intDecl, domain), ArrayDecl arrayDecl => ArrayDeclTransfer(arrayDecl, domain), RecordDecl recordDecl => RecDeclTransfer(recordDecl, domain), AssignStmt assignStmt => AssignTransfer(assignStmt, domain), RecAssignStmt recAssignStmt => RecAssignTransfer(recAssignStmt, domain), IfStmt ifStmt => IdTransfer(ifStmt, domain), IfElseStmt ifElseStmt => IdTransfer(ifElseStmt, domain), WhileStmt whileStmt => IdTransfer(whileStmt, domain), WriteStmt writeStmt => IdTransfer(writeStmt, domain), ReadStmt readStmt => ReadTransfer(readStmt, domain), _ => Bottom().GetDomain(), }; return(new IALattice(newDomain)); }