Please write a recursive descent parser (including a lexical analyzer) for the following EBNF in C. Your program codes should be runnable.
<exprs> -> <expr>; {<expr>;}
<expr> -> <term> { (+ | -) <term> }
<term> -> <factor> { (*|/ ) <factor> }
<factor> -> <exp> {^ <exp>}
<exp> -> id | int_lit | real_lit | (<expr>)
where,
^ indicates the power operation, id is a legal identifier name, int_lit represents any positive integer number, and real_lit represents any positive floating-point number.
Input and output examples:
Input:
x ^ (y+1) - x/2.5 + z;
sum + total * 10;
Output:
parsing succeed
Input:
3 + x*y);
Output:
parsing fail
Note 1: Please name your input file as “input.txt”
Note 2: Try adding some error messages in output such as “lack of right parenthesis”.
Note 3: Try to rewrite the grammar to allow negative numbers.
#include<stdio.h>
void E();
void T();
void V();
int flag=0,i,r=1;
char s[100];
void E()
{
T();
if(s[i]=='+' || s[i]=='^' || s[i]=='/' || s[i]=='-' ||
s[i]=='*')
{
if(s[i]=='('){
flag=0;
i++;
r++;
E();
}
else if(s[i]==')')
{
r--;
}
}
else if(s[i]==';' && r==1)
flag=1;
}
void T()
{
V();
if(s[i]=='*' || s[i]=='+' || s[i]=='^' || s[i]=='/' ||
s[i]=='-')
{
if(s[i]=='('){
flag=0;
i++;
r++;
T();
}
else if(s[i]==')')
{
r--;
}
}
else if(s[i]==';' && r==1)
flag=1;
}
void V()
{
if(s[i]>='a' && s[i]<='z')
i++;
else
flag=1;
}
int main()
{
printf("Enter a valid expression:\n");
gets(s);
E();
if(flag==1)
printf("parsing succeed");
else
printf("parsing fail");
}
Please write a recursive descent parser (including a lexical analyzer) for the following EBNF in C....
NEED THIS SOON. Recursive Descent Parsing Consider the following BNF grammar: A -> I = E E -> P O P | P O -> + | - | * | / | ** P -> I | L | UI | UL | (E) U -> + | - | ! I -> C | CI C -> a | b | ... | y | z L -> D | DL D -> 0 | 1 | ......
Recursive Descent Parsing Consider the following BNF grammar: A -> I = E E -> P O P | P O -> + | - | * | / | ** P -> I | L | UI | UL | (E) U -> + | - | ! I -> C | CI C -> a | b | ... | y | z L -> D | DL D -> 0 | 1 | ... | 8 |...
You shall develop a grammar and implement a parser which recognizes valid statements as described below in the assignment specification. You may develop your code using C, C++. The test file include these expressions below. The first six should pass and the rest should fail: first = one1 + two2 - three3 / four4 ; second = one1 * (two2 * three3) ; second = one1 * (two2 * three3) ; third = ONE + twenty - three3 ; third...
Student ID: 123 Write a C+ program with the following specifications: a. Define a C++ function (name it function_StudentlD where StudentID is your actual student ID number) that has one integer input (N) and one double input (x) and returns a double output S, where N S = n 0 and X2 is given by 0 xeVn n 0,1 Хл —{2. nx 2 n 2 2 m2 x2 3 (Note: in the actual quiz, do not expect a always, practice...
1. (p. 2-3.) Which of the following is NOT a reason for studying concepts of programming languages according to Sebesta? a. Increased capacity to express ideas. b. Improved background for choosing appropriate languages. c. Increased ability to design new languages. d. Increased ability to learn new languages. 2. (p. 5-6.) What programming language has dominated scientific computing over the past 50 years? a. FORTRAN b. ALGOL c. SNOBOL d. PL/I 3. (p. 6.) What programming language has dominated artificial intelligence...
Exercise #1: Write a C program that contains the following steps (make sure all variables are int). Read carefully each step as they are not only programming steps but also learning topics that explain how functions in C really work. Ask the user for a number between 10 and 99. Write an input validation loop to make sure it is within the prescribed range and ask again if not. Commenting out the existing coding, write the code to divide a...