Example #1
0
        private void PushPrimitiveModule(Span span)
        {
            var primModuleExpr = PLink_Root.MkPrimitiveModule();

            primModuleExpr.Span = span;
            primModuleExpr.id   = (PLink_Root.IArgType_PrimitiveModule__1)MkUniqueId(span);


            var orderedMachineBindingList = crntMachineBindingList.OrderBy(x => (string)x.Key.Symbol);
            var bindingsStack             = new Stack <PLink_Root.MachineBindingList>();
            var machineBindingList        = PLink_Root.MkMachineBindingList();
            var machineBinding            = PLink_Root.MkMachineBinding();

            machineBinding.i        = (PLink_Root.IArgType_MachineBinding__0)orderedMachineBindingList.First().Key;
            machineBinding.con      = (PLink_Root.IArgType_MachineBinding__1)orderedMachineBindingList.First().Value;
            machineBindingList.hd   = machineBinding;
            machineBindingList.tail = MkUserCnst(PLink_Root.UserCnstKind.NIL, orderedMachineBindingList.First().Value.Span);
            bindingsStack.Push(machineBindingList);

            foreach (var binding in orderedMachineBindingList.Skip(1))
            {
                machineBindingList      = PLink_Root.MkMachineBindingList();
                machineBinding          = PLink_Root.MkMachineBinding();
                machineBinding.i        = (PLink_Root.IArgType_MachineBinding__0)binding.Key;
                machineBinding.con      = (PLink_Root.IArgType_MachineBinding__1)binding.Value;
                machineBindingList.hd   = machineBinding;
                machineBindingList.tail = (PLink_Root.IArgType_MachineBindingList__1)bindingsStack.Pop();
                bindingsStack.Push(machineBindingList);
            }
            crntMachineBindingList.Clear();
            primModuleExpr.binds = bindingsStack.Pop();
            moduleExprStack.Push(primModuleExpr);
        }
Example #2
0
        private PLink_Root.StringCnst MkString(string s, Span span)
        {
            var str = PLink_Root.MkString(s);

            str.Span = span;
            return(str);
        }
Example #3
0
        private void PushString(string name, Span nameSpan, bool isLast)
        {
            var monNameList = PLink_Root.MkStringList();

            monNameList.Span = nameSpan;
            if (crntStringList.Where(e => (string)e.Symbol == name).Count() >= 1)
            {
                var errFlag = new Flag(
                    SeverityKind.Error,
                    nameSpan,
                    Constants.BadSyntax.ToString(string.Format(" item {0} listed multiple times in the list", name)),
                    Constants.BadSyntax.Code,
                    parseSource);
                parseFailed = true;
                parseFlags.Add(errFlag);
            }
            if (isLast)
            {
                monNameList.hd = (PLink_Root.IArgType_StringList__0)MkString(name, nameSpan);
                monNameList.tl = MkUserCnst(PLink_Root.UserCnstKind.NIL, nameSpan);
                crntStringList.Clear();
            }
            else
            {
                Contract.Assert(stringListStack.Count > 0);
                monNameList.hd = (PLink_Root.IArgType_StringList__0)MkString(name, nameSpan);
                monNameList.tl = (PLink_Root.IArgType_StringList__1)stringListStack.Pop();
            }
            stringListStack.Push(monNameList);
        }
Example #4
0
        private PLink_Root.RealCnst MkNumeric(int i, Span span)
        {
            var num = PLink_Root.MkNumeric(i);

            num.Span = span;
            return(num);
        }
Example #5
0
        private PLink_Root.UserCnst MkUserCnst(PLink_Root.UserCnstKind kind, Span span)
        {
            var cnst = PLink_Root.MkUserCnst(kind);

            cnst.Span = span;
            return(cnst);
        }
Example #6
0
        private void AddImplementationDecl(Span span)
        {
            Contract.Assert(moduleExprStack.Count == 1);
            var impsDecl = PLink_Root.MkImplementationDecl();

            impsDecl.Span = span;
            impsDecl.mod  = (PLink_Root.IArgType_ImplementationDecl__0)moduleExprStack.Pop();
            impsDecl.id   = (PLink_Root.IArgType_ImplementationDecl__1)MkUniqueId(span);
            parseLinker.ImplementationDecl.Add(impsDecl);
        }
Example #7
0
 private void AddPrivatesList(Span span = default(Span))
 {
     Contract.Assert(crntEventList.Count > 0);
     foreach (var ev in crntEventList)
     {
         var rec = PLink_Root.MkModulePrivateEvents(GetCurrentModuleDecl(span), (PLink_Root.IArgType_ModulePrivateEvents__1)ev);
         rec.Span = ev.Span;
         parseLinker.ModulePrivateEvents.Add(rec);
     }
     crntEventList.Clear();
 }
Example #8
0
        private PLink_Root.ModuleDecl GetCurrentModuleDecl(Span span)
        {
            if (crntModuleDecl != null)
            {
                return(crntModuleDecl);
            }

            crntModuleDecl      = PLink_Root.MkModuleDecl();
            crntModuleDecl.name = MkString(string.Empty, span);
            crntModuleDecl.Span = span;
            return(crntModuleDecl);
        }
Example #9
0
        private void AddModuleDef(string name, Span nameSpan, Span span)
        {
            var moduleDef = PLink_Root.MkModuleDef();

            moduleDef.Span = span;
            moduleDef.name = MkString(name, nameSpan);
            Contract.Assert(moduleExprStack.Count >= 1);
            moduleDef.mod = (PLink_Root.IArgType_ModuleDef__1)moduleExprStack.Pop();
            if (IsValidName(LProgramTopDecl.Module, name, nameSpan))
            {
                LinkTopDeclNames.moduleNames.Add(name);
            }
            parseLinker.ModuleDef.Add(moduleDef);
        }
Example #10
0
        private void AddTestDeclaration(string name, Span nameSpan, Span span)
        {
            if (IsValidName(LProgramTopDecl.Test, name, nameSpan))
            {
                LinkTopDeclNames.testNames.Add(name);
            }
            Contract.Assert(moduleExprStack.Count == 1);
            var testDecl = PLink_Root.MkTestDecl();

            testDecl.name = (PLink_Root.IArgType_TestDecl__0)MkString(name, nameSpan);
            testDecl.Span = span;
            testDecl.mod  = (PLink_Root.IArgType_TestDecl__1)moduleExprStack.Pop();
            parseLinker.TestDecl.Add(testDecl);
        }
Example #11
0
        private void AddRefinementDeclaration(string name, Span nameSpan, Span span)
        {
            if (IsValidName(LProgramTopDecl.Test, name, nameSpan))
            {
                LinkTopDeclNames.testNames.Add(name);
            }
            Contract.Assert(moduleExprStack.Count == 2);
            var refinesDecl = PLink_Root.MkRefinementDecl();

            refinesDecl.name = (PLink_Root.IArgType_RefinementDecl__0)MkString(name, nameSpan);
            refinesDecl.Span = span;
            refinesDecl.rhs  = (PLink_Root.IArgType_RefinementDecl__2)moduleExprStack.Pop();
            refinesDecl.lhs  = (PLink_Root.IArgType_RefinementDecl__1)moduleExprStack.Pop();
            parseLinker.RefinementDecl.Add(refinesDecl);
        }
Example #12
0
        private PLink_Root.InterfaceType ConvertToInterfaceType(List <PLink_Root.NonNullEventName> events)
        {
            var interfaceTypeList = new Stack <PLink_Root.InterfaceType>();
            var interfaceType     = PLink_Root.MkInterfaceType();

            interfaceType.ev   = (PLink_Root.IArgType_InterfaceType__0)events[0];
            interfaceType.tail = MkUserCnst(PLink_Root.UserCnstKind.NIL, events[0].Span);
            interfaceTypeList.Push(interfaceType);
            crntEventList.RemoveAt(0);
            foreach (var str in events)
            {
                interfaceType      = PLink_Root.MkInterfaceType();
                interfaceType.ev   = (PLink_Root.IArgType_InterfaceType__0)str;
                interfaceType.tail = (PLink_Root.IArgType_InterfaceType__1)interfaceTypeList.Pop();
                interfaceTypeList.Push(interfaceType);
            }
            return(interfaceTypeList.Pop());
        }
Example #13
0
        PLink_Root.Id MkUniqueId(Span span)
        {
            var filePath = span.Program.Uri.LocalPath;
            int nextId   = 0;

            if (idToSourceInfo.ContainsKey(filePath))
            {
                nextId = idToSourceInfo[filePath].Count;
                idToSourceInfo[filePath][nextId] = new SourceInfo(span, new Span());
            }
            else
            {
                idToSourceInfo[filePath]         = new Dictionary <int, SourceInfo>();
                idToSourceInfo[filePath][nextId] = new SourceInfo(span, new Span());
            }
            var fileInfo = PLink_Root.MkIdList(MkString(span.Program.Uri.LocalPath, span), (PLink_Root.IArgType_IdList__1)MkId(span));
            var uniqueId = PLink_Root.MkIdList(MkNumeric(nextId, new Span()), fileInfo);

            return(uniqueId);
        }
Example #14
0
File: LParser.cs Project: up1/P
 private void AddPrivatesList(bool hasDecl, Span span = default(Span))
 {
     if (hasDecl)
     {
         Contract.Assert(crntEventList.Count > 0);
         foreach (var ev in crntEventList)
         {
             var rec = PLink_Root.MkModulePrivateEvents(GetCurrentModuleDecl(span), (PLink_Root.IArgType_ModulePrivateEvents__1)ev);
             rec.Span = ev.Span;
             parseLinker.ModulePrivateEvents.Add(rec);
         }
         crntEventList.Clear();
     }
     else
     {
         var rec = PLink_Root.MkModulePrivateEvents(GetCurrentModuleDecl(span), MkUserCnst(PLink_Root.UserCnstKind.NIL, span));
         rec.Span = span;
         parseLinker.ModulePrivateEvents.Add(rec);
     }
 }
Example #15
0
        private void AddModuleDecl(string name, Span nameSpan, Span span)
        {
            var moduleDecl = GetCurrentModuleDecl(span);

            moduleDecl.Span = span;
            moduleDecl.name = MkString(name, nameSpan);
            moduleDecl.id   = (PLink_Root.IArgType_ModuleDecl__1)MkUniqueId(span);
            //add the module decl
            if (IsValidName(LProgramTopDecl.Module, name, nameSpan))
            {
                LinkTopDeclNames.moduleNames.Add(name);
            }
            parseLinker.ModuleDecl.Add(moduleDecl);

            foreach (var machine in crntStringList)
            {
                var moduleContains = PLink_Root.MkModuleContains();
                moduleContains.mod  = (PLink_Root.IArgType_ModuleContains__0)moduleDecl;
                moduleContains.mach = (PLink_Root.IArgType_ModuleContains__1)machine;
                parseLinker.ModuleContains.Add(moduleContains);
            }
            crntStringList.Clear();
            crntModuleDecl = null;
        }