как токенизировать AC программу, если типы данных похожи на unsigned long int и т. д. - PullRequest
1 голос
/ 19 сентября 2019

Моя проблема приведена ниже - Напишите программу, которая получает данные на входе, программу (из файла) и печатает все переменные в ней как выходные данные.

Пример.Inputprogram.txt

#include<stdio.h>
int main(void)
{
    int a, b, c=10;
    char p, *ptr=NULL;
    unsigned long long int t;
}

Выходные данные должны содержать: a, b, c, p, ptr, t.

Моя программа -

#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>

int isDataType(char buffer[]){
  char types[19][10] = {"char","const","double","float","int","long","register","short","signed",
"static","struct","union","unsigned","void","volatile","int*","char*","float*","enum"};

  int i, flag = 0;

  for(i = 0; i < 19; ++i){
    if(strcmp(types[i], buffer) == 0){
      flag = 1;
      break;
    }
  }

  return flag;
}

int main(){
  char ch, buffer[15], operators[] = "+-*/%=.#";
  FILE *fp;
  int i,j=0;

  fp = fopen("inputprogram.txt","r");

  if(fp == NULL){
    printf("error while opening the file\n");
    exit(0);
  }

  while((ch = fgetc(fp)) != EOF){
    for(i = 0; i < 8; ++i){
      if(ch == operators[i])
        printf("%c is an operator\n", ch);
    } 

    if(isalpha(ch)){
      buffer[j++] = ch;
    }

    else if((ch == ' ' || ch == '\n' || ch == ',' || (isdigit(ch))== 1) && (j != 0)){
      buffer[j] = '\0';
      j = 0;

      if(isDataType(buffer) == 1)
        printf("%s is a data type\n", buffer);

      else  
        printf("%s is a variable\n", buffer);
    }

  }

  fclose(fp);

  return 0;
}

Этот кодне дает желаемого результата, если данные типа unsigned long long int находятся в текстовом файле.Как оптимизировать код таким образом, чтобы при появлении таких типов данных, как unsigned long int или int * (int space star), он также мог печатать точную переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...