Design Patterns 15: Interpreter

xiaoxiao2021-04-18  131

通过定义语法来解释自然语言

struct RegularExpression { virtual void Interpret() = 0; }; struct RepetitionExpression : RegularExpression { void Interpret() override {} RepetitionExpression(RegularExpression* rep) : _repetition(rep) {} private: RegularExpression* _repetition; }; struct LiteralExpression : RegularExpression { void Interpret() override {} LiteralExpression(const char* literal) : _literal(literal) {} private: const char* _literal; }; struct AlternationExpression : RegularExpression { void Interpret() override {} AlternationExpression(RegularExpression* alt1, RegularExpression* alt2) : _alternative1(alt1), _alternative2(alt2) {} private: RegularExpression *_alternative1, *_alternative2; }; struct SequenceExpression : RegularExpression { void Interpret() override {} SequenceExpression(RegularExpression* exp1, RegularExpression* exp2) : _expression1(exp1), _expression2(exp2) {} private: RegularExpression *_expression1, *_expression2; }; int main() { //pet & (dogs | cats)* RegularExpression* dog = new LiteralExpression("dogs"); RegularExpression* cat = new LiteralExpression("cats"); RegularExpression* alt = new AlternationExpression(dog, cat); RegularExpression* rep = new RepetitionExpression(alt); RegularExpression* pet = new LiteralExpression("pets"); RegularExpression* seq = new SequenceExpression(pet, rep); }

 

转载请注明原文地址: https://www.6miu.com/read-4820338.html

最新回复(0)