//判断算数表达式是否有效 ( 间接递归的例子 )
//表达式如 a + b | (a + b) | a * (a + b)
//把一个表达式(expression) 进行细分
//expression = term + term | term - term | term
//term = factor * factor | factor / factor | factor
//factor = (expression) | digit | letter
#include <iostream>
#include <string>
using namespace std;
class ExpressionJudge
{
public:
bool isValid(const string& expr,const int pos);
private:
// 检查expr_中从 pos_ 位置开始是否有一个合法的算数表达式
bool ValidExpression();
// 检查expr_中从 pos_ 位置开始是否一个合法的term
bool ValidTerm();
// 检查expr_中从 pos_ 位置开始是否是一个合法的factor
bool ValidFactor();
// 获取expr_中 pos_ 位置之后的下一个非空白字符
char GetChar();
string expr_;
int pos_;
};
bool ExpressionJudge::isValid(const string& expr,const int pos)
{
expr_ = expr;
pos_ = pos;
return ValidExpression() && (pos_ == expr_.length() - 1) ;
}
bool ExpressionJudge::ValidExpression()
{
if( ValidTerm() )
{
char c = GetChar();
if( c == '+' || c == '-')
{
re