Синтаксический анализатор (ввести формулу и проверить правильность записи) - C (СИ)
Формулировка задачи:
Объясните,как написать эту программу. Ввести формулу и проверить правильность записи. Формула следующего вида:
<формула>::=<цифра>|(<формула><знак><формула>)
<>::=+|-|*
<цифра>::=0|1|2|3|4|5|6|7|8|9
Решение задачи: «Синтаксический анализатор (ввести формулу и проверить правильность записи)»
textual
Листинг программы
- #include <string.h>
- #include <stdio.h>
- using namespace std;
- int isDigit(char s)
- {
- return ((s>='0') && (s<='9'))?1:0;
- }
- int isOp(char s)
- {
- return ((s=='+')||(s=='-')||(s=='*'))?1:0;
- }
- int isFormula(char *f, int beg, int end)
- {
- int n,i,j,c,k,nbeg;
- if ((beg==end) && isDigit(f[beg])) return 1;
- if ((isDigit(f[beg]) != 0) && (isOp(f[beg+1]) != 0)) return isFormula(f,(beg+2),end);
- if (f[beg]=='(')
- {
- c=0;
- for (i=beg; i<=end; i++)
- {
- if (f[i]=='(') c++;
- if (f[i]==')') c--;
- if (c==0)
- {
- k=i+1;
- nbeg=i+2;
- break;
- }
- }
- if (c != 0) return 0;
- if (k < end)
- {
- if (isOp(f[k])) return isFormula(f, beg+1,k-2) * isFormula(f,nbeg,end);
- }
- else
- {
- return isFormula(f, beg+1,k-2);
- }
- }
- return 0;
- }
- int main(int argc, char *argv[])
- {
- char *F="1+2+((3-4)*(6+7))";
- int n,p;
- n=strlen(F);
- p=isFormula(F,0,n-1);
- if (p)
- printf("%s - is correct formula\n",F);
- else
- printf("%s - is not correct formula\n",F);
- system("PAUSE");
- return EXIT_SUCCESS;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д