Assignment 3: Exception Handling Solution

$30.00

Description

·Source code: Calculator.java

Part 1: Calculator

Your program must be able to read in the following expressions. You may wish to construct a BNF grammar in the style of the cookie exercise as an initial task.

Compile, run, and test your program with at least these expressions:

let x = 1;

(let x = 1) + x;

(let a = 2) + 3 * a – 5;

(let x = (let y = (let z = 1))) + x + y + z;

1 + (let x = 1) + (let y = 2) + (1 + x) * (1 + y) – (let x = y) – (let y = 1) – x;

1 + (let a = (let b = 1) + b) + a + 1;

(let a = (let a = (let a = (let a = 2) + a) + a) + a) – 9;

(let x = 2) ^ (let y = 3);

(let y = 3) ^ (let x = 2);

Correct return values are 1, 2, 3, 4, 5, 6, 7, 8, and 9 respectively.

Part 2: Exception Handling

Add Java exception handling to your code by defining two exception classes SyntaxError and

RuntimeError .

·A SyntaxError exception should be thrown when an illegal character is found, a closing ) is not found, or a = is not used in a let expression.

·A RuntimeError exception should be thrown when an identifier is encountered for which no value can be found.

1 of 5 , 9:20 p.m.

Assignment https://eclass.srv.ualberta.ca/mod/assign/view.php?id=3237745

The exceptions should propagate the error to the main program which prints the diagnostics of the error. You must handle these errors using Java exceptions and the message should be printed by an exception handler in a catch clause.

These will be the exception test cases:

1+(2

* 3;

// syntax error: ‘)’ expected

(let x

5) + x;

// syntax error: ‘=’ expected

(let x

= 5) (let y

= 6);

// syntax error: operator expected

(let x

= 5 let y =

6);

// syntax error: ‘)’ expected

(ler x

= 5) ^ (let

y = 6);

// runtime error: ‘ler’ undefined

(let x

= 5) + y;

// runtime error: ‘y’ undefined

A Working Procedure Example

1 + (let x = 1) + (let y = 2) + (1 + x * (1 + y)) – (let x = y) – x;

Expression

Stack

Pop & Return

H

1

1

+

|1+|

/

<E

2

1

+ (let x = 1

| let x = 1|

/

x

|1+|

1

3

1

+ (let x = 1)

|1+1|

(returned from

x

“let x = 1”)

/

| 1 + y|

(“let y = 2”

x

4

1

+ (let x = 1) + (let y = 2) + (1 + x * (1 + y

| 1 + x *|

has already

y

|1+1+2+|

returned 2)

3

5

1

+ (let x = 1) + (let y = 2) + (1 + x * (1 + y)

| 1 + x * 3|

(returned from

x

|1+1+2+|

“1 + y”)

y

/

6

1

+ (let x = 1) + (let y = 2) + (1 + x * (1 + y)) – (let x = y

| let x = y|

(“1 + x * 3”

x

|1+1+2+4-|

has already

y

returned 4)

/

(“let x = y”

x

7

1

+ (let x = 1) + (let y = 2) + (1 + x * (1 + y)) – (let x = y) – x

|1+1+2+4-2-2|

has already

y

returned 2)

2 of 5 , 9:20 p.m.

Assignment https://eclass.srv.ualberta.ca/mod/assign/view.php?id=3237745

x

8 1 + (let x = 1) + (let y = 2) + (1 + x * (1 + y)) – (let x = y) – x; <Empty> 4

y

Calculator.java

5 of 5 , 9:20 p.m.


error: Content is protected !!