public override void EnterMolecular_field(DcParser.Molecular_fieldContext context) { var field = new DcMolecularField(context.name.Text, _currentClass); // Add each atomic var members = context.members; while (members != null) { if (!_currentClass.TryGetFieldByName(members.name.Text, out var atomic)) { throw new Exception($"Unknown field {members.name.Text}"); } if (!(atomic is DcAtomicField atomicField)) { throw new Exception($"Member field must be atomic"); } field.AddAtomic(atomicField); members = members.next; } if (!_currentClass.AddField(field)) { throw new Exception($"Failed to add field {context.name.Text} to class {_currentClass.Name}"); } }
/// <summary> /// Exit a parse tree produced by <see cref="DcParser.molecular_field"/>. /// <para>The default implementation does nothing.</para> /// </summary> /// <param name="context">The parse tree.</param> public virtual void ExitMolecular_field([NotNull] DcParser.Molecular_fieldContext context) { }