Question: NOTE: DO NOT COPY AN ANSWER DIRECTLY FROM GOOGLE. THIS HAS HAPPENED TO ME THREE TIMES SO FAR. PLEASE - IF YOU ARE NOT GOING

NOTE: DO NOT COPY AN ANSWER DIRECTLY FROM GOOGLE. THIS HAS HAPPENED TO ME THREE TIMES SO FAR. PLEASE - IF YOU ARE NOT GOING TO HELP ME, DO NOT POST SO THAT SOMEONE WHO IS WILLING TO CAN.

The purpose of this exercise is to write a syntax generator for a subset of the C++ programming language that will write random C++ programs to a file. By writing these random syntactically correct programs, you will further develop your understanding of the difference between syntax and semantics.

Consider the attached set of productions that define a subset of the C++ programming language:

NOTE: DO NOT COPY AN ANSWER DIRECTLY FROM GOOGLE. THIS HAS HAPPENED

TO ME THREE TIMES SO FAR. PLEASE - IF YOU ARE NOT

Problem 1. Write a program in C, C++, C#, Java, or Python (your choice) that starts with the root non-terminal and generates a random syntactically correct C++ program using the productions defined above. You should follow the examples we saw in class where we expand non-terminals recursively until we obtain a sentence consisting of terminal tokens only. In the case where a production contains more than one expansion (i.e., right-hand-side expressions), your program should select one randomly (preferably with non-uniform weighting based on which expansions are more likely to occur in C++). Your program should write the random C++ code to an output file.

Here is the class that I am using:

class Production

{

private:

string lhs;

vector rhs_options; // list of options for expansion

vector trans_probs; // list of probabilities associated // with each choice

public:

Production();

Production(string);

void add_rhs(string, double); // adds new rhs to the production

string expand() const; // returns one of the rhs choices using

// a random number generator

};

In particular, I'm having trouble with the expand function and how to implement everything in my main function. The final product should create an output such as (manually tabbed):

int main()

{

int F0Z = 0262;

if (22682 / 525)

double S1;

else

S = U;

while (8 - 594873)

{

while (97942 / 6871573097 * 7261055)

{

while (9307 * M / 4 / 2 + 4 - 7 / K)

{

double A;

}

}

}

return 0;

}

PLEASE NOTE: This assignment is NOT asking to output random numbers. Most of the answers on here for this question are just producing random numbers using rand. I've already asked this once and received such an answer. I've also received copy/pasted answers straight off google, so please don't bother. This program is supposed to create a syntactically correct C++ program. I don't need you to write the entire code, I just need some help getting in the right direction. I understand BNF grammar and parse trees, but have trouble translating that into code. Thank you

Edit: I received a comment saying "Need some Clarity of the question" but I'm not really sure how else I could be more clear? It's kind of ironic that the comment on me being more clear needs to be more clear - what information other information can I provide?

stat> I Kampa stat kif stat> Kompa stat if else l if Kampd stat else stat l if Kampd stat else Kampd stat compd stat stats *type Kassgn. stat op Kop

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!