#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
char input[100]; // Input buffer
int pos = 0; // Current position in input
char token; // Current character (token)
int tempCount = 0; // Temporary variable counter
// Function to get next token
void getToken() {
while (input[pos] == ' ' || input[pos] == '\t') pos++;
token = input[pos++];
}
// Function to create new temporary variable name
char* newTemp() {
static char temp[10];
sprintf(temp, "t%d", tempCount++);
return strdup(temp);
}
// Forward declarations
char* expression();
// Function to handle numbers or identifiers
char* factor() {
char* result = (char*)malloc(10);
if (isdigit(token)) {
sprintf(result, "%c", token);
getToken();
} else if (isalpha(token)) {
sprintf(result, "%c", token);
getToken();
} else {
printf("Syntax Error in factor!\n");
exit(1);
}
return result;
}
// Function to handle multiplication and division
char* term() {
char* left = factor();
while (token == '*' || token == '/') {
getToken();
char* right = factor();
char* temp = newTemp();
printf("%s = %s %c %s\n", temp, left, op, right);
left = temp;
}
return left;
}
// Function to handle addition and subtraction
char* expression() {
char* left = term();
while (token == '+' || token == '-') {
getToken();
char* right = term();
char* temp = newTemp();
printf("%s = %s %c %s\n", temp, left, op, right);
left = temp;
}
return left;
}
// Function to handle the assignment statement
void assignment() {
if (!isalpha(token)) {
printf("Syntax Error: Expected identifier on the left-hand side\n");
exit(1);
}
char id = token;
getToken();
if (token != '=') {
printf("Syntax Error: Expected '=' after identifier\n");
exit(1);
}
getToken(); // Skip '='
char* result = expression();
if (token != ';') {
printf("Syntax Error: Expected ';' at the end\n");
exit(1);
}
printf("%c = %s\n", id, result);
}
int main() {
printf("Enter an expression (e.g., a = 3 + 4 * b;): ");
fgets(input, sizeof(input), stdin);
getToken();
assignment();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxjdHlwZS5oPgojaW5jbHVkZSA8c3RkbGliLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KCmNoYXIgaW5wdXRbMTAwXTsgIC8vIElucHV0IGJ1ZmZlcgppbnQgcG9zID0gMDsgICAgICAvLyBDdXJyZW50IHBvc2l0aW9uIGluIGlucHV0CmNoYXIgdG9rZW47ICAgICAgIC8vIEN1cnJlbnQgY2hhcmFjdGVyICh0b2tlbikKaW50IHRlbXBDb3VudCA9IDA7IC8vIFRlbXBvcmFyeSB2YXJpYWJsZSBjb3VudGVyCgovLyBGdW5jdGlvbiB0byBnZXQgbmV4dCB0b2tlbgp2b2lkIGdldFRva2VuKCkgewogICAgd2hpbGUgKGlucHV0W3Bvc10gPT0gJyAnIHx8IGlucHV0W3Bvc10gPT0gJ1x0JykgcG9zKys7CiAgICB0b2tlbiA9IGlucHV0W3BvcysrXTsKfQoKLy8gRnVuY3Rpb24gdG8gY3JlYXRlIG5ldyB0ZW1wb3JhcnkgdmFyaWFibGUgbmFtZQpjaGFyKiBuZXdUZW1wKCkgewogICAgc3RhdGljIGNoYXIgdGVtcFsxMF07CiAgICBzcHJpbnRmKHRlbXAsICJ0JWQiLCB0ZW1wQ291bnQrKyk7CiAgICByZXR1cm4gc3RyZHVwKHRlbXApOwp9CgovLyBGb3J3YXJkIGRlY2xhcmF0aW9ucwpjaGFyKiBleHByZXNzaW9uKCk7CgovLyBGdW5jdGlvbiB0byBoYW5kbGUgbnVtYmVycyBvciBpZGVudGlmaWVycwpjaGFyKiBmYWN0b3IoKSB7CiAgICBjaGFyKiByZXN1bHQgPSAoY2hhciopbWFsbG9jKDEwKTsKICAgIGlmIChpc2RpZ2l0KHRva2VuKSkgewogICAgICAgIHNwcmludGYocmVzdWx0LCAiJWMiLCB0b2tlbik7CiAgICAgICAgZ2V0VG9rZW4oKTsKICAgIH0gZWxzZSBpZiAoaXNhbHBoYSh0b2tlbikpIHsKICAgICAgICBzcHJpbnRmKHJlc3VsdCwgIiVjIiwgdG9rZW4pOwogICAgICAgIGdldFRva2VuKCk7CiAgICB9IGVsc2UgewogICAgICAgIHByaW50ZigiU3ludGF4IEVycm9yIGluIGZhY3RvciFcbiIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CiAgICByZXR1cm4gcmVzdWx0Owp9CgovLyBGdW5jdGlvbiB0byBoYW5kbGUgbXVsdGlwbGljYXRpb24gYW5kIGRpdmlzaW9uCmNoYXIqIHRlcm0oKSB7CiAgICBjaGFyKiBsZWZ0ID0gZmFjdG9yKCk7CiAgICB3aGlsZSAodG9rZW4gPT0gJyonIHx8IHRva2VuID09ICcvJykgewogICAgICAgIGNoYXIgb3AgPSB0b2tlbjsKICAgICAgICBnZXRUb2tlbigpOwogICAgICAgIGNoYXIqIHJpZ2h0ID0gZmFjdG9yKCk7CiAgICAgICAgY2hhciogdGVtcCA9IG5ld1RlbXAoKTsKICAgICAgICBwcmludGYoIiVzID0gJXMgJWMgJXNcbiIsIHRlbXAsIGxlZnQsIG9wLCByaWdodCk7CiAgICAgICAgbGVmdCA9IHRlbXA7CiAgICB9CiAgICByZXR1cm4gbGVmdDsKfQoKLy8gRnVuY3Rpb24gdG8gaGFuZGxlIGFkZGl0aW9uIGFuZCBzdWJ0cmFjdGlvbgpjaGFyKiBleHByZXNzaW9uKCkgewogICAgY2hhciogbGVmdCA9IHRlcm0oKTsKICAgIHdoaWxlICh0b2tlbiA9PSAnKycgfHwgdG9rZW4gPT0gJy0nKSB7CiAgICAgICAgY2hhciBvcCA9IHRva2VuOwogICAgICAgIGdldFRva2VuKCk7CiAgICAgICAgY2hhciogcmlnaHQgPSB0ZXJtKCk7CiAgICAgICAgY2hhciogdGVtcCA9IG5ld1RlbXAoKTsKICAgICAgICBwcmludGYoIiVzID0gJXMgJWMgJXNcbiIsIHRlbXAsIGxlZnQsIG9wLCByaWdodCk7CiAgICAgICAgbGVmdCA9IHRlbXA7CiAgICB9CiAgICByZXR1cm4gbGVmdDsKfQoKLy8gRnVuY3Rpb24gdG8gaGFuZGxlIHRoZSBhc3NpZ25tZW50IHN0YXRlbWVudAp2b2lkIGFzc2lnbm1lbnQoKSB7CiAgICBpZiAoIWlzYWxwaGEodG9rZW4pKSB7CiAgICAgICAgcHJpbnRmKCJTeW50YXggRXJyb3I6IEV4cGVjdGVkIGlkZW50aWZpZXIgb24gdGhlIGxlZnQtaGFuZCBzaWRlXG4iKTsKICAgICAgICBleGl0KDEpOwogICAgfQoKICAgIGNoYXIgaWQgPSB0b2tlbjsKICAgIGdldFRva2VuKCk7CgogICAgaWYgKHRva2VuICE9ICc9JykgewogICAgICAgIHByaW50ZigiU3ludGF4IEVycm9yOiBFeHBlY3RlZCAnPScgYWZ0ZXIgaWRlbnRpZmllclxuIik7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICBnZXRUb2tlbigpOyAvLyBTa2lwICc9JwogICAgY2hhciogcmVzdWx0ID0gZXhwcmVzc2lvbigpOwoKICAgIGlmICh0b2tlbiAhPSAnOycpIHsKICAgICAgICBwcmludGYoIlN5bnRheCBFcnJvcjogRXhwZWN0ZWQgJzsnIGF0IHRoZSBlbmRcbiIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgcHJpbnRmKCIlYyA9ICVzXG4iLCBpZCwgcmVzdWx0KTsKfQoKaW50IG1haW4oKSB7CiAgICBwcmludGYoIkVudGVyIGFuIGV4cHJlc3Npb24gKGUuZy4sIGEgPSAzICsgNCAqIGI7KTogIik7CiAgICBmZ2V0cyhpbnB1dCwgc2l6ZW9mKGlucHV0KSwgc3RkaW4pOwoKICAgIGdldFRva2VuKCk7CiAgICBhc3NpZ25tZW50KCk7CgogICAgcmV0dXJuIDA7Cn0=