给定一个语言,定义它文法的一种表示,并定义一个解释器,用于解释该表示。
主要组成:
AbstractExpression-抽象表达式
TerminalExpression-终止符表达式
NonterminalExpression-非终止符表达式
Context-上下文
相关类:
using System;
namespace Interpreter
{
/// <summary>
/// 表达式父类或接口
/// </summary>
abstract class ExpressionClass
{
public abstract bool Interpret();
}
/// <summary>
/// 布尔表达式
/// </summary>
class BooleanExp : ExpressionClass
{
//上下文
string Context;
public BooleanExp(string context)
{
Context = context;
}
public override bool Interpret()
{
return Context.ToLower() == "true";
}
}
/// <summary>
/// 或表达式
/// </summary>
class OrExp : ExpressionClass
{
BooleanExp Exp1;
BooleanExp Exp2;
public OrExp(BooleanExp exp1, BooleanExp exp2)
{
Exp1 = exp1;
Exp2 = exp2;
}
public override bool Interpret()
{
return Exp1.Interpret() || Exp2.Interpret();
}
}
/// <summary>
/// 与表达式
/// </summary>
class AndExp : ExpressionClass
{
BooleanExp Exp1;
BooleanExp Exp2;
public AndExp(BooleanExp exp1, BooleanExp exp2)
{
Exp1 = exp1;
Exp2 = exp2;
}
public override bool Interpret()
{
return Exp1.Interpret() && Exp2.Interpret();
}
}
}
调用:
using System;
namespace Interpreter
{
class Program
{
static void Main(string[] args)
{
//布尔表达式
BooleanExp booleanExp1 = new BooleanExp("true");
BooleanExp booleanExp2 = new BooleanExp("false");
//或表达式
OrExp orExp = new OrExp(booleanExp1, booleanExp2);
Console.WriteLine(orExp.Interpret());
//与表达式
AndExp andExp = new AndExp(booleanExp1, booleanExp2);
Console.WriteLine(andExp.Interpret());
Console.Read();
}
}
}
结果: