Ejemplo n.º 1
0
        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}");
            }
        }
Ejemplo n.º 2
0
 /// <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)
 {
 }