public static Proposition Parse(string Proposition)
        {
            Proposition Prop = new Proposition();
            string sprop = Proposition;

            #region Quality and Type if Possible
            if (sprop.StartsWith("All"))
            {
                Prop.Quantity = Quantity.All;
                Prop.Type = PredicateType.A;
                sprop = sprop.Substring(4);
            }
            else if (sprop.StartsWith("No"))
            {
                Prop.Quantity = Quantity.No;
                Prop.Type = PredicateType.E;
                Prop.Quality = false;
                sprop = sprop.Substring(3);
            }
            else if (sprop.StartsWith("Some"))
            {
                Prop.Quantity = Quantity.Some;
                Prop.Type = PredicateType.Undefined;
                sprop = sprop.Substring(5);
            }
            else
            {
                throw new FormatException("Proposition must start with \"All\", \"Some\", or \"No\"\nCheck your proposition for errors.");
            }
            #endregion

            if (sprop.StartsWith("["))
            {
                sprop = sprop.Substring(1);
                Prop.Subject = sprop.Substring(0, sprop.IndexOf(']'));
                sprop = sprop.Substring(sprop.IndexOf(']') + 2);
            }
            else { throw new FormatException("Proposition does not follow correct input format.\nCheck your proposition for errors."); }

            if (sprop.StartsWith("are"))
            {
                Prop.CopulaWord = "are";
                sprop = sprop.Substring(4);
            }
            else if (sprop.StartsWith("is"))
            {
                Prop.CopulaWord = "is";
                sprop = sprop.Substring(3);
            }
            else { throw new FormatException("Copula must start with \"is\" or \"are\".\nCheck your proposition for errors."); }

            if (sprop.StartsWith("not"))
            {
                Prop.Quality = false;
                if (Prop.Type == PredicateType.Undefined)
                {
                    Prop.Type = PredicateType.O;
                }
                sprop = sprop.Substring(4);
            }
            else
            {
                if (Prop.Type == PredicateType.Undefined)
                {
                    Prop.Type = PredicateType.I;
                }
                if (Prop.Type != PredicateType.E)
                {
                    Prop.Quality = true;
                }
            }

            if (sprop.StartsWith("["))
            {
                sprop = sprop.Substring(1);
            }
            else { throw new FormatException("Proposition does not follow correct input format.\nCheck your proposition for errors."); }

            if (sprop.StartsWith("tw are"))
            {
                Prop.twi = "tw are";
                sprop = sprop.Substring(7);
            }
            else if (sprop.StartsWith("twi a"))
            {
                Prop.twi = "twi a";
                sprop = sprop.Substring(6);
            }
            else if (sprop.StartsWith("twi"))
            {
                Prop.twi = "twi";
                sprop = sprop.Substring(4);
            }
            else if (sprop.StartsWith("tw"))
            {
                Prop.twi = "tw";
                sprop = sprop.Substring(3);
            }

            if (sprop.StartsWith("non-"))
            {
                Prop.nonPredicate = true;
                sprop = sprop.Substring(4);
            }
            else
            {
                Prop.nonPredicate = false;
            }

            Prop.Predicate = sprop.Substring(0, sprop.IndexOf(']'));
            sprop = sprop.Substring(sprop.IndexOf(']') + 1);
            return Prop;
        }
        private void setOutputData(Proposition output)
        {
            dgvOutput.Rows.Clear();

            string sprop = (!string.IsNullOrEmpty(output.twi) ? output.twi + " " : "");
            sprop += output.nonPredicate ? "non-" : "";
            sprop += output.Predicate;

            dgvOutput.Rows.Add("Type", output.Type.ToString());
            dgvOutput.Rows.Add("Quantity", (output.Quantity == Quantity.Some ? "Particular" : "Universal") + " (" + output.Quantity.ToString() + ")");
            dgvOutput.Rows.Add("Quality", output.Quality ? "Positive" : "Negitive");
            dgvOutput.Rows.Add("Inverted Predicate", output.nonPredicate ? "Yes (\"non-\")" : "No");
            dgvOutput.Rows.Add("Subject", output.Subject);
            dgvOutput.Rows.Add("Predicate", sprop);
        }
 private Proposition Clone()
 {
     Proposition P = new Proposition();
     P.Quality = this.Quality;
     P.Quantity = this.Quantity;
     P.CopulaWord = this.CopulaWord;
     P.nonPredicate = this.nonPredicate;
     P.Predicate = this.Predicate;
     P.Subject = this.Subject;
     P.twi = this.twi;
     P.Type = this.Type;
     return P;
 }
 private Proposition ProcessAndGetIncoming()
 {
     Proposition Incoming = new Proposition();
     try
     {
         Incoming = Proposition.Parse(txtInput.Text);
         txtOutput.Text = Incoming.ToString();
         setInputData(Incoming);
     }
     catch (FormatException E)
     {
         MessageBox.Show(E.Message, "Error");
     }
     listBox1.Items.Clear();
     listBox1.Items.Add(Incoming.ToString());
     return Incoming;
 }