Modified some aspects and added the driver.
This commit is contained in:
parent
78c8452874
commit
e9dde58fc7
@ -4,29 +4,33 @@ import edu.jt_kb.cs4308.compiler.FileManagement.FileReader;
|
|||||||
import edu.jt_kb.cs4308.compiler.models.JavaSyntaxAnalyzer;
|
import edu.jt_kb.cs4308.compiler.models.JavaSyntaxAnalyzer;
|
||||||
import edu.jt_kb.cs4308.compiler.models.Pair;
|
import edu.jt_kb.cs4308.compiler.models.Pair;
|
||||||
import edu.jt_kb.cs4308.compiler.models.TokenType;
|
import edu.jt_kb.cs4308.compiler.models.TokenType;
|
||||||
import org.xml.sax.ext.LexicalHandler;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.sql.Array;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
|
|
||||||
public class Driver {
|
public class Driver {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
System.out.println("Default Setup");
|
|
||||||
Driver program = new Driver();
|
|
||||||
program.start();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void start() {
|
|
||||||
File java = new File("src/edu/jt_kb/cs4308/compiler/resources/Java.txt");
|
File java = new File("src/edu/jt_kb/cs4308/compiler/resources/Java.txt");
|
||||||
File python = new File("src/edu/jt_kb/cs4308/compiler/resources/Python.txt");
|
File python = new File("src/edu/jt_kb/cs4308/compiler/resources/Python.txt");
|
||||||
|
Driver program = new Driver(java, python);
|
||||||
|
}
|
||||||
|
|
||||||
|
private final List<String> java;
|
||||||
|
private final List<String> python;
|
||||||
|
|
||||||
|
Driver(File java, File python) {
|
||||||
|
this.java = FileReader.readFile(java);
|
||||||
|
this.python = FileReader.readFile(python);
|
||||||
|
|
||||||
|
this.getType();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void start() {
|
||||||
List<String> code = new ArrayList<>();
|
List<String> code = new ArrayList<>();
|
||||||
JavaSyntaxAnalyzer analyzer = new JavaSyntaxAnalyzer();
|
JavaSyntaxAnalyzer analyzer = new JavaSyntaxAnalyzer();
|
||||||
code = FileReader.readFile(java);
|
|
||||||
List<Pair> analysis = analyzer.start(code);
|
List<Pair> analysis = analyzer.start(code);
|
||||||
for (Pair curr : analysis) {
|
for (Pair curr : analysis) {
|
||||||
if (curr.type != TokenType.EOF) {
|
if (curr.type != TokenType.EOF) {
|
||||||
@ -37,4 +41,108 @@ public class Driver {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void printMainMenu() {
|
||||||
|
System.out.println("-- Main Menu --");
|
||||||
|
System.out.println("1. Analyze Java Code");
|
||||||
|
System.out.println("2. Analyze Python Code");
|
||||||
|
System.out.println("3. Exit");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void printFileSelection(String type) {
|
||||||
|
System.out.println("-- Select File Type --");
|
||||||
|
System.out.println("1. Provided File: " + type + ".txt ");
|
||||||
|
System.out.println("2. Custom Input");
|
||||||
|
System.out.println("3. Back");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getType() {
|
||||||
|
int option = -1;
|
||||||
|
while (option != 3) {
|
||||||
|
printMainMenu();
|
||||||
|
option = getOptionInput();
|
||||||
|
if (option == 1) {
|
||||||
|
getSourceFile("Java");
|
||||||
|
}
|
||||||
|
if (option == 2) {
|
||||||
|
getSourceFile("Python");
|
||||||
|
} else if (0 > option || option > 3) {
|
||||||
|
System.out.println("Please enter a number between 1-3.");
|
||||||
|
System.out.println();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void getSourceFile(String type) {
|
||||||
|
int option = -1;
|
||||||
|
while (option != 3) {
|
||||||
|
printFileSelection(type);
|
||||||
|
option = getOptionInput();
|
||||||
|
|
||||||
|
if (option == 1) {
|
||||||
|
this.performAnalysis(type);
|
||||||
|
break;
|
||||||
|
} else if (option == 2) {
|
||||||
|
List<String> source = new ArrayList<>();
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
int counter = 0;
|
||||||
|
while (true) {
|
||||||
|
System.out.print("Line " + counter + ": ");
|
||||||
|
String input = sc.nextLine();
|
||||||
|
if (input.equalsIgnoreCase("EOF")) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
source.add(input);
|
||||||
|
counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.performAnalysis(type, source);
|
||||||
|
|
||||||
|
} else if (0 > option || option > 3) {
|
||||||
|
System.out.println("Please enter a number between 1-3.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performAnalysis(String type) {
|
||||||
|
List<Pair> results = new ArrayList<>();
|
||||||
|
if (type.equalsIgnoreCase("java")) {
|
||||||
|
JavaSyntaxAnalyzer analyzer = new JavaSyntaxAnalyzer();
|
||||||
|
results = analyzer.start(this.java);
|
||||||
|
} else {
|
||||||
|
// Python Analyzer Code
|
||||||
|
}
|
||||||
|
for (Pair lex : results) {
|
||||||
|
System.out.println("The next token is: " + lex.type.value + " next lexeme is: " + lex.lexeme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void performAnalysis(String type, List<String> source) {
|
||||||
|
List<Pair> results = new ArrayList<>();
|
||||||
|
if (type.equalsIgnoreCase("java")) {
|
||||||
|
JavaSyntaxAnalyzer analyzer = new JavaSyntaxAnalyzer();
|
||||||
|
results = analyzer.start(source);
|
||||||
|
} else {
|
||||||
|
// Python Analyzer Code
|
||||||
|
}
|
||||||
|
for (Pair lex : results) {
|
||||||
|
System.out.println("The next token is: " + lex.type.value + " next lexeme is: " + lex.lexeme);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private int getOptionInput() {
|
||||||
|
boolean valid = false;
|
||||||
|
int value = -1;
|
||||||
|
System.out.println();
|
||||||
|
while (!valid) {
|
||||||
|
Scanner sc = new Scanner(System.in);
|
||||||
|
System.out.print("Option: ");
|
||||||
|
String input = sc.nextLine();
|
||||||
|
try {
|
||||||
|
value = Integer.parseInt(input);
|
||||||
|
valid = true;
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Please enter a number.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
}
|
}
|
@ -85,6 +85,10 @@ public class JavaSyntaxAnalyzer {
|
|||||||
public Pair lookup(char lexeme) {
|
public Pair lookup(char lexeme) {
|
||||||
TokenType token = null;
|
TokenType token = null;
|
||||||
switch (lexeme) {
|
switch (lexeme) {
|
||||||
|
case '.':
|
||||||
|
// token = TokenType.PERIOD;
|
||||||
|
token = TokenType.UNKNOWN;
|
||||||
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
token = TokenType.ASSIGN_OP;
|
token = TokenType.ASSIGN_OP;
|
||||||
break;
|
break;
|
||||||
@ -134,6 +138,9 @@ public class JavaSyntaxAnalyzer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Pair lookup(String lexeme) {
|
private Pair lookup(String lexeme) {
|
||||||
|
if (lexeme.equals("EOF")) {
|
||||||
|
return new Pair("EOF", TokenType.EOF);
|
||||||
|
}
|
||||||
TokenType token = null;
|
TokenType token = null;
|
||||||
List<String> keywords = new ArrayList<>(Arrays.asList("public","class","static","void","int"));
|
List<String> keywords = new ArrayList<>(Arrays.asList("public","class","static","void","int"));
|
||||||
if (keywords.contains(lexeme.trim())) {
|
if (keywords.contains(lexeme.trim())) {
|
||||||
|
Reference in New Issue
Block a user