本文整理汇总了C++中SynGram::FindEntry2方法的典型用法代码示例。如果您正苦于以下问题:C++ SynGram::FindEntry2方法的具体用法?C++ SynGram::FindEntry2怎么用?C++ SynGram::FindEntry2使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SynGram
的用法示例。
在下文中一共展示了SynGram::FindEntry2方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LoadTxt
//.........这里部分代码省略.........
// Вероятно, следует также переслать координатные пары.
const SG_EntryForm& eef = ef.forms()[ ie.GetForm() ];
const CP_Array& dims = eef.coords();
for( Container::size_type ii=0; ii<dims.size(); ii++ )
{
// Здесь немного наворочено - прямо использовать конструктор без
// копирования в промежуточные поля нельзя из-за ошибки в
// кодогенераторе Symantec C++ (появляется General Protection Fault).
const GramCoordAdr ca = dims[ii].GetCoord();
const int cs = dims[ii].GetState();
pair.push_back( GramCoordEx( ca, cs, true ) );
}
// И наконец, пересылаем полное имя (лексическое содержимое) статьи.
// icenter=0;
// e_list.push_back( entry_key );
name = RC_Lexem( const_cast<Lexem*>(&ef.GetName()), null_deleter() );
}
return;
}
const BSourceState back=txtfile.tellp();
const BethToken t = txtfile.read();
bool read_ofigparen=true;
if( t.GetToken()==B_COLON )
{
// Считываем имя статьи, которое может в общем случае состоять
// из нескольких лексем. Признаком окончания имени служит
// открывающая фигурная скобка '{'.
Lexem *mname = new Lexem( sol_read_multyname( gram.GetIO(), txtfile,B_OFIGPAREN) );
// Преобразуем в мультилексему так, чтобы правильно распознавались
// объявления имен типа "ЕЩ^Ё".
gram.GetDict().GetLexAuto().TranslateLexem(*mname,false);
mname->Translate( gram.GetDict().GetGraphGram(), 2 );
//(*name) = mname;
name = RC_Lexem( mname );
// lexem_owner.resize(1);
// lexem_owner.Nullify();
read_ofigparen=false;
// Пытаемся найти статью.
if( *mname != sol_get_token(B_ANY) )
{
// Считан НЕ квантор всеобщности, так что это должно быть имя статьи.
// Попытаемся найти статью среди уже загруженных, причем ищем с
// критерием принадлежности определенному синтаксическому классу.
const int ientry=gram.FindEntry2(*mname,iclass);
// Нашли ?
if( ientry==UNKNOWN )
{
// Нет! Выводим сообщение об неверном имени словарной статьи.
lem::Iridium::Print_Error(txtfile);
gram.GetIO().merr().printf(
"The entry [%us:%us] is not previously declared in grammar\n"
, gram.classes()[iclass].GetName().c_str()
, mname->ToString().c_str()
);
throw E_ParserError();
}
// Запомним КЛЮЧ словарной статьи.
entry_key=gram.GetEntry(ientry).GetKey();
}
else
entry_key=ANY_STATE;
}
else
{
txtfile.seekp(back);
entry_key=ANY_STATE;
}
bool load_precise=true;
if( read_ofigparen )
{
const BSourceState back = txtfile.tellp();
if( txtfile.read().GetToken()!=B_OFIGPAREN )
{
// Секции уточнения координат нет.
txtfile.seekp(back);
load_precise = false;
}
}
if(load_precise)
LoadPreciser(context,txtfile,gram,iclass);
return;
}