Question: Please give the entire code that can be copied directly, please run the program in any terminal (ubuntu), and screenshot the command and the result.

Please give the entire code that can be copied directly, please run the program in any terminal (ubuntu), and screenshot the command and the result. Thank you! Please provide the screenshot, I will upvote if the answer is correct.

==================================================================

Please modify the C program to detect tokens in a C program, to get the following output:

----------------------------

'int' IS A KEYWORD 'a' IS A VALID IDENTIFIER '=' IS AN OPERATOR '2' IS AN INTEGER 'b' IS A VALID IDENTIFIER '=' IS AN OPERATOR '3' IS AN INTEGER 'c' IS A VALID IDENTIFIER '=' IS AN OPERATOR 'b' IS A VALID IDENTIFIER '%' IS AN OPERATOR 'a' IS A VALID IDENTIFIER

========================================================

test the program with

--------------------------------

int main() { // maximum legth of string is 100 here char str[1000] = "int a=2, b=3, c = b % a;"; parse(str); // calling the parse function return (0); } 

===============================================================================

C Code:

---------------------------

#include #include #include #include // Returns 'true' if the character is a DELIMITER. bool isDelimiter(char ch) { if (ch == ' ' || ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == ',' || ch == ';' || ch == '>' || ch == '<' || ch == '=' || ch == '(' || ch == ')' || ch == '[' || ch == ']' || ch == '{' || ch == '}') return (true); return (false); } // Returns 'true' if the character is an OPERATOR. bool isOperator(char ch) { if (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '>' || ch == '<' || ch == '=' ) return (true); return (false); } // Returns 'true' if the string is a VALID IDENTIFIER. bool validIdentifier(char* str) { if (str[0] == '0' || str[0] == '1' || str[0] == '2' || str[0] == '3' || str[0] == '4' || str[0] == '5' || str[0] == '6' || str[0] == '7' || str[0] == '8' || str[0] == '9' || isDelimiter(str[0]) == true) return (false); return (true); } // Returns 'true' if the string is a KEYWORD. bool isKeyword(char* str) { if (!strcmp(str, "if") || !strcmp(str, "else") || !strcmp(str, "while") || !strcmp(str, "do") || !strcmp(str, "break") || !strcmp(str, "continue") || !strcmp(str, "int") || !strcmp(str, "double") || !strcmp(str, "float") || !strcmp(str, "return") || !strcmp(str, "char") || !strcmp(str, "case") || !strcmp(str, "char") || !strcmp(str, "sizeof") || !strcmp(str, "long") || !strcmp(str, "short") || !strcmp(str, "typedef") || !strcmp(str, "switch") || !strcmp(str, "unsigned") || !strcmp(str, "void") || !strcmp(str, "static") || !strcmp(str, "struct") || !strcmp(str, "goto")) return (true); return (false); } // Returns 'true' if the string is an INTEGER. bool isInteger(char* str) { int i, len = strlen(str); if (len == 0) return (false); for (i = 0; i < len; i++) { if (str[i] != '0' && str[i] != '1' && str[i] != '2' && str[i] != '3' && str[i] != '4' && str[i] != '5' && str[i] != '6' && str[i] != '7' && str[i] != '8' && str[i] != '9' || (str[i] == '-' && i > 0)) return (false); } return (true); } // Returns 'true' if the string is a REAL NUMBER. bool isRealNumber(char* str) { int i, len = strlen(str); bool hasDecimal = false; if (len == 0) return (false); for (i = 0; i < len; i++) { if (str[i] != '0' && str[i] != '1' && str[i] != '2' && str[i] != '3' && str[i] != '4' && str[i] != '5' && str[i] != '6' && str[i] != '7' && str[i] != '8' && str[i] != '9' && str[i] != '.' || (str[i] == '-' && i > 0)) return (false); if (str[i] == '.') hasDecimal = true; } return (hasDecimal); } // Extracts the SUBSTRING. char* subString(char* str, int left, int right) { int i; char* subStr = (char*)malloc( sizeof(char) * (right - left + 2)); for (i = left; i <= right; i++) subStr[i - left] = str[i]; subStr[right - left + 1] = '\0'; return (subStr); }

// Parsing the input STRING. void scanner(char* str) { int left = 0, right = 0; int len = strlen(str); while (right <= len && left <= right) { if (isDelimiter(str[right]) == false) right++; if (isDelimiter(str[right]) == true && left == right) { if (isOperator(str[right]) == true) printf("'%c' IS AN OPERATOR ", str[right]); right++; left = right; } else if (isDelimiter(str[right]) == true && left != right || (right == len && left != right)) { char* subStr = subString(str, left, right - 1); if (isKeyword(subStr) == true) printf("'%s' IS A KEYWORD ", subStr); else if (isInteger(subStr) == true) printf("'%s' IS AN INTEGER ", subStr); else if (isRealNumber(subStr) == true) printf("'%s' IS A REAL NUMBER ", subStr); else if (validIdentifier(subStr) == true && isDelimiter(str[right - 1]) == false) printf("'%s' IS A VALID IDENTIFIER ", subStr); else if (validIdentifier(subStr) == false && isDelimiter(str[right - 1]) == false) printf("'%s' IS NOT A VALID IDENTIFIER ", subStr); left = right; } } return; }

int main() { // maximum legth of string is 100 here char str[1000] = "int a=2, b=3, c = b % a;";

parse(str); // calling the parse function

return (0); }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!