abstractExpression.h
#ifndef ABSTRACTEXPRESSION_H
#define ABSTRACTEXPRESSION_H
#include <QtDebug>
#include "context.h"
class AbstractExpression
{
public:
AbstractExpression() {}
virtual void interpret(Context context){}
};
class TerminalExpression : public AbstractExpression
{
public:
TerminalExpression() {}
void interpret(Context context)
{
qDebug() << "終端解釋器";
}
};
class NonterminalExpression : public AbstractExpression
{
public:
NonterminalExpression() {}
void interpret(Context context)
{
qDebug() << "非終端解釋器";
}
};
#endif // ABSTRACTEXPRESSION_H
context.h
#ifndef CONTEXT_H
#define CONTEXT_H
#include <QString>
class Context
{
public:
Context() {}
private:
QString m_input;
QString m_output;
};
#endif // CONTEXT_H
main.cpp
#include <QApplication>
#include <QList>
#include "context.h"
#include "abstractExpression.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Context context;
QList<AbstractExpression*> list;
AbstractExpression *t = new TerminalExpression();
AbstractExpression *n = new NonterminalExpression();
list.append(t);
list.append(n);
foreach (AbstractExpression *p, list) {
p->interpret(context);
}
return a.exec();
}
UML