I need help with my java compiler, i need help to  Implementing a semantic analyzer to check for type errors, undefined variables, and other semantic errors in the program.   import java.util.*; public class SimpleCalculator { private final String input; private int position; private boolean hasDivByZero = false; public SimpleCalculator(String input) {     this.input = input;     this.position = 0; } public static void main(String[] args) {     SimpleCalculator calculator = new SimpleCalculator("3 + 5 * (2 - 1)");     int result = calculator.parseExpression();     if (calculator.hasDivByZero) {         System.out.println("Error: division by zero");     } else {         System.out.println("Result: " + result);     } } public int parseExpression() {     int value = parseTerm();     while (true) {         if (consume('+')) {             value += parseTerm();         } else if (consume('-')) {             value -= parseTerm();         } else {             break;         }     }     return value; } public int parseTerm() {     int value = parseFactor();     while (true) {         if (consume('*')) {             value *= parseFactor();         } else if (consume('/')) {             int divisor = parseFactor();             if (divisor == 0) {                 hasDivByZero = true;                 break;             }             value /= divisor;         } else {             break;         }     }     return value; } public int parseFactor() {     if (consume('(')) {         int value = parseExpression();         consume(')');         return value;     }     StringBuilder sb = new StringBuilder();     while (Character.isDigit(peek())) {         sb.append(consume());     }     return Integer.parseInt(sb.toString()); } private char consume() {     return input.charAt(position++); } private boolean consume(char c) {     if (peek() == c) {         position++;         return true;     }     return false; } private char peek() {     return position < input.length() ? input.charAt(position) : '\0'; } }

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question

I need help with my java compiler, i need help to 

Implementing a semantic analyzer to check for type errors, undefined variables, and other

semantic errors in the program.

 

import java.util.*;
public class SimpleCalculator {

private final String input;
private int position;
private boolean hasDivByZero = false;
public SimpleCalculator(String input) {
    this.input = input;
    this.position = 0;
}
public static void main(String[] args) {
    SimpleCalculator calculator = new SimpleCalculator("3 + 5 * (2 - 1)");
    int result = calculator.parseExpression();
    if (calculator.hasDivByZero) {
        System.out.println("Error: division by zero");
    } else {
        System.out.println("Result: " + result);
    }
}
public int parseExpression() {
    int value = parseTerm();
    while (true) {
        if (consume('+')) {
            value += parseTerm();
        } else if (consume('-')) {
            value -= parseTerm();
        } else {
            break;
        }
    }
    return value;
}
public int parseTerm() {
    int value = parseFactor();
    while (true) {
        if (consume('*')) {
            value *= parseFactor();
        } else if (consume('/')) {
            int divisor = parseFactor();
            if (divisor == 0) {
                hasDivByZero = true;
                break;
            }
            value /= divisor;
        } else {
            break;
        }
    }
    return value;
}
public int parseFactor() {
    if (consume('(')) {
        int value = parseExpression();
        consume(')');
        return value;
    }
    StringBuilder sb = new StringBuilder();
    while (Character.isDigit(peek())) {
        sb.append(consume());
    }
    return Integer.parseInt(sb.toString());
}
private char consume() {
    return input.charAt(position++);
}
private boolean consume(char c) {
    if (peek() == c) {
        position++;
        return true;
    }
    return false;
}
private char peek() {
    return position < input.length() ? input.charAt(position) : '\0';
}
}

Expert Solution
steps

Step by step

Solved in 3 steps

Blurred answer
Knowledge Booster
Random Class and its operations
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education