Advertisement
Guest User

Untitled

a guest
Apr 28th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.96 KB | None | 0 0
  1. package demo;
  2.  
  3. import java.util.Arrays;
  4. import java.util.HashSet;
  5. import java.util.List;
  6. import java.util.Scanner;
  7. import java.util.Set;
  8.  
  9. import hr.fer.zemris.bf.parser.Parser;
  10. import hr.fer.zemris.bf.qmc.Minimizer;
  11. import hr.fer.zemris.bf.utils.Util;
  12.  
  13. /**
  14. * Class <code>QMC</code> is used as demonstration program for implementation of
  15. * Quine-McCluskey minimizator with Pyne-McCluskey approach.
  16. *
  17. * @author Matteo Miloš
  18. *
  19. */
  20. public class QMC {
  21. /**
  22. * Entry point to a program.
  23. *
  24. * @param args
  25. * command line arguments are not uses in this program
  26. */
  27. public static void main(String[] args) {
  28. Scanner sc = new Scanner(System.in);
  29. System.out.print(">");
  30.  
  31. while (sc.hasNextLine()) {
  32. String line = sc.nextLine();
  33.  
  34. if (line.equals("quit")) {
  35. System.exit(0);
  36. }
  37.  
  38. if (!line.contains("=")) {
  39. System.out.println("Error: function is in invalid form.");
  40. continue;
  41. }
  42.  
  43. try {
  44. String[] split = line.split("=", 2);
  45. String leftSide = split[0].substring(split[0].indexOf('(') + 1, split[0].indexOf(')')).trim();
  46. List<String> variables = Arrays.asList(leftSide.split("\\s*,\\s*"));
  47. Set<Integer> minterms = new HashSet<>();
  48. Set<Integer> dontCares = new HashSet<>();
  49.  
  50. String rightSide = split[1].trim();
  51.  
  52. if (rightSide.split("\\s*\\|\\s*").length > 1) {
  53. minterms = loadMintermsOrDontCares(rightSide.split("\\s*\\|\\s*")[0], variables);
  54. dontCares = loadMintermsOrDontCares(rightSide.split("\\s*\\|\\s*")[1], variables);
  55.  
  56. } else {
  57. minterms = loadMintermsOrDontCares(rightSide, variables);
  58. }
  59.  
  60. Minimizer m = new Minimizer(minterms, dontCares, variables);
  61.  
  62. int i = 1;
  63. List<String> minimalForms = m.getMinimalFormsAsString();
  64.  
  65. for (String str : minimalForms) {
  66. System.out.println(i++ + ". " + str);
  67. }
  68. System.out.print(">");
  69.  
  70. } catch (Exception exc) {
  71. System.out.println(exc.getMessage());
  72. System.out.print(">");
  73.  
  74. }
  75. }
  76. sc.close();
  77. }
  78.  
  79. /**
  80. * Method used for loading minterms or dontcares from passed string.
  81. *
  82. * @param rightSide
  83. * string which represents minterms or dontcares
  84. * @param variables
  85. * list of function variables
  86. * @return set of minterms/dont cares.
  87. */
  88. private static Set<Integer> loadMintermsOrDontCares(String rightSide, List<String> variables) {
  89. Set<Integer> mintOrDonts = new HashSet<>();
  90.  
  91. if (rightSide.trim().charAt(0) == '[') {
  92.  
  93. if (rightSide.split(",").length > 1) {
  94. String[] mint = rightSide.trim().substring(1, rightSide.length() - 1).split("\\s*,\\s*");
  95.  
  96. for (String integer : mint) {
  97. mintOrDonts.add(new Integer(integer));
  98. }
  99.  
  100. } else {
  101. mintOrDonts.add(new Integer(rightSide.trim().substring(1, rightSide.length() - 1)));
  102. }
  103.  
  104. } else {
  105. Parser parser = new Parser(rightSide.trim());
  106. mintOrDonts = Util.toSumOfMinterms(variables, parser.getExpression());
  107. }
  108.  
  109. return mintOrDonts;
  110. }
  111.  
  112. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement