Compiler
-
Upload
amit-dubey -
Category
Documents
-
view
217 -
download
1
Transcript of Compiler
package ImiPackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
// a=-(b+c)*m
// a=-(b*10)-(c/d)+g
// a=-88*cd/d
// a=a-(b+c)*(d+e)/f
// a=z+(c*(b+(c-l)))/f
// a=-b*(c+d)
/**
*
* @author OnlyImran
*/
public class ThreeAddressCode {
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ir);
String splitted[];
String expr = "", bodmas = "()/*+-", left = "", right = "", temp = "", t = "T", operators = "", operands = "", op = "=/*+-";
int tempCount = 1, cntOpen = 0, cntClose = 0, cntOperator = 0;
ArrayList threeLeft = new ArrayList();
ArrayList threeRight = new ArrayList();
ArrayList openBrace = new ArrayList();
ArrayList closeBrace = new ArrayList();
ArrayList optimizedLeft = new ArrayList();
ArrayList optimizedRight = new ArrayList();
boolean matched = false, gotOperator = false, nestedBrace = false, innerMatched = false;
String s1 = "", s2 = "", s3 = "", subS1 = "", subS2 = "", subS3 = "", arg1 = "", arg2 = "", opr = "";
String[][] quadruple;
public ThreeAddressCode() {
System.out.println("Enter grammar in following format:\nExpr=Expr");
try {
while ((expr = br.readLine()) != null && expr.length() != 0) {
splitted = expr.split("=");
left = splitted[0];
right = splitted[1];
}
} catch (IOException ex) {
}
expr = left + " = " + right;
for (int i = 0; i < expr.length(); i++) {
for (int j = 0; j < op.length(); j++) {
if ((op.charAt(j) + "").equals(expr.charAt(i) + "")) {
operators = operators + " " + expr.charAt(i);
}
}
if (expr.charAt(i) > 95 && expr.charAt(i) < 122) {
operands = operands + " " + expr.charAt(i);
}
}
System.out.println("Operands are: " + operands);
System.out.println("Operators are: " + operators + "\n");
checkOperator();
if (cntOperator > 1) {
if ("-".equals(right.charAt(0) + "") && ("(".equals(right.charAt(1) + ""))) {
chekUnaryParanthesis();
}
if ("-".equals(right.charAt(0) + "")) { //// -b*c or -13*c
checkUnary();
}
for (int i = 0; i < right.length(); i++) {
if ("(".equals(right.charAt(i) + "")) {
openBrace.add(i);
}
if (")".equals(right.charAt(i) + "")) {
closeBrace.add(i);
}
}
// checking for nested braces
if (openBrace.size() >= 1) {
if (openBrace.size() == 1) { // Because if size is exactly 1 then else if will throw error--> openBrace.get(1);
removeBraces();
checkOperator();
} else if (openBrace.get(1) > closeBrace.get(0)) {
nestedBrace = false; // Not used anywhere, just for notification
removeBraces();
checkOperator();
} else {
nestedBrace = true; // Not used anywhere
removeNested();
checkOperator();
}
}
if (cntOperator > 1) {
while (cntOperator != 1) {
//System.out.println("cnt Operator is: " + cntOperator);
cntOperator--;
for (int i = 0; i < bodmas.length(); i++) {
for (int j = 0; j < right.length(); j++) {
if ((bodmas.charAt(i) + "").equals(right.charAt(j) + "")) {
//System.out.println("matched i=" + j);
matched = true;
// checking for inner match = 0; k--) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
//System.out.println("MATCHED INNER");
innerMatched = true;
subS1 = right.substring(k + 1, j); // 10
subS2 = right.charAt(j) + ""; // /
s1 = right.substring(0, k + 1); // b+a*
break;
} else if (k == 0) { // consider input: b*c+d
// System.out.println("Reached End start");
subS1 = right.substring(0, j); // b
subS2 = right.charAt(j) + ""; // *
s1 = ""; //
break;
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
// checking for inner match --> z=b+a*10/20*d+e
for (int k = j + 1; k < right.length(); k++) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
innerMatched = true;
subS3 = right.substring(j + 1, k); // 20
s3 = right.substring(k, right.length()); // *d+e
} else if (k == right.length() - 1) { // assume as input: b+c*d
subS3 = right.substring(j + 1, right.length()); // d
s3 = "";
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
s2 = subS1 + subS2 + subS3;
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
break;
}
}
if (matched) {
matched = false;
break;
}
}
}
checkOperator();
}
} else {
System.out.println("Please enter proper input:");
}
System.out.println("Three Left" + threeLeft);
System.out.println("Three right" + threeRight);
// Printing final output
System.out.println("Printing three address code of:" + expr);
for (int i = 0; i < threeLeft.size(); i++) {
System.out.println(threeLeft.get(i) + " = " + threeRight.get(i));
}
}
private void chekUnaryParanthesis() {
// - ( b * 1 0 ) + d
// 0 1 2 3 4 5 6 7 8
cntOpen = right.indexOf("(");
cntClose = right.indexOf(")");
s1 = right.charAt(0) + ""; // -
s2 = right.substring(cntOpen + 1, cntClose); // b*c
s3 = right.substring(cntClose + 1, right.length()); // +d
temp = t + tempCount; // T1
threeLeft.add(temp); // T1
threeRight.add(s2); // b*10
right = s1 + temp + s3; // -T1+d
// System.out.println("Right=" + right);
tempCount++;
}
void checkUnary() {
// - T 1 * d
// 0 1 2 3
for (int i = 1; i < right.length(); i++) {
for (int j = 0; j < bodmas.length(); j++) {
if (("" + right.charAt(i)).equals(bodmas.charAt(j) + "")) {
s1 = "";
s2 = right.substring(0, i); // -T1
s3 = right.substring(i, right.length()); // +d
temp = t + tempCount; // T3
threeLeft.add(temp); // T3
threeRight.add(s2); // -T1
right = temp + s3; // T3+d
// System.out.println("Right=" + right);
tempCount++;
checkOperator();
matched = true;
}
}
if (matched) {
matched = false;
break;
}
}
}
void checkOperator() {
cntOperator = 0;
for (int i = 0; i < right.length(); i++) {
for (int j = 0; j < bodmas.length(); j++) { // open ( and close ) braces are decreased to 0 coz of cntClose--
if (("" + right.charAt(i)).equals(bodmas.charAt(j) + "")) {
cntOperator++;
}
}
}
// System.out.println("Operator count=" + cntOperator);
if (cntOperator == 1 && "-".equals("" + right.charAt(0))) { // a=-b
System.out.println("Single input: ");
threeLeft.add("T1");
threeRight.add(right);
threeLeft.add(left);
threeRight.add("T1"); //threeRight.add(right);
} else if (cntOperator == 1) {
threeLeft.add(left);
threeRight.add(right);
}
}
void removeNested() {
// a + ( c * ( b + c ) ) / f
// 0 1 2 3 4 5 6 7 8 9 10 11 12
for (int i = 0; i < openBrace.size(); i++) {
cntOpen = right.lastIndexOf("("); // 5
cntClose = right.indexOf(")");// 9
s1 = right.substring(0, cntOpen); // a+(c*
s2 = right.substring(cntOpen + 1, cntClose); // b+c
s3 = right.substring(cntClose + 1, right.length()); // )/f
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
}
}
void removeBraces() {
// a + ( b + c ) * ( d + e ) / f
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
// System.out.println(openBrace.size());
for (int i = 0; i < openBrace.size(); i++) {
cntOpen = right.indexOf("("); // 2
cntClose = right.indexOf(")"); // 6
s1 = right.substring(0, cntOpen); // a+
s2 = right.substring(cntOpen + 1, cntClose); // b+c
s3 = right.substring(cntClose + 1, right.length()); // *(d+e)/f
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
}
}
public static void main(String args[]) {
ThreeAddressCode q = new ThreeAddressCode();
}
}
package ImiPackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
// a=-(b+c)*m
// a=-(b*10)-(c/d)+g
// a=-88*cd/d
// a=a-(b+c)*(d+e)/f
// a=z+(c*(b+(c-l)))/f
// a=-b*(c+d)
/**
*
* @author OnlyImran
*/
public class Quadruples {
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ir);
String splitted[];
String expr = "", bodmas = "()/*+-", left = "", right = "", temp = "", t = "T", operators = "", operands = "", op = "=/*+-";
int tempCount = 1, cntOpen = 0, cntClose = 0, cntOperator = 0;
ArrayList threeLeft = new ArrayList();
ArrayList threeRight = new ArrayList();
ArrayList openBrace = new ArrayList();
ArrayList closeBrace = new ArrayList();
ArrayList optimizedLeft = new ArrayList();
ArrayList optimizedRight = new ArrayList();
boolean matched = false, gotOperator = false, nestedBrace = false, innerMatched = false;
String s1 = "", s2 = "", s3 = "", subS1 = "", subS2 = "", subS3 = "", arg1 = "", arg2 = "", opr = "";
String[][] quadruple;
public Quadruples() {
System.out.println("Enter grammar in following format:\nExpr=Expr");
try {
while ((expr = br.readLine()) != null && expr.length() != 0) {
splitted = expr.split("=");
left = splitted[0];
right = splitted[1];
}
} catch (IOException ex) {
}
expr = left + " = " + right;
for (int i = 0; i < expr.length(); i++) {
for (int j = 0; j < op.length(); j++) {
if ((op.charAt(j) + "").equals(expr.charAt(i) + "")) {
operators = operators + " " + expr.charAt(i);
}
}
if (expr.charAt(i) > 95 && expr.charAt(i) < 122) {
operands = operands + " " + expr.charAt(i);
}
}
System.out.println("Operands are: " + operands);
System.out.println("Operators are: " + operators + "\n");
checkOperator();
if (cntOperator > 1) {
if ("-".equals(right.charAt(0) + "") && ("(".equals(right.charAt(1) + ""))) {
chekUnaryParanthesis();
}
if ("-".equals(right.charAt(0) + "")) { //// -b*c or -13*c
checkUnary();
}
for (int i = 0; i < right.length(); i++) {
if ("(".equals(right.charAt(i) + "")) {
openBrace.add(i);
}
if (")".equals(right.charAt(i) + "")) {
closeBrace.add(i);
}
}
// checking for nested braces
if (openBrace.size() >= 1) {
if (openBrace.size() == 1) { // Because if size is exactly 1 then else if will throw error--> openBrace.get(1);
removeBraces();
checkOperator();
} else if (openBrace.get(1) > closeBrace.get(0)) {
nestedBrace = false; // Not used anywhere, just for notification
removeBraces();
checkOperator();
} else {
nestedBrace = true; // Not used anywhere
removeNested();
checkOperator();
}
}
if (cntOperator > 1) {
while (cntOperator != 1) {
//System.out.println("cnt Operator is: " + cntOperator);
cntOperator--;
for (int i = 0; i < bodmas.length(); i++) {
for (int j = 0; j < right.length(); j++) {
if ((bodmas.charAt(i) + "").equals(right.charAt(j) + "")) {
//System.out.println("matched i=" + j);
matched = true;
// checking for inner match = 0; k--) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
//System.out.println("MATCHED INNER");
innerMatched = true;
subS1 = right.substring(k + 1, j); // 10
subS2 = right.charAt(j) + ""; // /
s1 = right.substring(0, k + 1); // b+a*
break;
} else if (k == 0) { // consider input: b*c+d
// System.out.println("Reached End start");
subS1 = right.substring(0, j);
subS2 = right.charAt(j) + "";
s1 = ""; //
break;
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
// checking for inner match --> z=b+a*10/20*d+e
for (int k = j + 1; k < right.length(); k++) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
innerMatched = true;
subS3 = right.substring(j + 1, k); // 20
s3 = right.substring(k, right.length()); // *d+e
} else if (k == right.length() - 1) { // assume as input: b+c*d
subS3 = right.substring(j + 1, right.length()); // 20
s3 = "";
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
s2 = subS1 + subS2 + subS3;
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
break;
}
}
if (matched) {
matched = false;
break;
}
}
}
checkOperator();
}
} else {
System.out.println("Please enter proper input:");
}
// System.out.println("Three Left" + threeLeft);
// System.out.println("Three right" + threeRight);
// Printing final output
System.out.println("Printing three address code of:" + expr);
for (int i = 0; i < threeLeft.size(); i++) {
System.out.println(threeLeft.get(i) + " = " + threeRight.get(i));
optimizedLeft.add(threeLeft.get(i));
optimizedRight.add(threeRight.get(i));
}
quadruple = new String[optimizedRight.size() + 1][5];
// filling quadruples
for (int i = 0; i < optimizedRight.size() + 1; i++) {
for (int j = 0; j < 5; j++) {
quadruple[i][j] = "";
if (i != 0 && j == 0) {
quadruple[i][j] = "(" + (i - 1) + ")";
} else if (i == 0 && j == 1) {
quadruple[i][j] = "OP";
} else if (i == 0 && j == 2) {
quadruple[i][j] = "ARG-1";
} else if (i == 0 && j == 3) {
quadruple[i][j] = "ARG-2";
} else if (i == 0 && j == 4) {
quadruple[i][j] = "RESULT";
}
}
}
for (int i = 1; i < optimizedRight.size() + 1; i++) {
String arg = optimizedRight.get(i - 1);
if ((arg.charAt(0) + "").equals("-")) {
arg = arg.substring(1, arg.length()) + arg.charAt(0);
}
String result = optimizedLeft.get(i - 1);
int x;
for (x = 0; x < arg.length(); x++) {
for (int y = 0; y < bodmas.length(); y++) {
if ((arg.charAt(x) + "").equals(bodmas.charAt(y) + "")) {
innerMatched = true;
break;
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
op = arg.charAt(x) + "";// b*10
arg1 = arg.substring(0, x);
arg2 = arg.substring(x + 1, arg.length());
//System.out.println("ARG1=" + arg1 + " OP=" + op + " ARG2=" + arg2);
for (int j = 0; j < 5; j++) {
if ((arg.charAt(arg.length() - 1) + "").equals("-")) {
quadruple[i][1] = "UMINUS";
}
if (j == 1) {
quadruple[i][j] = op;
} else if (j == 2) {
quadruple[i][j] = arg1;
} else if (j == 3) {
quadruple[i][j] = arg2;
} else if (j == 4) {
quadruple[i][j] = result;
}
}
}
// Printing Quatruple
for (int i = 0; i < optimizedRight.size() + 1; i++) {
for (int j = 0; j < 5; j++) {
System.out.print(quadruple[i][j] + "\t");
}
System.out.println("");
}
}
private void chekUnaryParanthesis() {
// - ( b * 1 0 ) + d
// 0 1 2 3 4 5 6 7 8
cntOpen = right.indexOf("(");
cntClose = right.indexOf(")");
s1 = right.charAt(0) + ""; // -
s2 = right.substring(cntOpen + 1, cntClose); // b*c
s3 = right.substring(cntClose + 1, right.length()); // +d
temp = t + tempCount; // T1
threeLeft.add(temp); // T1
threeRight.add(s2); // b*10
right = s1 + temp + s3; // -T1+d
// System.out.println("Right=" + right);
tempCount++;
}
void checkUnary() {
// - T 1 * d
// 0 1 2 3
for (int i = 1; i < right.length(); i++) {
for (int j = 0; j < bodmas.length(); j++) {
if (("" + right.charAt(i)).equals(bodmas.charAt(j) + "")) {
s1 = "";
s2 = right.substring(0, i); // -T1
s3 = right.substring(i, right.length()); // +d
temp = t + tempCount; // T3
threeLeft.add(temp); // T3
threeRight.add(s2); // -T1
right = temp + s3; // T3+d
//System.out.println("Right=" + right);
tempCount++;
checkOperator();
matched = true;
}
}
if (matched) {
matched = false;
break;
}
}
}
void checkOperator() {
cntOperator = 0;
for (int i = 0; i < right.length(); i++) {
for (int j = 0; j < bodmas.length(); j++) { // open ( and close ) braces are decreased to 0 coz of cntClose--
if (("" + right.charAt(i)).equals(bodmas.charAt(j) + "")) {
cntOperator++;
}
}
}
// System.out.println("Operator count=" + cntOperator);
if (cntOperator == 1 && "-".equals("" + right.charAt(0))) { // a=-b
System.out.println("Single input: ");
threeLeft.add("T1");
threeRight.add(right);
threeLeft.add(left);
threeRight.add("T1"); //threeRight.add(right);
} else if (cntOperator == 1) {
threeLeft.add(left);
threeRight.add(right);
}
}
void removeNested() {
// a + ( c * ( b + c ) ) / f
// 0 1 2 3 4 5 6 7 8 9 10 11 12
for (int i = 0; i < openBrace.size(); i++) {
cntOpen = right.lastIndexOf("("); // 5
cntClose = right.indexOf(")");// 9
s1 = right.substring(0, cntOpen); // a+(c*
s2 = right.substring(cntOpen + 1, cntClose); // b+c
s3 = right.substring(cntClose + 1, right.length()); // )/f
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
}
}
void removeBraces() {
// a + ( b + c ) * ( d + e ) / f
// 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
// System.out.println(openBrace.size());
for (int i = 0; i < openBrace.size(); i++) {
cntOpen = right.indexOf("("); // 2
cntClose = right.indexOf(")"); // 6
s1 = right.substring(0, cntOpen); // a+
s2 = right.substring(cntOpen + 1, cntClose); // b+c
s3 = right.substring(cntClose + 1, right.length()); // *(d+e)/f
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
}
}
public static void main(String args[]) {
Quadruples q = new Quadruples();
}
}
package ImiPackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Triple {
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ir);
String splitted[];
String expr = "", bodmas = "()/*+-", left = "", right = "", temp = "", t = "T", operators = "", operands = "", op = "=/*+-";
int tempCount = 1, cntOpen = 0, cntClose = 0, cntOperator = 0;
ArrayList threeLeft = new ArrayList();
ArrayList threeRight = new ArrayList();
ArrayList openBrace = new ArrayList();
ArrayList closeBrace = new ArrayList();
ArrayList optimizedLeft = new ArrayList();
ArrayList optimizedRight = new ArrayList();
boolean matched = false, gotOperator = false, nestedBrace = false, innerMatched = false;
String s1 = "", s2 = "", s3 = "", subS1 = "", subS2 = "", subS3 = "", arg1 = "", arg2 = "", opr = "";
String[][] triple;
public Triple() {
System.out.println("Enter grammar in following format:\nExpr=Expr");
try {
while ((expr = br.readLine()) != null && expr.length() != 0) {
splitted = expr.split("=");
left = splitted[0];
right = splitted[1];
}
} catch (IOException ex) {
}
expr = left + " = " + right;
for (int i = 0; i < expr.length(); i++) {
for (int j = 0; j < op.length(); j++) {
if ((op.charAt(j) + "").equals(expr.charAt(i) + "")) {
operators = operators + " " + expr.charAt(i);
}
}
if (expr.charAt(i) > 95 && expr.charAt(i) < 122) {
operands = operands + " " + expr.charAt(i);
}
}
System.out.println("Operands are: " + operands);
System.out.println("Operators are: " + operators + "\n");
checkOperator();
if (cntOperator > 1) {
if ("-".equals(right.charAt(0) + "") && ("(".equals(right.charAt(1) + ""))) {
chekUnaryParanthesis();
}
if ("-".equals(right.charAt(0) + "")) { //// -b*c or -13*c
checkUnary();
}
for (int i = 0; i < right.length(); i++) {
if ("(".equals(right.charAt(i) + "")) {
openBrace.add(i);
}
if (")".equals(right.charAt(i) + "")) {
closeBrace.add(i);
}
}
if (openBrace.size() >= 1) {
if (openBrace.size() == 1) { // Because if size is exactly 1 then else if will throw error--> openBrace.get(1);
removeBraces();
checkOperator();
} else if (openBrace.get(1) > closeBrace.get(0)) {
nestedBrace = false; // Not used anywhere, just for notification
removeBraces();
checkOperator();
} else {
nestedBrace = true; // Not used anywhere
removeNested();
checkOperator();
}
}
if (cntOperator > 1) {
while (cntOperator != 1) {
cntOperator--;
for (int i = 0; i < bodmas.length(); i++) {
for (int j = 0; j < right.length(); j++) {
if ((bodmas.charAt(i) + "").equals(right.charAt(j) + "")) {
//System.out.println("matched i=" + j);
matched = true;
// checking for inner match = 0; k--) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
innerMatched = true;
subS1 = right.substring(k + 1, j); // 10
subS2 = right.charAt(j) + ""; // /
s1 = right.substring(0, k + 1); // b+a*
break;
} else if (k == 0) { // consider input: b*c+d
subS1 = right.substring(0, j);
subS2 = right.charAt(j) + "";
s1 = ""; //
break;
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
// checking for inner match --> z=b+a*10/20*d+e
for (int k = j + 1; k < right.length(); k++) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
innerMatched = true;
subS3 = right.substring(j + 1, k); // 20
s3 = right.substring(k, right.length()); // *d+e
} else if (k == right.length() - 1) { // assume as input: b+c*d
subS3 = right.substring(j + 1, right.length()); // 20
s3 = "";
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
s2 = subS1 + subS2 + subS3;
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
break;
}
}
if (matched) {
matched = false;
break;
}
}
}
checkOperator();
}
} else {
System.out.println("Please enter proper input:");
}
// Printing final output
System.out.println("Printing three address code of:" + expr);
for (int i = 0; i < threeLeft.size(); i++) {
System.out.println(threeLeft.get(i) + " = " + threeRight.get(i));
optimizedLeft.add(threeLeft.get(i));
optimizedRight.add(threeRight.get(i));
}
triple = new String[optimizedRight.size() + 1][5];
// filling triples
for (int i = 0; i < optimizedRight.size() + 1; i++) {
for (int j = 0; j < 5; j++) {
triple[i][j] = "-";
if (i != 0 && j == 0) {
triple[i][j] = "(" + (i - 1) + ")";
} else if (i == 0 && j == 1) {
triple[i][j] = "OP";
} else if (i == 0 && j == 2) {
triple[i][j] = "ARG-1";
} else if (i == 0 && j == 3) {
triple[i][j] = "ARG-2";
} else if (i == 0 && j == 4) {
triple[i][j] = "RESULT";
}
}
}
for (int i = 1; i < optimizedRight.size() + 1; i++) {
String arg = optimizedRight.get(i - 1);
if ((arg.charAt(0) + "").equals("-")) {
arg = arg.substring(1, arg.length()) + arg.charAt(0);
}
String result = optimizedLeft.get(i - 1);
int x;
for (x = 0; x < arg.length(); x++) {
for (int y = 0; y < bodmas.length(); y++) {
if ((arg.charAt(x) + "").equals(bodmas.charAt(y) + "")) {
innerMatched = true;
break;
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
op = arg.charAt(x) + "";
arg1 = arg.substring(0, x);
arg2 = arg.substring(x + 1, arg.length());
//System.out.println("ARG1=" + arg1 + " OP=" + op + " ARG2=" + arg2);
for (int j = 0; j < 5; j++) {
if ((arg.charAt(arg.length() - 1) + "").equals("-")) {
triple[i][1] = "UMINUS";
}
if (j == 1) {
triple[i][j] = op;
} else if (j == 2) {
triple[i][j] = arg1;
for(int k=1;k 1) {
if ("-".equals(right.charAt(0) + "") && ("(".equals(right.charAt(1) + ""))) {
chekUnaryParanthesis();
}
if ("-".equals(right.charAt(0) + "")) { //// -b*c or -13*c
checkUnary();
}
for (int i = 0; i < right.length(); i++) {
if ("(".equals(right.charAt(i) + "")) {
openBrace.add(i);
}
if (")".equals(right.charAt(i) + "")) {
closeBrace.add(i);
}
}
// checking for nested braces
if (openBrace.size() >= 1) {
if (openBrace.size() == 1) { // Because if size is exactly 1 then else if will throw error--> openBrace.get(1);
removeBraces();
checkOperator();
} else if (openBrace.get(1) > closeBrace.get(0)) {
nestedBrace = false; // Not used anywhere, just for notification
removeBraces();
checkOperator();
} else {
nestedBrace = true; // Not used anywhere
removeNested();
checkOperator();
}
}
if (cntOperator > 1) {
while (cntOperator != 1) {
//System.out.println("cnt Operator is: " + cntOperator);
cntOperator--;
for (int i = 0; i < bodmas.length(); i++) {
for (int j = 0; j < right.length(); j++) {
if ((bodmas.charAt(i) + "").equals(right.charAt(j) + "")) {
//System.out.println("matched i=" + j);
matched = true;
// checking for inner match = 0; k--) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
//System.out.println("MATCHED INNER");
innerMatched = true;
subS1 = right.substring(k + 1, j); // 10
subS2 = right.charAt(j) + ""; // /
s1 = right.substring(0, k + 1); // b+a*
break;
} else if (k == 0) { // consider input: b*c+d
// System.out.println("Reached End start");
subS1 = right.substring(0, j);
subS2 = right.charAt(j) + "";
s1 = ""; //
break;
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
// checking for inner match --> z=b+a*10/20*d+e
for (int k = j + 1; k < right.length(); k++) {
for (int l = 0; l < bodmas.length(); l++) {
if ((right.charAt(k) + "").equals(bodmas.charAt(l) + "")) {
innerMatched = true;
subS3 = right.substring(j + 1, k); // 20
s3 = right.substring(k, right.length()); // *d+e
} else if (k == right.length() - 1) { // assume as input: b+c*d
subS3 = right.substring(j + 1, right.length()); // 20
s3 = "";
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
s2 = subS1 + subS2 + subS3;
temp = t + tempCount;
threeLeft.add(temp);
threeRight.add(s2);
right = s1 + temp + s3;
// System.out.println("Right=" + right);
tempCount++;
break;
}
}
if (matched) {
matched = false;
break;
}
}
}
checkOperator();
}
} else {
System.out.println("Please enter proper input:");
}
// Printing final output
System.out.println("Printing three address code of:" + expr);
for (int i = 0; i < threeLeft.size(); i++) {
System.out.println(threeLeft.get(i) + " = " + threeRight.get(i));
optimizedLeft.add(threeLeft.get(i));
optimizedRight.add(threeRight.get(i));
}
indirectTriple = new String[optimizedRight.size() + 1][5];
// filling indirectTriples
for (int i = 0; i < optimizedRight.size() + 1; i++) {
for (int j = 0; j < 5; j++) {
indirectTriple[i][j] = "-";
if (i != 0 && j == 0) {
indirectTriple[i][j] = "(" + (i +13) + ")";
} else if (i == 0 && j == 1) {
indirectTriple[i][j] = "OP";
} else if (i == 0 && j == 2) {
indirectTriple[i][j] = "ARG-1";
} else if (i == 0 && j == 3) {
indirectTriple[i][j] = "ARG-2";
} else if (i == 0 && j == 4) {
indirectTriple[i][j] = "RESULT";
}
}
}
for (int i = 1; i < optimizedRight.size() + 1; i++) {
String arg = optimizedRight.get(i - 1);
if ((arg.charAt(0) + "").equals("-")) {
arg = arg.substring(1, arg.length()) + arg.charAt(0);
}
String result = optimizedLeft.get(i - 1);
int x;
for (x = 0; x < arg.length(); x++) {
for (int y = 0; y < bodmas.length(); y++) {
if ((arg.charAt(x) + "").equals(bodmas.charAt(y) + "")) {
innerMatched = true;
break;
}
}
if (innerMatched) {
innerMatched = false;
break;
}
}
op = arg.charAt(x) + "";
arg1 = arg.substring(0, x);
arg2 = arg.substring(x + 1, arg.length());
//System.out.println("ARG1=" + arg1 + " OP=" + op + " ARG2=" + arg2);
for (int j = 0; j < 5; j++) {
if ((arg.charAt(arg.length() - 1) + "").equals("-")) {
indirectTriple[i][1] = "UMINUS";
}
if (j == 1) {
indirectTriple[i][j] = op;
} else if (j == 2) {
indirectTriple[i][j] = arg1;
for(int k=1;k= 0; i--) {
postFix = postFix + stack.get(i);
//stack.clear();
System.out.println(postFix + "\t\t" + stack);
}
}
System.out.println("Post Fix is: " + postFix);
}
public static void main(String[] args) {
InfixToPostfix p = new InfixToPostfix();
}
}
package ImiPackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
// abc-+de-fg-h+/*
// abc+*d/
/**
*
* @author Imran
*/
public class PostfixToInfix {
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ir);
String infix = "",expr="",op="/*+-";
ArrayList stack = new ArrayList();
public PostfixToInfix() {
System.out.println("Enter grammar :");
try {
expr = br.readLine();
} catch (IOException ex) {
Logger.getLogger(ThreeAddressCode.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Expr " + expr);
for (int i = 0; i < expr.length(); i++) {
String ch = expr.charAt(i) + "";
if ((expr.charAt(i) >= 97 && expr.charAt(i) 1){
secondLastElement = "("+secondLastElement+")";
}
if(getCharCount(lastElement)>1){
lastElement = "("+lastElement+")";
}
}
String newElement = secondLastElement+ch+lastElement;
stack.add(newElement);
System.out.println(stack);
}
}
System.out.println("Converted Infix is: "+stack.get(0));
}
private int getCharCount(String str){
int count=str.length();
return count;
}
public static void main(String args[]){
PostfixToInfix pti = new PostfixToInfix();
}
}
package ImiPackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
// 13+5* ans=20
// 246+*5/ ans=4
/**
*
* @author Imran
*/
public class EvaluationOfPostfix {
InputStreamReader ir = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(ir);
String postFix = "",expr="";
ArrayList stack = new ArrayList();
public EvaluationOfPostfix() {
System.out.println("Enter grammar :");
try {
expr = br.readLine();
} catch (IOException ex) {
Logger.getLogger(ThreeAddressCode.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("Expr " + expr);
for (int i = 0; i < expr.length(); i++) {
String ch = expr.charAt(i) + "";
if ((expr.charAt(i) >= 97 && expr.charAt(i) = 48 && expr.charAt(i)