package G4ip;+ −
+ −
import java.applet.*;+ −
import java.awt.*;+ −
import G4ip.Sequent.*;+ −
import G4ip.Prover.*;+ −
import G4ip.Parser.*;+ −
+ −
/** The applet for the prover.+ −
* @author Christian Urban+ −
*/+ −
public class ProverApplet extends Applet {+ −
Prover prover;+ −
Parser parser;+ −
+ −
Button start; + −
Button clear; + −
Button next; + −
Button stop; + −
TextField lhs_text; // place for the program formulae+ −
TextField rhs_text; // place for the goal formula+ −
/** A field for various messages (e.g. error messages).+ −
*/+ −
public Label messages; // to be verbose + −
+ −
public void init() {+ −
setLayout(new BorderLayout());+ −
// NORTH+ −
Panel textfields = new Panel();+ −
add("North", textfields);+ −
// the parameters LHS_size and RHS_size are given in the html-file+ −
int LHS_size = Integer.parseInt(this.getParameter("LHS_size"));+ −
int RHS_size = Integer.parseInt(this.getParameter("RHS_size"));+ −
lhs_text = new TextField(LHS_size); // program textfield+ −
rhs_text = new TextField(RHS_size); // goal textfield+ −
Label separation = new Label("=>"); // for separation+ −
+ −
if (LHS_size > 0) { // if someone prefears only single side sequents + −
textfields.add(lhs_text); } + −
textfields.add(separation);+ −
textfields.add(rhs_text);+ −
+ −
// CENTER+ −
Panel buttonfield = new Panel();+ −
add("Center", buttonfield);+ −
start = new Button("Start"); + −
clear = new Button("Clear"); + −
next = new Button("Next"); + −
stop = new Button("Stop"); + −
+ −
switch_into_input_mode(); // start in input mode+ −
buttonfield.add(start);+ −
buttonfield.add(clear);+ −
buttonfield.add(next);+ −
buttonfield.add(stop);+ −
+ −
// SOUTH+ −
messages = new Label(""); // for any kind of message+ −
messages.setAlignment(Label.CENTER);+ −
add("South",messages);+ −
}+ −
+ −
/** When start is pressed; + −
* start and clear button are disabled;+ −
* next and stop button are enabled. + −
*/+ −
public void switch_into_prove_mode() { + −
start.disable(); next.enable();+ −
clear.disable(); stop.enable();+ −
repaint();+ −
}+ −
+ −
/** When start is pressed + −
* and (hopefully) when prover finishes. + −
*/ + −
public void switch_into_input_mode() { + −
start.enable(); next.disable(); + −
clear.enable(); stop.disable();+ −
repaint();+ −
}+ −
+ −
/** Initiates the parse and prove process. + −
*/ + −
void initiate_proving() {+ −
Sequent sequ;+ −
messages.setText(""); + −
messages.repaint();+ −
repaint(); + −
Parser rhs_parser = new Parser(rhs_text.getText());+ −
Parser lhs_parser = new Parser(lhs_text.getText());+ −
try { // try to parse the input + −
sequ = new Sequent(lhs_parser.parseFormulae(),+ −
rhs_parser.parseFormula());+ −
}+ −
catch (Exception exc) { // there was a parser exception + −
messages.setText(exc.getMessage()); + −
messages.repaint();+ −
repaint(); + −
return; // in case there was an exception+ −
} // don't run the following code+ −
System.out.println(sequ.G.internalString()); + −
switch_into_prove_mode();+ −
prover = new Prover(sequ,this);+ −
prover.start();+ −
}+ −
+ −
/** Forces the prover to dispose all open frames.+ −
*/+ −
public void destroy() { + −
if (prover != null && prover.isAlive()) { + −
prover.stop(); + −
prover.finalize();+ −
}+ −
}+ −
+ −
+ −
/** The actions for the buttons:+ −
* this bit of code would be different in Java 1.1+ −
*/+ −
public boolean action(Event e, Object arg) {+ −
// clear button has been pressed+ −
if (e.target == clear) {+ −
messages.setText(""); + −
lhs_text.setText("");+ −
rhs_text.setText(""); + −
messages.repaint();+ −
repaint(); + −
}+ −
// start button has been pressed+ −
if (e.target == start) {+ −
initiate_proving();+ −
return true; + −
}+ −
// stop button has been pressed+ −
if (e.target == stop) {+ −
switch_into_input_mode();+ −
if (prover != null && prover.isAlive()) { prover.stop(); }+ −
return true; + −
}+ −
// next button has been pressed+ −
if (e.target == next) {+ −
if (prover != null && prover.isAlive()) { prover.resume();} + −
return true; + −
}+ −
return false;+ −
}+ −
+ −
}+ −
+ −
+ −