Java Code: Create a Parser class. Much like the Lexer, it has a constructor that accepts a LinkedList of Token and creates a TokenManager that is a private member. The next thing that we will build is a helper method – boolean AcceptSeperators(). One thing that is always tricky in parsing languages is that people can put empty lines anywhere they want in their code. Since the parser expects specific tokens in specific places, it happens frequently that we want to say, “there HAS to be a “;” or a new line, but there can be more than one”. That’s what this function does – it accepts any number of separators (newline or semi-colon) and returns true if it finds at least one. Create a Parse method that returns a ProgramNode. While there are more tokens in the TokenManager, it should loop calling two other methods – ParseFunction() and ParseAction(). If neither one is true, it should throw an exception. bool ParseFunction(ProgramNode) bool ParseAction(ProgramNode) -Creates ProgramNode, loops over Parse calls correctly, throws exception if unknown item found -(ParseFunction) Uses MatchAndRemove(), handles any number of parameters, fills in ASTNode correctly -(ParseAction) Uses MatchAndRemove(), handles any number of parameters, fills in ASTNode correctly Below is main.java and main.java needs to call the parser. Make sure to give the correct code for parser.java with the screenshots of the output. There must be test cases involved, so make sure to have test cases as well. main.java import java.util.*; public class Main{ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Input: "); String input = scanner.nextLine(); Lexer lexer = new Lexer(input); List tokens = lexer.lex(); System.out.print("Output: "); for (int i = 0; i < tokens.size(); i++) { Token token = tokens.get(i); if (token.getType() != Token.TokenType.ENDOFFILE) { System.out.print(token); if (i < tokens.size() - 1 && tokens.get(i + 1).getType() != Token.TokenType.ENDOFFILE) { System.out.print(" "); } } } scanner.close(); } }
Java Code:
Create a Parser class. Much like the Lexer, it has a constructor that accepts a LinkedList of Token and creates a TokenManager that is a private member.
The next thing that we will build is a helper method – boolean AcceptSeperators(). One thing that is always tricky in parsing languages is that people can put empty lines anywhere they want in their code. Since the parser expects specific tokens in specific places, it happens frequently that we want to say, “there HAS to be a “;” or a new line, but there can be more than one”. That’s what this function does – it accepts any number of separators (newline or semi-colon) and returns true if it finds at least one.
Create a Parse method that returns a ProgramNode. While there are more tokens in the TokenManager, it should loop calling two other methods – ParseFunction() and ParseAction(). If neither one is true, it should throw an exception.
bool ParseFunction(ProgramNode)
bool ParseAction(ProgramNode)
-Creates ProgramNode, loops over Parse calls correctly, throws exception if unknown item found
-(ParseFunction) Uses MatchAndRemove(), handles any number of parameters, fills in ASTNode correctly
-(ParseAction) Uses MatchAndRemove(), handles any number of parameters, fills in ASTNode correctly
Below is main.java and main.java needs to call the parser. Make sure to give the correct code for parser.java with the screenshots of the output. There must be test cases involved, so make sure to have test cases as well.
main.java
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Input: ");
String input = scanner.nextLine();
Lexer lexer = new Lexer(input);
List<Token> tokens = lexer.lex();
System.out.print("Output: ");
for (int i = 0; i < tokens.size(); i++) {
Token token = tokens.get(i);
if (token.getType() != Token.TokenType.ENDOFFILE) {
System.out.print(token);
if (i < tokens.size() - 1 && tokens.get(i + 1).getType() != Token.TokenType.ENDOFFILE) {
System.out.print(" ");
}
}
}
scanner.close();
}
}

Trending now
This is a popular solution!
Step by step
Solved in 4 steps









