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(); } }

Microsoft Visual C#
7th Edition
ISBN:9781337102100
Author:Joyce, Farrell.
Publisher:Joyce, Farrell.
Chapter9: Using Classes And Objects
Section: Chapter Questions
Problem 19RQ
icon
Related questions
Question

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();
    }


}

 

Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 4 steps

Blurred answer
Knowledge Booster
Developing computer interface
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
Microsoft Visual C#
Microsoft Visual C#
Computer Science
ISBN:
9781337102100
Author:
Joyce, Farrell.
Publisher:
Cengage Learning,