C++ 从c+中的布尔表达式构建图+;
我正在尝试将C++ 从c+中的布尔表达式构建图+;,c++,graph,boolean,C++,Graph,Boolean,我正在尝试将(A+(B*C))转换为图形结构,其中++表示并行连接,*表示串行连接。如果图中的三个节点是n1、n2和n3,则: n1具有边缘(A)、边缘(B) n2具有边缘(B)、边缘(C) n3具有边缘(A)、边缘(C) 我知道布尔表达式中的变量将是边,但我不明白如何 要从为图形顶点提供的表达式中查找节点,可以使用以下命令生成表达式的语法树: class Boolean { public: Boolean(bool b) : _b( b ) {} private: bool
(A+(B*C))
转换为图形结构,其中++
表示并行连接,*
表示串行连接。如果图中的三个节点是n1
、n2
和n3
,则:
n1
具有边缘(A)、边缘(B)
n2
具有边缘(B)、边缘(C)
n3
具有边缘(A)、边缘(C)
我知道布尔表达式中的变量将是边,但我不明白如何
要从为图形顶点提供的表达式中查找节点,可以使用以下命令生成表达式的语法树:
class Boolean
{
public:
Boolean(bool b) : _b( b ) {}
private:
bool _b;
};
template<typename LHS , typename RHS>
struct parallel
{
LHS& left;
RHS& right;
parallel(const LHS& _left , const RHS& _right) : left( _left ) , right( _right ) {}
};
template<typename LHS , typename RHS>
struct serie
{
LHS& first;
RHS& second;
serie(const LHS& _left , const RHS& _right) : first( _left ) , second( _right ) {}
};
/* Boolean vs Boolean parallel expression */
parallel<Boolean,Boolean> operator+(const Boolean& lhs , const Boolean& rhs)
{
return parallel<Boolean,Boolean>( lhs , rhs );
}
/* Boolean vs Boolean serie expression */
serie<Boolean,Boolean> operator*(const Boolean& lhs , const Boolean& rhs)
{
return serie<Boolean,Boolean>( lhs , rhs );
}
/* Boolean vs internal node parallel expressions */
template<typename LHS , typename RHS>
parallel<parallel<LHS,RHS>,Boolean> operator+(const parallel<LHS,RHS>& lhs , const Boolean& rhs)
{
return parallel<parallel<LHS,RHS>,Boolean>( lhs , rhs );
}
template<typename LHS , typename RHS>
parallel<Boolean,parallel<LHS,RHS>> operator+(const Boolean& lhs , const parallel<LHS,RHS>& rhs)
{
return parallel<Boolean,parallel<LHS,RHS>>( lhs , rhs );
}
template<typename LHS , typename RHS>
parallel<serie<LHS,RHS>,Boolean> operator+(const serie<LHS,RHS>& lhs , const Boolean& rhs)
{
return parallel<serie<LHS,RHS>,Boolean>( lhs , rhs );
}
template<typename LHS , typename RHS>
parallel<Boolean,serie<LHS,RHS>> operator+(const Boolean& lhs , const serie<LHS,RHS>& rhs)
{
return parallel<Boolean,serie<LHS,RHS>>( lhs , rhs );
}
/* Boolean vs internal node serie expresssions */
template<typename LHS , typename RHS>
serie<parallel<LHS,RHS>,Boolean> operator*(const parallel<LHS,RHS>& lhs , const Boolean& rhs)
{
return serie<parallel<LHS,RHS>,Boolean>( lhs , rhs );
}
template<typename LHS , typename RHS>
serie<Boolean,parallel<LHS,RHS>> operator*(const Boolean& lhs , const parallel<LHS,RHS>& rhs)
{
return serie<Boolean,parallel<LHS,RHS>>( lhs , rhs );
}
template<typename LHS , typename RHS>
serie<serie<LHS,RHS>,Boolean> operator*(const serie<LHS,RHS>& lhs , const Boolean& rhs)
{
return serie<serie<LHS,RHS>,Boolean>( lhs , rhs );
}
template<typename LHS , typename RHS>
serie<Boolean,serie<LHS,RHS>> operator*(const Boolean& lhs , const serie<LHS,RHS>& rhs)
{
return serie<Boolean,serie<LHS,RHS>>( lhs , rhs );
}
/* internal node vs internal node parallel expressions */
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
parallel<parallel<LHS1,RHS1>,parallel<LHS2,RHS2>> operator+(const parallel<LHS1,RHS1>& lhs , const parallel<LHS2,RHS2>& rhs)
{
return parallel<parallel<LHS1,RHS1>,parallel<LHS2,RHS2>>( lhs , rhs );
}
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
parallel<serie<LHS1,RHS1>,serie<LHS2,RHS2>> operator+(const serie<LHS1,RHS1>& lhs , const serie<LHS2,RHS2>& rhs)
{
return parallel<serie<LHS1,RHS1>,serie<LHS2,RHS2>>( lhs , rhs );
}
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
parallel<parallel<LHS1,RHS1>,serie<LHS2,RHS2>> operator+(const parallel<LHS1,RHS1>& lhs , const serie<LHS2,RHS2>& rhs)
{
return parallel<parallel<LHS1,RHS1>,serie<LHS2,RHS2>>( lhs , rhs );
}
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
parallel<serie<LHS1,RHS1>,parallel<LHS2,RHS2>> operator+(const serie<LHS1,RHS1>& lhs , const parallel<LHS2,RHS2>& rhs)
{
return parallel<serie<LHS1,RHS1>,parallel<LHS2,RHS2>>( lhs , rhs );
}
/* internal node vs internal node serie expressions */
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
serie<parallel<LHS1,RHS1>,parallel<LHS2,RHS2>> operator*(const parallel<LHS1,RHS1>& lhs , const parallel<LHS2,RHS2>& rhs)
{
return serie<parallel<LHS1,RHS1>,parallel<LHS2,RHS2>>( lhs , rhs );
}
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
serie<serie<LHS1,RHS1>,serie<LHS2,RHS2>> operator*(const serie<LHS1,RHS1>& lhs , const serie<LHS2,RHS2>& rhs)
{
return serie<serie<LHS1,RHS1>,serie<LHS2,RHS2>>( lhs , rhs );
}
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
serie<parallel<LHS1,RHS1>,serie<LHS2,RHS2>> operator*(const parallel<LHS1,RHS1>& lhs , const serie<LHS2,RHS2>& rhs)
{
return serie<parallel<LHS1,RHS1>,serie<LHS2,RHS2>>( lhs , rhs );
}
template<typename LHS1 , typename RHS1 , typename LHS2 , typename RHS2>
serie<serie<LHS1,RHS1>,parallel<LHS2,RHS2>> operator*(const serie<LHS1,RHS1>& lhs , const parallel<LHS2,RHS2>& rhs)
{
return serie<serie<LHS1,RHS1>,parallel<LHS2,RHS2>>( lhs , rhs );
}
将其视为解析问题。并显示您尝试的代码。
int main()
{
Boolean a(true) , b(false) , c(true);
auto result = (a+b)*(a+c); //serie(parallel(a,b),parallel(a,c))
}