利用递归下降分析法求解简单正整数四则运算
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstdio>
#include <cmath>
#include <math.h>
#include <limits.h>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <algorithm>
using namespace std;
double expr(char *s);
double term(char *s);
double factor(char *s);
int pos = 0;
int main()
{
char *s = "(8*7)/2+(2*3)-(9-80)";
cout << expr(s) << endl;
system("pause");
return 0;
}
double expr(char *s)
{
double t = term(s);
while (s[pos] == '+' || s[pos] == '-')
{
if (s[pos] == '+')
{
(pos)++;
t = t + term(s);
}
else if (s[pos] == '-')
{
(pos)++;
t = t - term(s);
}
}
return t;
}
double term(char *s)
{
double t = factor(s);
while (s[pos] == '*' || s[pos] == '/')
{
if (s[pos] == '*')
{
(pos)++;
t = t * factor(s);
}
else if (s[pos] == '/')
{
(pos)++;
t = t / factor(s);
}
}
return t;
}
double factor(char *s)
{
if (s[pos] == '(')
{
(pos)++;
double t=expr(s);
if (s[pos] == ')')
{
pos++;
return t;
}
}
else
{
int t = 0;
while ('0' <= s[pos] && s[pos] <= '9' )
{
t = t * 10 + s[pos] - '0';
(pos)++;
}
return (double)t;
}
}