package jp.ac.aiit.jointry.services.lang;
import java.net.URL;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import jp.ac.aiit.jointry.services.lang.ast.ASTree;
import jp.ac.aiit.jointry.services.lang.ast.NullStmnt;
import jp.ac.aiit.jointry.services.lang.parser.Environment;
import jp.ac.aiit.jointry.services.lang.parser.JointryParser;
import jp.ac.aiit.jointry.services.lang.parser.LangReader;
import jp.ac.aiit.jointry.services.lang.parser.Lexer;
import jp.ac.aiit.jointry.services.lang.parser.ParseException;
import jp.ac.aiit.jointry.services.lang.parser.Token;
public class JointryLangMainController implements Initializable {
@FXML
Button btn;
@FXML
TextArea ta;
@FXML
TextArea result;
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
@FXML
private void eval(ActionEvent event) {
Lexer lexer = new Lexer(new LangReader(ta.getText()));
JointryParser parser = new JointryParser();
Environment env = new Environment();
try {
while (lexer.peek(0) != Token.EOF) {
ASTree t = parser.parse(lexer);
if (!(t instanceof NullStmnt)) {
result.appendText(t.eval(env).toString());
result.appendText("\n");
}
}
} catch (ParseException ex) {
Logger.getLogger(JointryLangMainController.class.getName()).log(Level.SEVERE, null, ex);
}
}
}