定义
给定一个语言,定义它的语法的一种表达式,并且定义一个解析器,该解析器使用该表达式来解析语言中的句子;
文法
“我是软件工程师”
“我”是主语,“是”表示谓语,“软件工程师”表示宾语,形成了“主谓宾”结果,这样的结构称之为文法。
那么可以根据文法造出更多复合文法的语句;
这种文法只是其中一种,还有其他的各种类别。
应用场景
- 如果某个简单的语言需要解析执行,而且可以将该语言中的语句表示为一个抽象语法树时,可以使用该模式。
例如:a + b + c - d表达式,其中“a、b、c、d”表示参数符号,不能够再推导,称之为终结符号。而“+、-”是算数运算符,运算符的左边和右边都是有意义的计算参数,称之为非终结符; - 在某些特定的领域出现不断重复的问题时,可以将该领域的问题转换为一种语法规则下的语句,然后构建解析器来解释该语句。
例如:大小写转换、数字转字符串、字符串转数字、阿拉伯数字转中文等等。。这个转换过程就是一个不断重复的问题。这其中所有的阿拉伯数字、大小写字母、中文数字都是固定的,也称之为终结符号。但具体的内容不同,所以可以使用该模式来解决。
角色划分
- 角色一:抽象表达式
- 角色二:终结符表达式
- 角色三:非终结符表达式
- 角色四:解析器上下文
案例
- 原理案例:demo
网友评论