/// <summary> /// Gets the objects referred to by each of the noun phrases /// </summary> /// <param name="lexer">The lexer that provides the input</param> /// <param name="addressedTo"></param> /// <param name="err"></param> /// <returns></returns> List<object> getNounPhrases(Lexer lexer, ZObject addressedTo, Err err) { // The list of referred to objects var ret = new List<object>(); lexer.Preprocess(); // Map the rest of the words to nouns while (!lexer.EOF) { int matchLength = 0; LexState lexerState = null; // Match the next noun phrase var t = matchInContext(addressedTo, lexer, out matchLength, ref lexerState); // 5. if no noun was mapped if (null == t) { // Try the main relations (isa) // error could not understand at index err . SB . AppendFormat("The phrase \"{0}\" isn't understood.", lexer.ToEndOfLine().Trim()); return null; } // Save the noun phrase ret.Add(t); // Move past the words in that subphrase if (null != lexerState) lexer.Restore(lexerState); lexer.Preprocess(); } return ret; // couldNotUnderstand(string, startingAt); // isAmbiguous(words); }