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); }
private PLink_Root.StringCnst MkString(string s, Span span) { var str = PLink_Root.MkString(s); str.Span = span; return(str); }
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); }
private PLink_Root.RealCnst MkNumeric(int i, Span span) { var num = PLink_Root.MkNumeric(i); num.Span = span; return(num); }
private PLink_Root.UserCnst MkUserCnst(PLink_Root.UserCnstKind kind, Span span) { var cnst = PLink_Root.MkUserCnst(kind); cnst.Span = span; return(cnst); }
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); }
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(); }
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); }
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); }
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); }
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); }
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()); }
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); }
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); } }
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; }