Пример #1
0
 public State(string lhs, RHS rhs, int i, int j)
 {
     this.lhs = lhs;
     this.rhs = rhs;
     this.i   = i;
     this.j   = j;
 }
Пример #2
0
        public bool parseSentence(string[] s)
        {
            sentence = s;
            charts   = new Chart[sentence.Length + 1];

            for (int i = 0; i < charts.Length; i++)
            {
                charts[i] = new Chart();
            }

            string[] start1   = { "@", "S" };
            RHS      startRHS = new RHS(start1);

            State start = new State("$", startRHS, 0, 0);

            charts[0].addState(start);

            for (int i = 0; i < charts.Length; i++)
            {
                for (int j = 0; j < charts[i].size(); j++)
                {
                    State  st        = charts[i].getState(j);
                    string next_term = st.getAfterDot();

                    if (st.isDotLast())
                    {
                        completer(st);
                    }
                    else if (grammar.isPartOfSpeech(next_term))
                    {
                        scanner(st);
                    }
                    else
                    {
                        predictor(st);
                    }
                }
            }

            string[] fin    = { "S", "@" };
            RHS      finRHS = new RHS(fin);
            State    finish = new State("$", finRHS, 0, sentence.Length);

            for (int j = 0; j < charts[sentence.Length].size(); j++)
            {
                State state = charts[sentence.Length].getState(j);

                if (state.Equals(finish))
                {
                    return(true);
                }
            }

            return(false);
        }
Пример #3
0
        public override bool Equals(object obj)
        {
            if (obj == null)
            {
                return(this == null);
            }

            RHS rhs = (RHS)obj;

            if (terms.Length != rhs.terms.Length)
            {
                return(false);
            }

            for (int i = 0; i < terms.Length; i++)
            {
                if (terms[i].CompareTo(rhs.terms[i]) != 0)
                {
                    return(false);
                }
            }

            return(dot == rhs.dot);
        }