代码拉取完成,页面将自动刷新
同步操作将从 ryanpenn/dart_in_action 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/**
解释器模式(Interpreter Pattern)
意图:给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。
主要解决:对于一些固定文法构建一个解释句子的解释器。
何时使用:如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言中的句子。这样就可以构建一个解释器,该解释器通过解释这些句子来解决该问题。
如何解决:构建语法树,定义终结符与非终结符。
*/
main(List<String> args) {
Expression robert = TerminalExpression("Robert");
Expression john = TerminalExpression("John");
Expression isMale = OrExpression(robert, john);
print("John is male? ${isMale.interpret('john')}");
Expression julie = TerminalExpression("Julie");
Expression married = TerminalExpression("Married");
Expression isMarriedWoman = AndExpression(julie, married);
print(
"Julie is a married women? ${isMarriedWoman.interpret('Married Julie')}");
}
//////////////////////////////////////////////////////////////////
///
/// 创建一个表达式接口
///
abstract class Expression {
bool interpret(String context);
}
///
/// 创建实现了上述接口的实体类
///
class TerminalExpression implements Expression {
String _data;
TerminalExpression(this._data);
@override
bool interpret(String context) {
if (context.contains(_data)) {
return true;
}
return false;
}
}
class OrExpression implements Expression {
Expression _expr1;
Expression _expr2;
OrExpression(this._expr1, this._expr2);
@override
bool interpret(String context) {
return _expr1.interpret(context) || _expr2.interpret(context);
}
}
class AndExpression implements Expression {
Expression _expr1;
Expression _expr2;
AndExpression(this._expr1, this._expr2);
@override
bool interpret(String context) {
return _expr1.interpret(context) && _expr2.interpret(context);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。