Синтаксический анализатор (ввести формулу и проверить правильность записи) - 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; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д