fork download
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.util.HashMap;
  4. import java.util.HashSet;
  5. import java.util.Map;
  6. import java.util.Set;
  7.  
  8. public class Main extends JFrame {
  9. private JTable transitionTable;
  10. private JTextArea outputArea;
  11. private JTextField initialStateField, finalStatesField, inputField;
  12. private JButton simulateButton;
  13.  
  14. private Map<String, Map<Character, String>> transitionFunction;
  15. private Set<String> finalStates;
  16. private String initialState;
  17.  
  18. public Main() {
  19. setTitle("DFA Simulator");
  20. setSize(800, 500);
  21. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  22. setLayout(new BorderLayout());
  23.  
  24. // Transition Table
  25. String[] columnNames = {"State", "Input Symbol", "Next State"};
  26. Object[][] data = {
  27. {"q1", 'a', "q2"},
  28. {"q1", 'b', "q1"},
  29. {"q2", 'a', "q2"},
  30. {"q2", 'b', "q3"},
  31. {"q3", 'a', "q1"},
  32. {"q3", 'b', "q1"}
  33. };
  34. transitionTable = new JTable(data, columnNames);
  35. add(new JScrollPane(transitionTable), BorderLayout.NORTH);
  36.  
  37. // Output Area
  38. outputArea = new JTextArea();
  39. outputArea.setEditable(false);
  40. add(new JScrollPane(outputArea), BorderLayout.CENTER);
  41.  
  42. // Input Panel
  43. JPanel inputPanel = new JPanel(new GridLayout(3, 2));
  44. inputPanel.add(new JLabel("Initial State:"));
  45. initialStateField = new JTextField("q2");
  46. inputPanel.add(initialStateField);
  47. inputPanel.add(new JLabel("Final States:"));
  48. finalStatesField = new JTextField("q1,q3");
  49. inputPanel.add(finalStatesField);
  50. inputPanel.add(new JLabel("Input:"));
  51. inputField = new JTextField("ababbb");
  52. inputPanel.add(inputField);
  53. simulateButton = new JButton("Simulate");
  54. simulateButton.addActionListener(e -> simulateDFA());
  55. inputPanel.add(simulateButton);
  56. add(inputPanel, BorderLayout.SOUTH);
  57.  
  58. // Initialize DFA
  59. initializeDFA();
  60.  
  61. setVisible(true);
  62. }
  63.  
  64. private void initializeDFA() {
  65. transitionFunction = new HashMap<>();
  66. transitionFunction.put("q1", new HashMap<>());
  67. transitionFunction.get("q1").put('a', "q2");
  68. transitionFunction.get("q1").put('b', "q1");
  69. transitionFunction.put("q2", new HashMap<>());
  70. transitionFunction.get("q2").put('a', "q2");
  71. transitionFunction.get("q2").put('b', "q3");
  72. transitionFunction.put("q3", new HashMap<>());
  73. transitionFunction.get("q3").put('a', "q1");
  74. transitionFunction.get("q3").put('b', "q1");
  75.  
  76. finalStates = new HashSet<>();
  77. finalStates.add("q1");
  78. finalStates.add("q3");
  79.  
  80. initialState = "q2";
  81. }
  82.  
  83. private void simulateDFA() {
  84. String input = inputField.getText();
  85. String currentState = initialStateField.getText();
  86. StringBuilder output = new StringBuilder();
  87.  
  88. for (char symbol : input.toCharArray()) {
  89. String nextState = transitionFunction.get(currentState).get(symbol);
  90. output.append(currentState).append("-").append(symbol).append("->").append(nextState).append(" ");
  91. currentState = nextState;
  92. }
  93.  
  94. output.append("\n").append(currentState).append(" is ");
  95. if (finalStates.contains(currentState)) {
  96. output.append("final ==> ").append(input).append(" is accepted");
  97. } else {
  98. output.append("not final ==> ").append(input).append(" is not accepted");
  99. }
  100.  
  101. outputArea.setText(output.toString());
  102. }
  103.  
  104. public static void main(String[] args) {
  105. SwingUtilities.invokeLater(() -> new Main().setVisible(true));
  106. }
  107. }
Success #stdin #stdout #stderr 0.28s 67516KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
	at java.desktop/java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:197)
	at java.desktop/java.awt.Window.<init>(Window.java:538)
	at java.desktop/java.awt.Frame.<init>(Frame.java:423)
	at java.desktop/java.awt.Frame.<init>(Frame.java:388)
	at java.desktop/javax.swing.JFrame.<init>(JFrame.java:180)
	at Main.<init>(Main.java:18)
	at Main.lambda$main$1(Main.java:105)
	at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
	at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
	at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
	at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
	at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
	at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
	at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
	at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)