标签:cte res 上下 int 声明 rac ret ext alt
1) 意图
给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子
2) 结构
其中
3) 适用性
4) 举例
1 #include <iostream> 2 #include <list> 3 class Context 4 { 5 private: 6 std::string m_input; 7 std::string m_output; 8 public: 9 void SetInput(std::string str) { m_input = str; } 10 std::string GetInput() { return m_input; } 11 void SetOutput(std::string str) { m_output = str; } 12 std::string GetOutput() { return m_output; } 13 }; 14 15 class AbstractExpression { 16 public: 17 virtual void Interpret(Context* context) = 0; 18 virtual ~AbstractExpression() {} 19 }; 20 21 class TerminalExpression : public AbstractExpression 22 { // 终结符表达式 23 public: 24 void Interpret(Context* context) 25 { 26 std::cout << "TerminalExpression: " << context->GetInput().c_str() << ", " 27 << context->GetOutput().c_str() << std::endl; 28 } 29 }; 30 31 class NonterminalExpression : public AbstractExpression 32 { // 非终结符表达式 33 private: 34 AbstractExpression* m_expression; 35 public: 36 NonterminalExpression(AbstractExpression* expression): m_expression(expression){} 37 void Interpret(Context* context) 38 { 39 std::cout << "NonterminalExpression: " << context->GetInput().c_str() << ", " 40 << context->GetOutput().c_str() << std::endl; 41 m_expression->Interpret(context); 42 } 43 }; 44 45 int main() { 46 Context* c = new Context(); 47 c->SetInput("Hello"); 48 c->SetOutput("World"); 49 50 AbstractExpression* exp1 = new TerminalExpression(); 51 AbstractExpression* exp2 = new NonterminalExpression(exp1); 52 exp1->Interpret(c); 53 exp2->Interpret(c); 54 delete exp1; 55 delete exp2; 56 system("pause"); 57 }
标签:cte res 上下 int 声明 rac ret ext alt
原文地址:https://www.cnblogs.com/ho966/p/12233841.html