本文整理汇总了C++中Lang::getAtoms方法的典型用法代码示例。如果您正苦于以下问题:C++ Lang::getAtoms方法的具体用法?C++ Lang::getAtoms怎么用?C++ Lang::getAtoms使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Lang
的用法示例。
在下文中一共展示了Lang::getAtoms方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: build
void ExtLang::build(const Lang &lang,ulen map_atom_count)
{
original_atom_count=lang.getAtomCount();
// atoms
{
ulen len=LenAdd(lang.getAtomCount(),lang.getRuleCount());
auto atoms=createAtoms(len);
ulen index=0;
for(auto &atom : lang.getAtoms() )
{
atoms->index=index++;
atoms->name=pool.dup(atom.name);
atoms->map_index=atom.map_index;
++atoms;
}
for(auto &rule : lang.getRules() )
{
atoms->index=index++;
atoms->name=pool.cat(StrLen("@",1),rule.ret->name,StrLen("::",2),rule.name);
atoms->map_index=rule.map_index+map_atom_count;
++atoms;
}
}
// synts
{
ulen len=lang.getSyntCount();
auto synts=createSynts(len);
for(auto &synt : lang.getSynts() )
{
synts->index=synt.index;
synts->name=pool.dup(synt.name);
synts->is_lang=synt.is_lang;
synts->map_index=synt.map_index;
synts->rules.len=synt.rules.len;
++synts;
}
}
// rules
{
ulen len=lang.getRuleCount();
auto rules=createRules(len);
auto atoms=getAtoms();
auto synts=getSynts();
ulen delta=original_atom_count;
for(auto &rule : lang.getRules() )
{
rules->index=rule.index;
rules->name=pool.dup(rule.name);
rules->map_index=rule.map_index;
rules->ret=&(synts[rule.ret->index]);
auto args=createElements(*rules,LenAdd(rule.args.len,1));
for(auto element : rule.args )
{
element.apply( [=] (const AtomDesc *atom) { args->ptr=&(atoms[atom->index]); } ,
[=] (const SyntDesc *synt) { args->ptr=&(synts[synt->index]); } );
++args;
}
args->ptr=&(atoms[rule.index+delta]);
++rules;
}
}
// synts.rules
{
auto synts=this->synts;
auto *ptr=rules.ptr;
for(; +synts ;++synts)
{
ulen len=synts->rules.len;
//.........这里部分代码省略.........