Моделирование синтаксического анализа выражений с использованием JTable стека постфиксных и префиксных обозначений и стека операторов
Реализация графического интерфейса Java Swing
Всем привет! Мне нужна помощь с логикой здесь, я все еще не знаком со стеком, и нам сказали создать программу на Java, которая будет выводить постфиксную и префиксную нотацию инфикса с отсканированным символом, постфиксным / префиксным стеком и оператором. Куча.
Проблема: Кажется, я не могу понять логику того, как я могу распечатать Postfix и Prefix Stack и Operator Stack, как показано ниже в «JTable»:
Визуализируйте это как вертикальный столбец, разделенный на,
- Отсканированный символ = (, A, +, B,), -, C, (как показано на рисунке JTable)
- Постфиксный / префиксный стек = __, AB, AB+, ABC, ABC-,
- Стек операторов =),),)+,)+,)+),)+)-,)+, __,
Вот часть кода, которую я использовал для «кнопки ввода»:
private void EnterButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// ENTER BUTTON FUNCTION
String expression;
expression = InfixInput1.getText();
System.out.println("POSTFIX CONVERSION : "+infixToPostfix(expression));
DisplayInput1.setText(expression);
PostfixOutput.setText(infixToPostfix(expression));
PostfixTable.getColumnModel().getColumn(0).setPreferredWidth(5);
PostfixTable.getColumnModel().getColumn(1).setPreferredWidth(5);
PostfixTable.getColumnModel().getColumn(2).setPreferredWidth(5);
String header[] = {"Scanned Symbol","Postfix Stack", "Operator Stack"};
PostfixTable.setAutoCreateColumnsFromModel(true);
try {
for(int i=0;i<PostfixTable.getColumnCount();i++) {
TableColumn column1 = PostfixTable.getTableHeader().getColumnModel().getColumn(0);
column1.setHeaderValue(header[0]);
TableColumn column2 = PostfixTable.getTableHeader().getColumnModel().getColumn(1);
column2.setHeaderValue(header[1]);
TableColumn column3 = PostfixTable.getTableHeader().getColumnModel().getColumn(2);
column3.setHeaderValue(header[2]);
}
} catch (HeadlessException ex) {
Logger.getLogger(DataStructureGUI.class.getName()).log(Level.SEVERE, null, ex);
}
for(int i = 0; i <= expression.length()-1; i++){
char a = expression.charAt(i);
DefaultTableModel model = (DefaultTableModel) PostfixTable.getModel();
model.addRow(new Object[]{a});
}
}
Последний «цикл for» печатает и отображает отсканированные символы по «символу и строке в JTable»:
for(int i = 0; i <= expression.length()-1; i++){
char a = expression.charAt(i);
DefaultTableModel model = (DefaultTableModel) PostfixTable.getModel();
model.addRow(new Object[]{a});
}
Я ценю это, ребята. Спасибо!