Синтаксический анализатор (ввести формулу и проверить правильность записи) - 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;
}

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


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

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

8   голосов , оценка 4 из 5
Похожие ответы