#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
FILE *file, *fw, *fc;
int j = 0, i, n = 0;
char ch, matrix[500], temp[500];
int test_if(int i);
int test_while(int i);
int test_for(int i);
int test_var(int i);
int test_variable(int i);
void copy() {
i = 0;
memset(matrix, '\0', 500);
file = fopen("code.txt", "r+");
while ((ch = getc(file)) != EOF) {
matrix[i] = ch;
i++;
}
fclose(file);
}
void commend() {
for (i = 0; i < strlen(matrix); i++) {
if (matrix[i] == '/' && matrix[i + 1] == '*') {
do {
i++;
} while (matrix[i] != '/' && matrix[i + 1] != '*' && i < (strlen(matrix) - 1));
i += 3;
}
strncat(temp, matrix + i, 1);
}
memset(matrix, '\0', 500);
strcpy(matrix, temp);
}
int test(int q) {
for (i = q; i < strlen(matrix); i++) {
while (matrix[i] == ' ' || matrix[i] == '\n') {
i++;
}
if ((matrix[i] != 'v' && matrix[i + 1] != 'a' && matrix[i + 2] != 'r')&&(matrix[i] != 'i' && matrix[i + 1] != 'f')&&(matrix[i] != 'f' && matrix[i + 1] != 'o' && matrix[i + 2] != 'r') &&(matrix[i] != 'w' && matrix[i + 1] != 'h' && matrix[i + 2] != 'i' && matrix[i + 3] != 'l' && matrix[i + 4] != 'e') && isalpha(matrix[i])) {
i = test_variable(i);
return i;
} else {
switch (matrix[i]) {
case 'i':
i = test_if(i);
return i;
break;
case 'w':
i = test_while(i);
return i;
break;
case 'v':
i = test_var(i);
return i;
break;
default:
return i;
break;
}
}
}
}
int main(int argc, char **argv) {
fc = fopen("fc.txt", "w+");
fw = fopen("fw.txt", "w+");
copy();
commend();
test(0);
fclose(fc);
fclose(fw);
}
int test_if(int i) {
int j;
char var = '\0', sim = '\0', x, y, l_par = '\0', r_par = '\0', op, num, ll_par = '\0', rr_par = '\0', z;
if (matrix[i] == 'i' && matrix[i + 1] == 'f') {
for (j = i + 2; j < strlen(matrix); j++) {
if (matrix[j] == ' ')
continue;
l_par = matrix[j];
break;
}
if (l_par != '(')
j = i + 1;
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ' || matrix[i] == '>' || matrix[i] == '<' || matrix[i] == '=' || matrix[i] == ')' || matrix[i] == '{' || isdigit(matrix[i])) {
if (matrix[i] == '>' || matrix[i] == '<' || matrix[i] == '=' || matrix[i] == ')' || matrix[i] == '{' || isdigit(matrix[i]))
break;
continue;
}
var = matrix[i];
break;
}
if (matrix[i] == '>' || matrix[i] == '<' || matrix[i] == '=') {
i = i - 1;
}
if (isdigit(matrix[i])) {
goto after_op;
j = j - 1;
}
if (matrix[i] == ')') {
goto after_op_and_number;
i = j - 1;
}
if (matrix[i] == '{') {
goto after_op_number_rpar;
j = j - 1;
}
for (j = i + 1; j < strlen(matrix); j++) {
if (matrix[j] == ' ')
continue;
op = matrix[j];
break;
}
after_op:
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ')
continue;
num = matrix[i];
break;
}
after_op_and_number:
for (j = i + 1; j < strlen(matrix); j++) {
if (matrix[j] == ' ')
continue;
r_par = matrix[j];
break;
}
after_op_number_rpar:
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ')
continue;
ll_par = matrix[i];
break;
}
if (isalpha(var) && (op == '>' || op == '<' || op == '=') && isdigit(num)) fprintf(fc, "if(%c%c%c){\n", var, op, num);
else if (isalpha(var) && (op == '>' || op == '<' || op == '=')) { printf("enter number for if \n");
scanf("%c", &x);
fprintf(fc, "if(%c%c%c){\n", var, op, x);
fprintf(fw, "error in if\n");
} else if (isalpha(var) && isdigit(num)) { printf("enter op for if\n");
scanf("%c", &x);
fprintf(fc, "if(%c%c%c){\n", var, x, num);
fprintf(fw, "error in if\n");
} else if ((op == '>' || op == '<' || op == '=') && isdigit(num)) { printf("enter Variable for if \n");
scanf("%c", &x);
fprintf(fc, "if(%c%c%c){\n", x, op, num);
fprintf(fw, "error in if\n");
} else if ((op == '>' || op == '<' || op == '=')) { printf("enter var for if.. \n");
scanf("%c", &x);
printf("enter number for if.... \n");
scanf("%c", &y);
scanf("%c", &y);
fprintf(fc, "if(%c%c%c){\n", x, op, y);
fprintf(fw, "error in if\n");
} else if (isdigit(num)) { printf("enter var for if.. \n");
scanf("%c", &x);
printf("enter op for if.... \n");
scanf("%c", &y);
scanf("%c", &y);
fprintf(fc, "if(%c%c%c){\n", x, y, num);
fprintf(fw, "error in if\n");
} else if (isalpha(var)) { printf("enter op for if.... \n");
scanf("%c", &x);
printf("enter number for if.. \n");
scanf("%c", &y);
scanf("%c", &y);
fprintf(fc, "if(%c%c%c){\n", var, x, y);
fprintf(fw, "error in if\n");
} else {
printf("enter var for if.... \n");
scanf("%c", &x);
printf("enter op for if.. \n");
scanf("%c", &y);
scanf("%c", &y);
printf("enter number for if.. \n");
scanf("%c", &z);
scanf("%c", &z);
fprintf(fc, "if(%c%c%c){\n", x, y, z);
fprintf(fw, "error in if\n");
}
for (j = i; j < strlen(matrix); j++) {
if (matrix[j] == ' ' || matrix[j] == '\n' || matrix[j] != '}') {
j = test(j);
continue;
}
rr_par = matrix[j];
break;
}
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ' || matrix[i] == '\n' || matrix[i] != ';')
continue;
sim = matrix[i];
break;
}
fprintf(fc, "};\n");
}
return i;
}
int test_var(int i) {
int j, l, t;
char var = '\0', sem = '\0', x;
if (matrix[i] == 'v' && matrix[i + 1] == 'a' && matrix[i + 2] == 'r') {
for (j = i + 3; j < strlen(matrix); j++) {
if (matrix[j] == ' ' || matrix[j] == ';') {
if (matrix[j] == ';')
break;
continue;
}
var = matrix[j];
break;
}
if (matrix[j] == ';')
j--;
t = j;
for (l = j + 1; l < strlen(matrix); l++) {
if (matrix[l] == ' ')
continue;
sem = matrix[l];
break;
}
if (sem != ';') {
l = i + 3;
var = '\0';
}
if ((sem == ';') && isalpha(var))
fprintf(fc, "var %c;\n", var);
else if ((sem == ';')) {
fprintf(fw, "var ;\n");
printf("variable don't found please enter your character to correct\n");
x = getchar();
scanf("%c", &x);
fprintf(fc, "var %c;\n", x);
} else if (isalpha(var)) {
fprintf(fw, "var %c\n", var);
printf("one ; in this variable don't found press any key to correct this error\n");
getch();
fprintf(fc, "var %c;\n", var);
} else {
fprintf(fw, "var\n");
printf("; and character don't found\n");
printf("pleas enter your variable\n");
x = getchar();
scanf("%c", &x);
fprintf(fc, "var %c;\n", x);
}
}
return l;
}
int test_while(int i) {
int j;
char var = '\0', sim = '\0', x, y, l_par = '\0', r_par = '\0', op, num, ll_par = '\0', rr_par = '\0', z;
if (matrix[i] == 'w' && matrix[i + 1] == 'h' && matrix[i + 2] == 'i' && matrix[i + 3] == 'l' && matrix[i + 4] == 'e') {
for (j = i + 5; j < strlen(matrix); j++) {
if (matrix[j] == ' ')
continue;
l_par = matrix[j];
break;
}
if (l_par != '(')
j = i + 2;
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ' || matrix[i] == '>' || matrix[i] == '<' || matrix[i] == '=' || matrix[i] == ')' || matrix[i] == '{' || isdigit(matrix[i])) {
if (matrix[i] == '>' || matrix[i] == '<' || matrix[i] == '=' || matrix[i] == ')' || matrix[i] == '{' || isdigit(matrix[i]))
break;
continue;
}
var = matrix[i];
break;
}
if (matrix[i] == '>' || matrix[i] == '<' || matrix[i] == '=') {
i = i - 1;
}
if (isdigit(matrix[i])) {
goto after_op;
j = j - 1;
}
if (matrix[i] == ')') {
goto after_op_and_number;
i = j - 1;
}
if (matrix[i] == '{') {
goto after_op_number_rpar;
j = j - 1;
}
for (j = i + 1; j < strlen(matrix); j++) {
if (matrix[j] == ' ')
continue;
op = matrix[j];
break;
}
after_op:
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ')
continue;
num = matrix[i];
break;
}
after_op_and_number:
for (j = i + 1; j < strlen(matrix); j++) {
if (matrix[j] == ' ')
continue;
r_par = matrix[j];
break;
}
after_op_number_rpar:
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ')
continue;
ll_par = matrix[i];
break;
}
if (isalpha(var) && (op == '>' || op == '<' || op == '=') && isdigit(num)) fprintf(fc, "while(%c%c%c){\n", var, op, num);
else if (isalpha(var) && (op == '>' || op == '<' || op == '=')) { printf("enter number for while \n");
scanf("%c", &x);
fprintf(fc, "while(%c%c%c){\n", var, op, x);
fprintf(fw, "error in while\n");
} else if (isalpha(var) && isdigit(num)) { printf("enter op for while\n");
scanf("%c", &x);
fprintf(fc, "while(%c%c%c){\n", var, x, num);
fprintf(fw, "error in while\n");
} else if ((op == '>' || op == '<' || op == '=') && isdigit(num)) { printf("enter Variable for while \n");
scanf("%c", &x);
fprintf(fc, "while(%c%c%c){\n", x, op, num);
fprintf(fw, "error in while\n");
} else if ((op == '>' || op == '<' || op == '=')) { printf("enter var for while.. \n");
scanf("%c", &x);
printf("enter number for while.... \n");
scanf("%c", &y);
scanf("%c", &y);
fprintf(fc, "while(%c%c%c){\n", x, op, y);
fprintf(fw, "error in while\n");
} else if (isdigit(num)) { printf("enter var for while.. \n");
scanf("%c", &x);
printf("enter op for while.. \n");
scanf("%c", &y);
scanf("%c", &y);
fprintf(fc, "while(%c%c%c){\n", x, y, num);
fprintf(fw, "error in while\n");
} else if (isalpha(var)) { printf("enter op for while.. \n");
scanf("%c", &x);
printf("enter number for while.. \n");
scanf("%c", &y);
scanf("%c", &y);
fprintf(fc, "while(%c%c%c){\n", var, x, y);
fprintf(fw, "error in while\n");
} else {
printf("enter var for while.... \n");
scanf("%c", &x);
printf("enter op for while.. \n");
scanf("%c", &y);
scanf("%c", &y);
printf("enter number for while.. \n");
scanf("%c", &z);
scanf("%c", &z);
fprintf(fc, "while(%c%c%c){\n", x, y, z);
fprintf(fw, "error in while\n");
}
for (j = i + 1; j < strlen(matrix); j++) {
if (matrix[j] == ' ' || matrix[j] == '\n' || matrix[j] != '}') {
j = test(j);
continue;
}
rr_par = matrix[j];
break;
}
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ' || matrix[i] != ';')
continue;
sim = matrix[i];
break;
}
fprintf(fc, "};\n");
}
return i;
}
int test_variable(int i) {
int j;
printf("[%d] %c\n", i, matrix[i]);
char t, var = '\0', op = '\0', var1 = '\0', op1 = '\0', num = '\0', x, y, sem = '\0';
if (isalpha(matrix[i])) {
var = matrix[i];
for (j = i + 1; j < strlen(matrix); j++) { if (matrix[j] == ' ')
continue;
op = matrix[j];
break;
}
if (op != '=')
return i;
for (i = j + 1; i < strlen(matrix); i++) {
if (matrix[i] == ' ')
continue;
num = matrix[i];
break;
}
if (num == ';') {
sem = num;
num = '\0';
goto aftersem;
}
if ((num == '+' || num == '-' || num == '*' || num == '/')) {
op1 = num;
num = '\0';
j = i;
goto afterop1;
}
for (j = i + 1; j < strlen(matrix); j++) {
if (matrix[j] == ' ')
continue;
op1 = matrix[j];
break;
}
if (op1 == ';') {
sem = op1;
op1 = '\0';
i = j;
goto aftersem;
}
afterop1:
for (i = j + 1; i <= strlen(matrix); i++) {
if (matrix[i] == ' ') {
continue;
}
var1 = matrix[i];
break;
}
if (var1 == ';') {
sem = var1;
var1 = '\0';
goto aftersem;
}
for (j = i + 1; j <= strlen(matrix); j++) {
if (matrix[j] == ' ') {
continue;
}
sem = matrix[j];
break;
}aftersem:
if (isalpha(num) || isdigit(var1)) {
t = num;
num = var1;
var1 = t;
}
if ((var == var1)&&(op1 == '+' || op1 == '-' || op1 == '*' || op1 == '/') && isdigit(num) && sem == ';')
fprintf(fc, "%c %c %c %c %c;", var, op, var, op1, num);
else if ((op1 == '+' && op1 == '-' && op1 == '*' && op1 == '/') && isdigit(num) && sem == ';') {
fprintf(fw, "%c %c %c %c %c %c\n", var, op, var1, op1, num, sem);
fprintf(fc, "%c %c %c %c %c;", var, op, var, op1, num);
} else if ((op1 == '+' || op1 == '-' || op1 == '*' || op1 == '/') && isdigit(num)) {
fprintf(fw, "%c %c %c %c %c %c\n", var, op, num, op1, var1, sem);
fprintf(fc, "%c %c %c %c %c;\n", var, op, var, op1, num);
} else if (isdigit(num)) {
fprintf(fw, "%c %c %c %c %c %c\n", var, op, num, op1, var1, sem);
printf("enter op for varible \n");
scanf("%c", &x);
fprintf(fc, "%c %c %c %c %c;\n", var, op, var, x, num);
} else if ((op1 == '+' || op1 == '-' || op1 == '*' || op1 == '/')) {
fprintf(fw, "%c %c %c %c %c %c\n", var, op, num, op1, var1, sem);
printf("enter number for variable\n");
scanf("%c", &x);
fprintf(fc, "%c %c %c %c %c;\n", var, op, var, op1, x);
} else {
fprintf(fw, "%c %c %c %c %c %c\n", var, op, num, op1, var1, sem);
printf("enter number for variable \n");
scanf("%c", &x);
printf("enter op for varible \n");
scanf("%c", &y);
fprintf(fc, "%c %c %c %c %c;\n", var, op, var1, y, x);
}
}
i = j;
return i;
}</string.h></ctype.h></stdlib.h></stdio.h>