Programa C para verificar la sintaxis del bucle ‘for’

Tal como lo definen los estándares de C, la sintaxis del bucle for es:

for (initialisation; condition; increment/decrement)
        ... 

Sintácticamente, debe haber dos puntos y coma, un paréntesis de apertura, un paréntesis de cierre y la ortografía correcta de «for». Por lo tanto, para verificar solo la sintaxis del bucle for, lo que hace un compilador es verificar las siguientes condiciones:

  • Solo se escribe “for”, y no “For”, “FOR”, “for” o cualquiera de sus variantes.
  • La declaración total consta de dos puntos y comas “;” antes de que termine el paréntesis de cierre «)».
  • Presencia de un paréntesis de apertura «(» después de la palabra clave «for» y presencia de un paréntesis de cierre «)» al final de la declaración.

Ejemplos:

Input : for (i = 10; i < 20 i++) 
Output : Semicolon Error

Input : for(i = 10; i < 20; i++
Output : Closing parenthesis absent at end 

Código –

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
  
//array to copy first three characters of string str
char arr[3]; 
  
void isCorrect(char *str)
{
      
    //semicolon, bracket1, bracket2 are used 
        //to count frequencies of
    //';', '(', and ')' respectively
    //flag is set to 1 when an error is found, else no error
    int semicolon = 0, bracket1 = 0, bracket2 = 0, flag = 0;
      
    int i;
    for (i = 0; i < 3; i++)
        arr[i] = str[i];
          
    //first 3 characters of the for loop statement is copied
    if(strcmp(arr, "for") != 0)
    {
        printf("Error in for keyword usage");
        return;
    }
      
    //Proper usage of "for" keyword checked
    while(i != strlen(str))
    {
        char ch = str[i++];
        if(ch == '(')
        {
            //opening parenthesis count
            bracket1 ++;
        }
        else if(ch == ')')
        {
            //closing parenthesis count
            bracket2 ++;
              
        }
        else if(ch == ';')
        {
            //semicolon count
            semicolon ++;
        }
        else continue;
          
    }
      
    //check number of semicolons
    if(semicolon != 2)
    { 
        printf("\nSemicolon Error");
        flag++;
    }
      
    //check closing Parenthesis
    else if(str[strlen(str) - 1] != ')')
    { 
        printf("\nClosing parenthesis absent at end");
        flag++;
    }
      
    //check opening parenthesis
    else if(str[3] == ' ' && str[4] != '(' )
    { 
        printf("\nOpening parenthesis absent after for keyword");
        flag++;
    }
      
    //check parentheses count
    else if(bracket1 != 1 || bracket2 != 1 || bracket1 != bracket2)
    { 
        printf("\nParentheses Count Error");
        flag++;
    }
      
    //no error 
    if(flag == 0)
        printf("\nNo error");
              
}
  
int main(void) {
      
    char str1[100] = "for (i = 10; i < 20; i++)";
    isCorrect(str1);
      
    char str2[100] = "for i = 10; i < 20; i++)";
    isCorrect(str2);
      
    return 0;
}

Producción :

No error
Opening parenthesis absent after for keyword 

Publicación traducida automáticamente

Artículo escrito por Sagnik Chaudhuri y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *