//LIB getLogicSentence_replacement getLogicSentence = function () { parser_word_found = false; aux_verb = -1; aux_noun1 = -1; aux_adject1 = -1; aux_adverb = -1; aux_pronoun = -1 aux_pronoun_adject = -1 aux_preposition = -1; aux_noun2 = -1; aux_adject2 = -1; aux_noun3 = -1; FLAG_NOUN3 = 64; initializeLSWords(); SL_found = false; order = getSentencefromBuffer(); setFlag(FLAG_PARSER_SETTINGS, bitclear(getFlag(FLAG_PARSER_SETTINGS),1)); // Initialize flag that says an unknown word was found in the sentence words = order.split(" "); words = processPronounSufixes(words); wordsearch_loop: for (var i=0;i10) currentword = currentword.substring(0,MAX_WORD_LENGHT); foundWord = findVocabulary(currentword); if (foundWord) { wordtype = foundWord[VOCABULARY_TYPE]; word_id = foundWord[VOCABULARY_ID]; switch (wordtype) { case WORDTYPE_VERB: if (aux_verb == -1) aux_verb = word_id; break; case WORDTYPE_NOUN: if (aux_noun1 == -1) aux_noun1 = word_id; else if (aux_noun2 == -1) aux_noun2 = word_id; else if (aux_noun3 == -1) aux_noun3 = word_id; break; case WORDTYPE_ADJECT: if (aux_adject1 == -1) aux_adject1 = word_id; else if (aux_adject2 == -1) aux_adject2 = word_id; break; case WORDTYPE_ADVERB: if (aux_adverb == -1) aux_adverb = word_id; break; case WORDTYPE_PRONOUN: if (aux_pronoun == -1) { aux_pronoun = word_id; if ((previous_noun != EMPTY_WORD) && (aux_noun1 == -1)) { aux_noun1 = previous_noun; if (previous_adject != EMPTY_WORD) aux_adject1 = previous_adject; } } break; case WORDTYPE_CONJUNCTION: break wordsearch_loop; // conjunction or nexus. Should not appear in this function, just added for security case WORDTYPE_PREPOSITION: if (aux_preposition == -1) aux_preposition = word_id; if (aux_noun1!=-1) setFlag(FLAG_PARSER_SETTINGS, bitset(getFlag(FLAG_PARSER_SETTINGS),2)); // Set bit that determines that a preposition word was found after first noun break; } // Nouns that can be converted to verbs if ((aux_noun1!=-1) && (aux_verb==-1) && (aux_noun1 < NUM_CONVERTIBLE_NOUNS)) { aux_verb = aux_noun1; aux_noun1 = -1; } if ((aux_verb==-1) && (aux_noun1!=-1) && (previous_verb!=EMPTY_WORD)) aux_verb = previous_verb; // Support "TAKE SWORD AND SHIELD" --> "TAKE WORD AND TAKE SHIELD" if ((aux_verb!=-1) || (aux_noun1!=-1) || (aux_adject1!=-1 || (aux_preposition!=-1) || (aux_adverb!=-1))) SL_found = true; } else if (aux_verb!=-1) setFlag(FLAG_PARSER_SETTINGS, bitset(getFlag(FLAG_PARSER_SETTINGS),1)); // Set bit that determines that an unknown word was found after the verb } if (SL_found) { if (aux_verb != -1) setFlag(FLAG_VERB, aux_verb); if (aux_noun1 != -1) setFlag(FLAG_NOUN1, aux_noun1); if (aux_adject1 != -1) setFlag(FLAG_ADJECT1, aux_adject1); if (aux_adverb != -1) setFlag(FLAG_ADVERB, aux_adverb); if (aux_pronoun != -1) { setFlag(FLAG_PRONOUN, aux_noun1); setFlag(FLAG_PRONOUN_ADJECT, aux_adject1); } else { setFlag(FLAG_PRONOUN, EMPTY_WORD); setFlag(FLAG_PRONOUN_ADJECT, EMPTY_WORD); } if (aux_preposition != -1) setFlag(FLAG_PREP, aux_preposition); if (aux_noun2 != -1) setFlag(FLAG_NOUN2, aux_noun2); if (aux_noun3 != -1) setFlag(FLAG_NOUN3, aux_noun3); if (aux_adject2 != -1) setFlag(FLAG_ADJECT2, aux_adject2); setReferredObject(getReferredObject()); previous_verb = aux_verb; if ((aux_noun1!=-1) && (aux_noun1>=NUM_PROPER_NOUNS)) { previous_noun = aux_noun1; if (aux_adject1!=-1) previous_adject = aux_adject1; } } if ((aux_verb + aux_noun1+ aux_adject1 + aux_adverb + aux_pronoun + aux_preposition + aux_noun2 + aux_adject2 + aux_noun3) != -9) parser_word_found = true; return SL_found; }