Database System Concepts
Database System Concepts
7th Edition
ISBN: 9780078022159
Author: Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher: McGraw-Hill Education
Bartleby Related Questions Icon

Related questions

Question

I need help with my Java compiler Generating the final machine code, such as x86 assembly language, that can be executed
on a computer.

import java.util.*;

public class SimpleCalculator {

private final String input;
private int position;
private boolean hasDivByZero = false;
private Map<String, String> symbolTable;
private List<String> instructions;

public SimpleCalculator(String input) {
this.input = input;
this.position = 0;
this.symbolTable = new HashMap<>();
this.instructions = new ArrayList<>();
}

public static void main(String[] args) {
SimpleCalculator calculator = new SimpleCalculator("3 + 5 * (2 - 1)");
calculator.parseExpression();
if (calculator.hasDivByZero) {
System.out.println("Error: division by zero");
} else {
System.out.println("Result: " + calculator.instructions);
}
}

public void parseExpression() {
parseTerm('+');
}

public String parseTerm(char op) {
String t1 = parseFactor();

while (peek() == op || peek() == '/') {
char operator = consume();
String t2 = parseFactor();

if (operator == '/' && t2.equals("0")) {
hasDivByZero = true;
break;
}

String result = newTemp();
emit(result + " = " + t1 + " " + operator + " " + t2);
t1 = result;
}

return t1;
}

public String parseFactor() {
if (consume('(')) {
String result = parseExpression();
consume(')');
return result;
}

StringBuilder sb = new StringBuilder();
while (Character.isDigit(peek())) {
sb.append(consume());
}

String variable = sb.toString();

Optional.ofNullable(symbolTable.get(variable))
.filter(type -> type.equals("int"))
.orElseThrow(() -> new IllegalArgumentException("Error: " + variable + " is not defined or not an integer"));

return variable;
}

private String newTemp() {
String temp = "t" + (instructions.size() + 1);
symbolTable.put(temp, "int");
return temp;
}

private void emit(String instruction) {
instructions.add(instruction);
}

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
Check Mark
Knowledge Booster
Background pattern image
Computer Science
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
Recommended textbooks for you
Text book image
Database System Concepts
Computer Science
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:McGraw-Hill Education
Text book image
Starting Out with Python (4th Edition)
Computer Science
ISBN:9780134444321
Author:Tony Gaddis
Publisher:PEARSON
Text book image
Digital Fundamentals (11th Edition)
Computer Science
ISBN:9780132737968
Author:Thomas L. Floyd
Publisher:PEARSON
Text book image
C How to Program (8th Edition)
Computer Science
ISBN:9780133976892
Author:Paul J. Deitel, Harvey Deitel
Publisher:PEARSON
Text book image
Database Systems: Design, Implementation, & Manag...
Computer Science
ISBN:9781337627900
Author:Carlos Coronel, Steven Morris
Publisher:Cengage Learning
Text book image
Programmable Logic Controllers
Computer Science
ISBN:9780073373843
Author:Frank D. Petruzella
Publisher:McGraw-Hill Education