缘起

最近复习设计模式
拜读谭勇德的<<设计模式就该这样学>>
本系列笔记拟采用golang练习之

解释器模式

  1. 解释器模式(Interpreter Pattern)指给定一门语言,
  2. 定义它的文法的一种表示,
  3. 并定义一个解释器,
  4. 该解释器使用该表示来解释语言中的句子。
  5. 解释器模式是一种按照规定的文法(语法)进行解析的模式,
  6. 属于行为型设计模式。
  7. 解释器模式主要适用于以下应用场景。
  8. 1)一些重复出现的问题可以用一种简单的语言进行表达。
  9. 2)一个简单语法需要解释的场景。
  10. (摘自 谭勇德 <<设计模式就该这样学>>)

SQL(子集)的文法

  1. SQL:
  2. select + FIELD_LIST + from TABLE_NAME + (where BOOL_EXPRESSION)?
  3. FIELD_LIST:
  4. *
  5. | COLUMN_LIST
  6. COLUMN_LIST:
  7. COLUMN_NAME + (,COLUMN_NAME)*
  8. COLUMN_NAME:
  9. IDENTIFIER
  10. IDENTIFIER:
  11. [_a-zA-Z] + [_a-zA-Z0-9]*
  12. TABLE_NAME:
  13. IDENTIFIER
  14. BOOL_EXPRESSION:
  15. STRING_FIELD = STRING_LITERAL
  16. | STRING_FIELD <> STRING_LITERAL
  17. | STRING_FIELD like STRING_LITERAL
  18. | STRING_FIELD not like STRING_LITERAL
  19. | INT_FIELD = INT_LITERAL
  20. | INT_FIELD <> INT_LITERAL
  21. | INT_FIELD > INT_LITERAL
  22. | INT_FIELD >= INT_LITERAL
  23. | INT_FIELD < INT_LITERAL
  24. | INT_FIELD <= INT_LITERAL
  25. | ( + BOOL_EXPRESSION + )
  26. | BOOL_EXPRESSION and BOOL_EXPRESSION
  27. | BOOL_EXPRESSION or BOOL_EXPRESSION
  28. STRING_FIELD:
  29. IDENTIFIER
  30. INT_FIELD:
  31. IDENTIFIER
  32. STRING_LITERAL:
  33. \" + [^"]* + \"
  34. INT_LIETRAL:
  35. [1-9] + [0-9]*