This is a Java Program to Implement Shunting Yard Algorithm. Shunting Yard algorithm is used for converting an infix expression into a postfix expression.
Here is the source code of the Java Program to Implement Shunting Yard Algorithm. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
/** ** Java Program to Implement Shunting Yard Algorithm **/ import java.util.Scanner; /** Class ShuntingYard **/ public class ShuntingYard { /** enum **/ private enum Precedence { lparen(0), rparen(1), plus(2), minus(3), divide(4), times(5), mod(6), eos(7), operand(8); private int index; Precedence(int index) { this.index = index; } public int getIndex() { return index; } } /** in stack precedence **/ private static final int[] isp = {0, 19, 12, 12, 13, 13, 13, 0}; /** incoming character precedence **/ private static final int[] icp = {20, 19, 12, 12, 13, 13, 13, 0}; /** operators **/ private static final char[] operators = {'{', '}', '+', '-', '/', '*', '%', ' '}; /** precedence stack **/ private Precedence[] stack; /** stack top pointer **/ private int top; /** pop element from stack **/ private Precedence pop() { return stack[top--]; } /** push element onto stack **/ private void push(Precedence ele) { stack[++top] = ele; } /** get precedence token for symbol **/ public Precedence getToken(char symbol) { switch (symbol) { case '(' : return Precedence.lparen; case ')' : return Precedence.rparen; case '+' : return Precedence.plus; case '-' : return Precedence.minus; case '/' : return Precedence.divide; case '*' : return Precedence.times; case '%' : return Precedence.mod; case ' ' : return Precedence.eos; default : return Precedence.operand; } } /** Function to convert infix to postfix **/ public String postfix(String infix) { String postfix = ""; top = 0; stack = new Precedence[infix.length()]; stack[0] = Precedence.eos; Precedence token; for (int i = 0; i < infix.length(); i++) { token = getToken(infix.charAt(i)); /** if token is operand append to postfix **/ if (token == Precedence.operand) postfix = postfix + infix.charAt(i); /** if token is right parenthesis pop till matching left parenthesis **/ else if (token == Precedence.rparen) { while (stack[top] != Precedence.lparen) postfix = postfix + operators[pop().getIndex()]; /** discard left parenthesis **/ pop(); } /** else pop stack elements whose precedence is greater than that of token **/ else { while (isp[stack[top].getIndex()] >= icp[token.getIndex()]) postfix = postfix + operators[pop().getIndex()]; push(token); } } /** pop any remaining elements in stack **/ while ((token = pop()) != Precedence.eos) postfix = postfix + operators[token.getIndex()]; return postfix; } /** Main function **/ public static void main (String[] args) { Scanner scan = new Scanner(System.in); System.out.println("Shunting Yard Algorithm Test\n"); /** Make an object of ShuntingYard class **/ ShuntingYard sy = new ShuntingYard(); /** Accept infix expression **/ System.out.println("Enter infix expression"); String infix = scan.next(); String postfix = sy.postfix(infix); System.out.println("\nPostfix expression : "+ postfix); } }
Output:
Shunting Yard Algorithm Test Enter infix expression 1+2*3/4-5%6*7/8+9-1 Postfix expression : 123*4/+56%7*8/-9+1-
Related posts:
Java Program to implement Circular Buffer
Binary Numbers in Java
Guide to Spring @Autowired
Java 8 Stream API Analogies in Kotlin
Why String is Immutable in Java?
Initialize a HashMap in Java
Java Program to Implement Slicker Algorithm that avoids Triangulation to Find Area of a Polygon
Working with Network Interfaces in Java
Java Program to Implement Ternary Search Tree
Retrieve User Information in Spring Security
Number Formatting in Java
Convert Time to Milliseconds in Java
Handling URL Encoded Form Data in Spring REST
Testing an OAuth Secured API with Spring MVC
Giới thiệu Google Guice – Binding
Phương thức tham chiếu trong Java 8 – Method References
Sao chép các phần tử của một mảng sang mảng khác như thế nào?
Using Optional with Jackson
How to Read HTTP Headers in Spring REST Controllers
Predicate trong Java 8
Java Program to Check Whether Graph is DAG
So sánh Array và ArrayList trong Java
Phân biệt JVM, JRE, JDK
Java Program to Implement ConcurrentLinkedQueue API
Guide to the Fork/Join Framework in Java
Java Program to Solve a Matching Problem for a Given Specific Case
Guide to Java 8 groupingBy Collector
A Quick JUnit vs TestNG Comparison
Java Collections Interview Questions
Java Program to Generate a Graph for a Given Fixed Degree Sequence
Convert XML to JSON Using Jackson
Java Program to Check Whether an Undirected Graph Contains a Eulerian Path