Hilfe Parser/Scanner

mashine-obf

Mitglied
hey

studiere im 3 sem mathe
wir programmieren grad mit eclipse
und haben folgende aufgabe bekommen
http://www.tfh-berlin.de/~pries/Vorlesungen/DVG3/Uebungsaufgabe1.pdf

habe den scanner und frame erfolgreich geschrieben hoffe ich zummindest

meine frage kann mir jemand bei der verknüpfung und ausgabe der operators helfen?

vielen dank im vorraus
mfg marco

MainFrame.java :

/*
* Created on ...
*
* Interpreter Übung1
*/
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
* @author mashine
*
* Interpreter Übung 1
*/
public class MainFrame extends JFrame implements ActionListener {
private Container _contentPane = null;
private JLabel _lblText1 = null;
//private JLabel _lblPlus = null;
//private JLabel _lblZahl2 = null;
private JTextField _txtAusdruck = null;
private JLabel _lblErgebnis = null;
private JButton _btnCheck = null;
private JButton _btnInit = null;
private JButton _btnClose = null;
private int _i1 = 0;
private int _i2 = 0;
public MainFrame() {
super("Interpreter");
_contentPane = getContentPane();
_contentPane.setLayout(null);
_lblText1 = new JLabel("Geben Sie den Ausdruck ein :");
_lblText1.setBounds(20, 30, 400, 20);
_contentPane.add(_lblText1);
/* _lblPlus = new JLabel("Ergebnis:");
_lblPlus.setBounds(160, 100, 20, 20);
_contentPane.add(_lblPlus);
_lblZahl2 = new JLabel();
_lblZahl2.setBounds(90, 30, 80, 20);
_contentPane.add(_lblZahl2);
*/
_txtAusdruck = new JTextField();
_txtAusdruck.setBounds(210, 20, 300, 30);
_contentPane.add(_txtAusdruck);
_lblErgebnis = new JLabel("Ergebnis :");
_lblErgebnis.setBounds(136, 60, 100, 20);
_contentPane.add(_lblErgebnis);
/* _btnCheck = new JButton("Prüfen");
_btnCheck.setBounds(20, 100, 120, 30);
_btnCheck.addActionListener(this);
_contentPane.add(_btnCheck);
*/
_btnInit = new JButton("Interpretieren");
_btnInit.setBounds(20, 140, 120, 30);
_btnInit.addActionListener(this);
_contentPane.add(_btnInit);
_btnClose = new JButton("Schließen");
_btnClose.setBounds(450, 140, 120, 30);
_btnClose.addActionListener(this);
_contentPane.add(_btnClose);
setSize(600, 240);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

// einzige Methode im Interface ActionListener
public void actionPerformed(ActionEvent e) {
// Ergänzen Sie hier den Code für die Aktionsabarbeitung
String cmd = e.getActionCommand();
if (cmd.equals("Schließen")) {
dispose();
System.exit(0);
} else if (cmd.equals("Interpretieren")) {
ArithmInterpreter interp = new ArithmInterpreter(_txtAusdruck.getText());
//Ergebnis im Fenster ausgeben
}



}
public static void main(String[] args) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
System.out.println(e);
}
new MainFrame();
}
}







ArithmInterpreter.java



/*
* Created on ...
*
* Ein kleines Demo-Programm - Kopfrechnen
*/
package gui;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
/**
* @author mashine
*
* interpreter
*/
public class ArithmInterpreter {
private String strText = null;
private boolean bOK = true;
private double dErgebnis = 0;
private String strSyntax = null;
private StringTokenizer tokenlist = null;
private String strToken = null;
private boolean bFinish = false;
public ArithmInterpreter(String strArithmExpression)
{
//tokenlist erzeugen
//evtl ersten Token holen
//parseExpression
//ergebnis setzen
}

public boolean getOK()
{
return bOK;
}
private double parseTerm ()
{
double d=parseFactor();
boolean bMal=strToken.equals("*");
boolean bDurch=strToken.equals("/");
while (bOK&&(bMal||bDurch))
{
if (tokenlist.hasMoreTokens())
{
strToken = tokenlist.nextToken();
double d2 = parseFactor();

if (bMal)
d*=d2;
else
d /= d2;
bMal = strToken.equals ("*");
bDurch = strToken.equals ("/");
}
else
{
bOK =false;
strSyntax = "Fehler: beim eingeben * / ?";
}
}
return d;
}
private double parseExpression ()
{
double d = parseTerm();
boolean bPlus=strToken.equals("+");
boolean bMinus=strToken.equals("-");
while (bOK&&(bPlus||bMinus))
{
if (tokenlist.hasMoreTokens())
{
strToken = tokenlist.nextToken();
double d2 = parseFactor();

if (bPlus)
d+=d2;
else
d -= d2;
bPlus = strToken.equals ("+");
bMinus = strToken.equals ("-");
}
else
{
bOK =false;
strSyntax = "Fehler: beim eingeben + - ";
}
}
return d;
}


private double parseFactor()
{
double d;
//boolean bKlammerA=strToken.equals("(");
//boolean bKlammerZ=strToken.equals(")");




if ( strToken.equals("(") )
{
if ( tokenlist.hasMoreTokens() )
{
strToken= tokenlist.nextToken();
d = parseExpression();
if ( strToken.equals(")") )
{
if (tokenlist.hasMoreTokens())
{
strToken= tokenlist.nextToken();
}
else
bFinish = true;
}
else
{
bOK = false;
strSyntax = " Klammerausdruck is falsch";
}
}
else
{
d = 0.;
bOK = false;
strSyntax = "Fehler: Unerwartetes Ende nach (";
}
}
else {
d = Double.parseDouble(strToken);
strToken = tokenlist.nextToken();
}

return d ;
}
}

// private double parseDouble
 
Moin,
sag an was Du wo ausgegeben haben möchtest und beschränke Dich auf den relevanten Codeteil. Es nutzt nichts, wenn Du hier x Seiten Code postest, schaut sich kein Mensch an.
 
sorry aber habe noch nicht die super ahnung darum dachte ich schreibe mal alles rein

ich brauch die button belegung (button:interpretieren)damit der button die eingabe prüft
also der term an den scanner/parser gegeben wird

wenn es immer noch nicht genau genug ist bitte schreibe es nochmal rein werde mich bemühen meine frage so genau und direkt wie möglich zu stellen


vielen dank
marco
 

Neue Beiträge

Zurück