public bool Match(SolarixGrammarEngineNET.SyntaxTreeNode proj, int iver, SolarixGrammarEngineNET.GrammarEngine2 gren) { if (lexeme != null) { return(proj.GetWord().Equals(lexeme, StringComparison.InvariantCultureIgnoreCase)); } if (id_lemma != null) { int ekey = proj.GetVersionEntryID(iver); if (id_lemma.Contains(ekey)) { return(true); } return(false); } if (pos != null) { bool pos_matched = false; int ekey = proj.GetVersionEntryID(iver); if (ekey != -1) { int id_class = gren.GetEntryClass(ekey); pos_matched = pos.Contains(id_class); } if (!pos_matched) { return(false); } } if (pairs != null) { bool contains_all_required_pairs = true; foreach (SolarixGrammarEngineNET.CoordPair p in pairs) { if (!proj.VersionContains(iver, p)) { contains_all_required_pairs = false; break; } } if (!contains_all_required_pairs) { return(false); } } return(true); }
public bool Match(SolarixGrammarEngineNET.SyntaxTreeNode token, SolarixGrammarEngineNET.GrammarEngine2 gren) { if (!string.IsNullOrEmpty(lexem)) { return(lexem.Equals(token.GetWord(), StringComparison.CurrentCultureIgnoreCase)); } // Признаём сопоставимость с любой версией токена. int nver = token.VersionCount(); for (int iver = 0; iver < nver; ++iver) { int version_ekey = token.GetVersionEntryID(iver); if (id_entry != -1 && version_ekey == id_entry) { return(true); } if (id_class != -1 && gren.GetEntryClass(version_ekey) == id_class) { return(true); } bool pairs_matched = true; foreach (SolarixGrammarEngineNET.CoordPair p in pairs) { if (!token.VersionContains(iver, p)) { pairs_matched = false; break; } } if (pairs_matched) { return(true); } } return(true); }
public bool Match(SolarixGrammarEngineNET.SyntaxTreeNode token, SolarixGrammarEngineNET.GrammarEngine2 gren) { if (lexeme != null) { return(token.GetWord().Equals(lexeme, StringComparison.InvariantCultureIgnoreCase)); } if (id_lemma != null) { for (int iver = 0; iver < token.VersionCount(); ++iver) { int ekey = token.GetVersionEntryID(iver); if (id_lemma.Contains(ekey)) { return(true); } } return(false); } if (pos != null) { bool pos_matched = false; for (int iver = 0; iver < token.VersionCount(); ++iver) { int ekey = token.GetVersionEntryID(iver); if (ekey != -1) { int id_class = gren.GetEntryClass(ekey); pos_matched = pos.Contains(id_class); if (pos_matched) { break; } } } if (!pos_matched) { return(false); } } if (pairs != null && pairs.Count > 0) { bool a_version_matched = false; for (int iver = 0; iver < token.VersionCount(); ++iver) { bool ver_ok = true; foreach (SolarixGrammarEngineNET.CoordPair p in pairs) { if (!token.VersionContains(iver, p)) { ver_ok = false; break; } } if (ver_ok) { a_version_matched = true; break; } } return(a_version_matched); } return(true); }