Синтаксический анализатор (ввести формулу и проверить правильность записи) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Объясните,как написать эту программу. Ввести формулу и проверить правильность записи. Формула следующего вида: <формула>::=<цифра>|(<формула><знак><формула>) <>::=+|-|* <цифра>::=0|1|2|3|4|5|6|7|8|9

Решение задачи: «Синтаксический анализатор (ввести формулу и проверить правильность записи)»

textual
Листинг программы
  1. #include <string.h>
  2. #include <stdio.h>
  3.  
  4. using namespace std;
  5.  
  6. int isDigit(char s)
  7. {
  8.     return ((s>='0') && (s<='9'))?1:0;
  9. }
  10. int isOp(char s)
  11. {
  12.     return ((s=='+')||(s=='-')||(s=='*'))?1:0;
  13. }
  14. int isFormula(char *f, int beg, int end)
  15. {
  16.     int n,i,j,c,k,nbeg;
  17.    
  18.     if ((beg==end) && isDigit(f[beg])) return 1;
  19.    
  20.     if ((isDigit(f[beg]) != 0) && (isOp(f[beg+1]) != 0)) return isFormula(f,(beg+2),end);
  21.    
  22.     if (f[beg]=='(')
  23.     {
  24.         c=0;
  25.        
  26.         for (i=beg; i<=end; i++)
  27.         {
  28.             if (f[i]=='(') c++;
  29.             if (f[i]==')') c--;
  30.             if (c==0)
  31.             {
  32.                k=i+1;
  33.                nbeg=i+2;
  34.                break;
  35.             }
  36.          }
  37.  
  38.          if (c != 0) return 0;
  39.          
  40.          if (k < end)
  41.          {
  42.             if (isOp(f[k])) return isFormula(f, beg+1,k-2) * isFormula(f,nbeg,end);
  43.          }
  44.          else
  45.          {
  46.             return isFormula(f, beg+1,k-2);  
  47.          }
  48.     }    
  49.  
  50.     return 0;
  51.    
  52. }                                
  53.        
  54.  
  55. int main(int argc, char *argv[])
  56. {
  57.  
  58.     char *F="1+2+((3-4)*(6+7))";
  59.    
  60.     int n,p;
  61.     n=strlen(F);
  62.    
  63.     p=isFormula(F,0,n-1);
  64.    
  65.     if (p)
  66.        printf("%s - is correct formula\n",F);
  67.     else  
  68.        printf("%s - is not correct formula\n",F);
  69.  
  70.     system("PAUSE");
  71.     return EXIT_SUCCESS;
  72. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы