Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

This assignment must have three different source code files. One file must be called Basic.java. Basic.java must contain main. Your main must ensure that there

This assignment must have three different source code files.

One file must be called Basic.java.

Basic.java must contain main. Your main must ensure that there is one and only one argument (args). If there are none or more than 1, it must print an appropriate error message and exit. That one argument will be considered as a filename. Your main must then use File.ReadAllLines to read all of the lines from the file denoted by filename. Your main must instantiate one instance of your Lexer class (to be defined below) for each line from ReadAllLines. You must parse each line using the lex method of the Lexer class. You must take the list of tokens from lex and concatenate it to a single list. If lex throws an exception, you must catch the exception, print that there was an exception and lex the next line. You must then print each token out (this is a temporary step to show that it works) once the lexing is complete.

One file must be called Token.java. This file must contain a Token class. The token class is made up of an instance of an enum and a value string. There must be a public accessor for both the enum and the value string; the underlying variables must be private. You may create whatever constructors you choose. The enum must be defined as containing values appropriate to what we will be processing. The definition of the enum should be public, but the instance inside Token must be private. We will add to this enum in the next several assignments. You will find it helpful to create an appropriate ToString overload.

The final file must be called Lexer.java. The Lexer class must contain a lex method that accepts a single string and returns a collection (array or list) of Tokens. The lex method must use one or more state machine(s) to iterate over the input string and create appropriate Tokens. Any character not allowed by your state machine(s) should throw an exception.

For this assignment, the allowable input consists of basic mathematical symbols and numbers such as you might find in Java. +, -, *, / and both positive and negative numbers, including decimals. Allow but ignore spaces/tabs. At the end of each line, add an EndOfLine token.

Some examples of valid input and the result output are:

Input

Output

an empty line

EndOfLine

5

NUMBER (5) EndOfLine

5.23 8.5 + 3

NUMBER(5.23) MINUS NUMBER(8.5) PLUS NUMBER(3) EndOfLine

8 * -4 + 99999

NUMBER (8) TIMES NUMBER (-4) PLUS NUMBER (99999) EndOfLine

7 4 3 1

NUMBER(7) NUMBER(4) NUMBER(3) NUMBER(1) EndOfLine

+ - * /

PLUS MINUS TIMES DIVIDE EndOfLine

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Concepts Of Database Management

Authors: Joy L. Starks, Philip J. Pratt, Mary Z. Last

9th Edition

1337093424, 978-1337093422

Students also viewed these Databases questions

Question

Why is succession planning important?

Answered: 1 week ago