Пример #1
0
        public JParser(IEnumerable<string> path, string save)
		{
            UppaalModel model = new UppaalModel();
            var jClasses = new List<JClass>(); 
            ClassNames.Add("Object");
            foreach (var p in path)
            {
                var jClass = new JClass(p);
                ClassNames.Add(jClass.Name);
                jClasses.Add(jClass);

                foreach (var method in jClass.Methods)
                {
                    var methodName = JClass.FirstNonKeyword(method.First());
                    if (!MethodNames.Contains(methodName))
                    {
                        MethodNames.Add(methodName);
                    }
                }
            }

            foreach (var jClass in jClasses)
            {
                model.AddTemplates(jClass);
            }

            var methods = new List<string>();
            foreach (var jClass in jClasses)
            {
                jClass.SetSuper(jClasses);
                methods.AddRange(jClass.Methods.Select(x => jClass.Name + "_" + JClass.FirstNonKeyword(x.First())));
            }
            //Build the heap
            foreach (var jClass in jClasses)
            {
                jClass.UpdateFields();
            }

            foreach (var jClass in jClasses)
            {
                jClass.FindAloc();
            }

            //var heap = AllocateHeap(JClass.GetAloc(jClasses.First().GetMethod("install")), jClasses);
                


            //Add Invoke
            model.AddInvokevirtual(jClasses);

            model.InitDec(10,3,3, methods); 
            model.Save(save);
		}
Пример #2
0
 public void SetSuper(List<JClass> classes)
 {
     if (classSig.Contains(" extends "))
     {
         var superName = classSig.Split(new string[] { " extends " }, StringSplitOptions.None).Last();
         foreach (var cls in classes)
         {
             if (cls.Name == superName)
             {
                 super = cls;
             }
         }    
     }
 }
Пример #3
0
 //Adds method templates from jbc
 public void AddTemplates(JClass cls)
 {
     for(int i = 0; i < cls.Methods.Count; i++)
     {
         templates.Add(new Template(cls.Methods[i], cls, i));               
     }
 }
Пример #4
0
        public Template(List<string> method, JClass self, int catchIndex)
        {
            classSelf = self;
            name = self.Name + "_" + JClass.FirstNonKeyword(method.First());

            Locations = ResolveLocations(method);
            
            // instruction switch case
            ResolveCode(catchIndex);


            localDeclarations = @"const int os_size = 10;
const int locs_size = 10;
int os[os_size]; 
int osp = 0;
int locs[locs_size];

void osp_inc(){
    if (osp >= os_size - 1){
        opstack_fault = true;
        return;
    }
    osp++;
    return;
}

void osp_dec(int i){
    if (osp < i){
        opstack_fault = true;
        return;
    }
    osp -= i;
    return;
}

bool ifcmpme(){
    if (osp > 1){
        return os[osp-2] >= os[osp - 1];
    }
    return false;
}

bool ifcmpeq(){
    if (osp > 1){
        return os[osp-2] == os[osp - 1];
    }
    return false;
}

bool ifcmpge(){
    if (osp > 1){
        return os[osp - 2] >= os[osp - 1] ;
    }
    return false;
}

bool ifcmpne(){
    if (osp > 1){
        return os[osp - 2] != os[osp - 1] ;
    }
    return false;
}


bool ifeq(){
    if (osp > 0){
        return os[osp - 1] == 0;
    }
    return false;
}";
            InitialLocation = Locations.First();
        }