表达式语法(Expression Syntax)

在 TiDB 中,以下规则是表达式的语法,你可以在 parser/parser.y 中找到定义。TiDB 的语法解析是基于 yacc 的。

  1. Expression:
  2. singleAtIdentifier assignmentEq Expression
  3. | Expression logOr Expression
  4. | Expression "XOR" Expression
  5. | Expression logAnd Expression
  6. | "NOT" Expression
  7. | Factor IsOrNotOp trueKwd
  8. | Factor IsOrNotOp falseKwd
  9. | Factor IsOrNotOp "UNKNOWN"
  10. | Factor
  11. Factor:
  12. Factor IsOrNotOp "NULL"
  13. | Factor CompareOp PredicateExpr
  14. | Factor CompareOp singleAtIdentifier assignmentEq PredicateExpr
  15. | Factor CompareOp AnyOrAll SubSelect
  16. | PredicateExpr
  17. PredicateExpr:
  18. PrimaryFactor InOrNotOp '(' ExpressionList ')'
  19. | PrimaryFactor InOrNotOp SubSelect
  20. | PrimaryFactor BetweenOrNotOp PrimaryFactor "AND" PredicateExpr
  21. | PrimaryFactor LikeOrNotOp PrimaryExpression LikeEscapeOpt
  22. | PrimaryFactor RegexpOrNotOp PrimaryExpression
  23. | PrimaryFactor
  24. PrimaryFactor:
  25. PrimaryFactor '|' PrimaryFactor
  26. | PrimaryFactor '&' PrimaryFactor
  27. | PrimaryFactor "<<" PrimaryFactor
  28. | PrimaryFactor ">>" PrimaryFactor
  29. | PrimaryFactor '+' PrimaryFactor
  30. | PrimaryFactor '-' PrimaryFactor
  31. | PrimaryFactor '*' PrimaryFactor
  32. | PrimaryFactor '/' PrimaryFactor
  33. | PrimaryFactor '%' PrimaryFactor
  34. | PrimaryFactor "DIV" PrimaryFactor
  35. | PrimaryFactor "MOD" PrimaryFactor
  36. | PrimaryFactor '^' PrimaryFactor
  37. | PrimaryExpression
  38. PrimaryExpression:
  39. Operand
  40. | FunctionCallKeyword
  41. | FunctionCallNonKeyword
  42. | FunctionCallAgg
  43. | FunctionCallGeneric
  44. | Identifier jss stringLit
  45. | Identifier juss stringLit
  46. | SubSelect
  47. | '!' PrimaryExpression
  48. | '~' PrimaryExpression
  49. | '-' PrimaryExpression
  50. | '+' PrimaryExpression
  51. | "BINARY" PrimaryExpression
  52. | PrimaryExpression "COLLATE" StringName