📄 util.cpp
字号:
#include "util.h"
extern DVec_str productions;
extern vecStr terminals;
extern vecNter nonterminals;
bool hasexisted( vecStr vec ,string str )
{
size_t i;
for(i = 0;i < vec.size() && str != vec[i];i++);
return i == vec.size() ? false : true;
}
bool hasexisted( vecNter vec ,Nonterminal n)
{
size_t i;
for(i = 0;i < vec.size() && n.token != vec[i].token;i++);
return i == vec.size() ? false : true;
}
//-------------------------------------------------------------------------------------------------------------------------------
int findIndex( string str )
{
int i;
for( i = 0;i <(int) nonterminals.size() ;i++)
if( nonterminals[i].token== str )
return i;
return -1;
}
int findTerIndex( vecStr vec,string str )
{
for( int i = 0;i <(int) vec.size();i++ )
if( vec[i] == str )
return i;
return -1; //when str == "ε"
}
//--------------------------------------------------------------------------------------------------------------------------------------------------------------------
bool firHasched(vecNter vecb,vecNter veca)
{
for( size_t i = 0;i < vecb.size();i++)
if( veca[i].first != vecb[i].first )return true;
return false;
}
bool folHasched(vecNter vecb,vecNter veca)
{
for( size_t i = 0;i < vecb.size();i++)
if( veca[i].follow != vecb[i].follow )return true;
return false;
}
//----------------------------------------------------------------------------------------------------------------------------------
void addFir_toFir(Nonterminal &set1,const Nonterminal &set2)
{
for(size_t i = 0;i < set2.first.size() && set2.first[i] != "ε";i++)
if( !hasexisted( set1.first,set2.first[i] ) )
set1.first.push_back( set2.first[i] );
}
void addFir_toFol(Nonterminal &set1,const Nonterminal &set2)
{
for(size_t i = 0;i < set2.first.size() && set2.first[i] != "ε";i++)
if( !hasexisted( set1.follow,set2.first[i] ) )
set1.follow.push_back( set2.first[i] );
}
void addFol_toFol(Nonterminal &set1,const Nonterminal &set2)
{
for(size_t i = 0;i < set2.follow.size() && set2.follow[i] != "ε";i++)
if( !hasexisted( set1.follow,set2.follow[i] ) )
set1.follow.push_back( set2.follow[i] );
}
//------------------------------------------------------------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -