本文整理汇总了C++中lem::iridium::Macro_Parser类的典型用法代码示例。如果您正苦于以下问题:C++ Macro_Parser类的具体用法?C++ Macro_Parser怎么用?C++ Macro_Parser使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Macro_Parser类的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: LoadTxt
void SyllabRule::LoadTxt(lem::Iridium::Macro_Parser &txtfile, Dictionary &dict)
{
lem::Iridium::BSourceState point_begin = txtfile.tellp();
id_src = dict.GetDebugSymbols().RegisterLocation(txtfile, point_begin);
// шапка: syllab_rule XXXX language=YYY
name = txtfile.read().string();
txtfile.read_it(B_LANGUAGE);
txtfile.read_it(B_EQUAL);
lem::Iridium::BethToken lang = txtfile.read();
id_language = dict.GetSynGram().Find_Language(lang.string());
if (id_language == UNKNOWN)
{
lem::Iridium::Print_Error(lang, txtfile);
dict.GetIO().merr().printf("Unknown language name %us\n", lang.c_str());
throw lem::E_BaseException();
}
txtfile.read_it(B_OFIGPAREN);
txtfile.read_it(B_IF);
txtfile.read_it(B_CONTEXT);
condition.LoadTxt(txtfile, dict);
txtfile.read_it(B_THEN);
txtfile.read_it(B_OFIGPAREN);
txtfile.read_it(B_CONTEXT);
result.LoadTxt(txtfile, dict, condition);
txtfile.read_it(B_CFIGPAREN); // закрываем блок then { ... }
txtfile.read_it(B_CFIGPAREN); // закрываем тело правила
return;
}
示例2: LoadTxt
void KB_Facts::LoadTxt(Solarix::Dictionary &dict, lem::Iridium::Macro_Parser &txtfile)
{
name = txtfile.read().string();
txtfile.read_it(B_LANGUAGE);
txtfile.read_it(B_EQUAL);
lem::Iridium::BethToken lang = txtfile.read();
id_language = dict.GetSynGram().Find_Language(lang.string());
if (id_language == UNKNOWN)
{
lem::Iridium::Print_Error(lang, txtfile);
dict.GetIO().merr().printf("Unknown language name %us\n", lang.c_str());
throw lem::E_BaseException();
}
txtfile.read_it(B_OFIGPAREN);
n_ret = 0;
while (!txtfile.eof())
{
if (txtfile.probe(B_CFIGPAREN))
break;
lem::Iridium::BethToken t = txtfile.read();
if (t.string().eqi(L"arity"))
{
txtfile.read_it(B_EQUAL);
n_arg = txtfile.read_int();
}
else if (t.string().eqi(L"return"))
{
txtfile.read_it(B_EQUAL);
lem::Iridium::BethToken t_ret = txtfile.read();
if (t_ret.eqi(L"boolean"))
{
n_ret = 1;
ret_type = 0;
}
else if (t_ret.eqi(L"integer"))
{
n_ret = 1;
ret_type = 1;
}
else
{
lem::Iridium::Print_Error(t_ret, txtfile);
dict.GetIO().merr().printf("Unknown return type %us\n", t_ret.c_str());
throw lem::E_BaseException();
}
}
else if (t.string().eqi(L"violation_score"))
{
txtfile.read_it(B_EQUAL);
if (txtfile.probe(B_SUB))
violation_score = -txtfile.read_int();
else
violation_score = txtfile.read_int();
}
else if (t.string().eqi(L"violation_handler"))
{
txtfile.read_it(B_EQUAL);
violation_handler = new PredicateTemplate();
PredicateTemplateParams_KB params(n_arg);
violation_handler->LoadTxt(dict, txtfile, params);
}
else if (t.string().eqi(L"generic"))
{
allow_generic = true;
}
else
{
lem::Iridium::Print_Error(t, txtfile);
dict.GetIO().merr().printf("Unknown property %us\n", t.c_str());
throw lem::E_BaseException();
}
}
return;
}
示例3: CompileDeclaration
void TrFun_CreateWordform::CompileDeclaration(
PM_Automat &pm,
lem::Iridium::Macro_Parser &txtfile,
TrFunctions &functions,
TrKnownVars &known_vars,
const TrBuiltInFunSignature *signature
)
{
lem::Iridium::BSourceState ebeg = txtfile.tellp();
SynGram &sg = pm.GetDict().GetSynGram();
const lem::Iridium::BethToken &class_name = txtfile.read();
const int iclass = sg.FindClass(class_name);
txtfile.read_it( B_COLON );
lem::Iridium::BSourceState ename = txtfile.tellp();
UCString entry_name = sol_read_multyname( pm.GetIO(), txtfile, B_OFIGPAREN );
const int v_ientry = sg.FindEntry( entry_name, iclass, false );
if( v_ientry==UNKNOWN )
{
lem::Iridium::Print_Error( ename, txtfile );
pm.GetIO().merr().printf( "Unknown entry [%vfE%us:%us%vn]\n", class_name.c_str(), entry_name.c_str() );
throw E_ParserError();
}
ientry = new TrFun_Constant( TrIntValue(sg.GetEntry(v_ientry).GetKey()) );
while( !txtfile.eof() )
{
if( txtfile.pick().GetToken()==B_CFIGPAREN )
{
break;
}
// Координатная пара или имя формы слова в апострофах
lem::Iridium::BethToken cn = txtfile.read();
if( lem::in_quotes(cn.string()) )
{
form_name = strip_quotes(cn.string());
}
else
{
bool AFFIRM=true;
if( cn.GetToken()==B_NEGATIVE )
{
// Оператор отрицания перед определением координаты!
AFFIRM=false;
cn = txtfile.read();
}
// Для бистабильных - просто имя координаты.
int icoord=UNKNOWN, istate=UNKNOWN;
icoord = sg.FindCoord(cn).GetIndex();
if( icoord==UNKNOWN )
{
lem::Iridium::Print_Error( cn, txtfile );
pm.GetIO().merr().printf( "Unknown coordinate [%vfE%us%vn]\n", cn.c_str() );
throw E_ParserError();
}
if( sg.coords()[icoord].IsBistable() )
{
istate=AFFIRM ? 1 : 0;
}
else
{
txtfile.read_it( B_COLON );
const lem::Iridium::BethToken & sn = txtfile.read();
istate = sg.coords()[icoord].FindState(sn);
if( istate==UNKNOWN )
{
// Нет такого состояния для этого измерения.
lem::Iridium::Print_Error(sn,txtfile);
sg.GetIO().merr().printf(
"State [%vfE%us%vn] is not declared for coordinate [%vfE%us%vn]\n"
, sn.c_str(), cn.c_str()
);
throw E_ParserError();
}
}
TrIntValue v2( icoord );
coords.push_back( new TrFun_Constant(v2) );
TrIntValue v3( istate );
states.push_back( new TrFun_Constant(v3) );
}
}
txtfile.read_it( B_CFIGPAREN );
return;
}