缘起
最近复习设计模式
拜读谭勇德的<<设计模式就该这样学>>
本系列笔记拟采用golang练习之
解释器模式
解释器模式(Interpreter Pattern)指给定一门语言,
定义它的文法的一种表示,
并定义一个解释器,
该解释器使用该表示来解释语言中的句子。
解释器模式是一种按照规定的文法(语法)进行解析的模式,
属于行为型设计模式。
解释器模式主要适用于以下应用场景。
(1)一些重复出现的问题可以用一种简单的语言进行表达。
(2)一个简单语法需要解释的场景。
(摘自 谭勇德 <<设计模式就该这样学>>)
SQL(子集)的文法
SQL:
select + FIELD_LIST + from TABLE_NAME + (where BOOL_EXPRESSION)?
FIELD_LIST:
*
| COLUMN_LIST
COLUMN_LIST:
COLUMN_NAME + (,COLUMN_NAME)*
COLUMN_NAME:
IDENTIFIER
IDENTIFIER:
[_a-zA-Z] + [_a-zA-Z0-9]*
TABLE_NAME:
IDENTIFIER
BOOL_EXPRESSION:
STRING_FIELD = STRING_LITERAL
| STRING_FIELD <> STRING_LITERAL
| STRING_FIELD like STRING_LITERAL
| STRING_FIELD not like STRING_LITERAL
| INT_FIELD = INT_LITERAL
| INT_FIELD <> INT_LITERAL
| INT_FIELD > INT_LITERAL
| INT_FIELD >= INT_LITERAL
| INT_FIELD < INT_LITERAL
| INT_FIELD <= INT_LITERAL
| ( + BOOL_EXPRESSION + )
| BOOL_EXPRESSION and BOOL_EXPRESSION
| BOOL_EXPRESSION or BOOL_EXPRESSION
STRING_FIELD:
IDENTIFIER
INT_FIELD:
IDENTIFIER
STRING_LITERAL:
\" + [^"]* + \"
INT_LIETRAL:
[1-9] + [0-9]*