Exemple #1
0
        private DSDomain RecDeclTransfer(RecordDecl recordDecl, DSDomain domain)
        {
            var newDomain = CopyDomain(domain);

            foreach (var field in recordDecl.Fields)
            {
                newDomain[field] = DSSign.Zero.Singleton().ToHashSet();
            }

            return(newDomain);
        }
Exemple #2
0
        private IADomain RecDeclTransfer(RecordDecl recordDecl, IADomain domain)
        {
            var newDomain = CopyDomain(domain);

            if (domain.IsBottom())
            {
                return(newDomain);
            }

            foreach (var field in recordDecl.Fields)
            {
                newDomain[field] = new Interval(new ExtendedZ(0), new ExtendedZ(0)).ToIntervalK(_program);
            }

            return(newDomain);
        }
        public override IAstNode VisitRecDecl(MicroCParser.RecDeclContext context)
        {
            var label = ++_label;

            _symbolTable.AddScope();
            IList <Identifier> fields = context.fieldDeclaration().Select(x => Visit(x) as Identifier).ToList();
            var children = _symbolTable.RemoveScope();

            string name    = context.name.Text;
            var    id      = _symbolTable.InsertSymbol(name, children);
            var    recDecl = new RecordDecl(name, fields);

            recDecl.Label = label;
            recDecl.Id    = id;
            _recordDecls.Add(recDecl);
            return(recDecl);
        }
Exemple #4
0
        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));
        }