public override object VisitFeature([NotNull] FeatureContext context) { Feature feature; if (context.port() != null) { // Console.WriteLine("Visit port: " + context.port().ID()); feature = new Feature(context.port().ID().GetText()); } else if (context.role() != null) { // Console.WriteLine("Visit role: " + context.role().ID()); feature = new Feature(context.role().ID().GetText()); } else if (context.execute() != null) { // Console.WriteLine("Visit glue............. "); feature = new Feature("execute"); // feature.process.Add((SysProcess)VisitGlue(context.glue())); } else { return(null); } if (context.sequence() != null) { // Console.WriteLine(" event: " + printEvent(context.sequence().@event())); List <SysEvent> events = parseSequence(context.sequence().@event()); foreach (var e in events) { // if it is not a function but an event, concatenate name with role name if (e is SysProcess && e.Name != feature.Name) { e.Name = feature.Name + "_" + e.Name; } } feature.process.AddRange(events); } // parsing parameter of process Role if (context.paramdefs() != null && context.paramdefs().ID() != null && context.paramdefs().ID().Length > 0) { // Console.WriteLine(" params: " + context.paramdefs().ID()[0]); foreach (var i in context.paramdefs().ID()) { feature.Params.Add(i.GetText()); } } return(feature); }