Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

   6.1 字符串型:单引号引用表示字符串常量。

   ```
 STRING_LITERAL
: SQUOTE_STRING
;

QUOTED_STRING_LITERAL
: DQUOTE_STRING
| BQUOTE_STRING
;

fragment DQUOTE_STRING
: '"' ('\\' . | ~'"' )*? '"'
;

fragment SQUOTE_STRING
: '\'' ('\\' . | ~'\'' )*? '\''
;

fragment BQUOTE_STRING
: '`' ('\\' . | ~'`' )*? '`'
;
   ```

   6.2 日期时间型

   ```
   DURATIONDURATION_LITERAL
       : (DECIMALINTEGER_LITERAL+ (Y|M O|W|D|H|M|S|M S|U S|N S))+
       ;
   
   DATETIME
DATETIME_LITERAL
       : DECIMALINTEGER_LITERAL ('-'|'/') DECIMALINTEGER_LITERAL ('-'|'/') DECIMALINTEGER_LITERAL ((T | WS)
         DECIMALINTEGER_LITERAL ':' DECIMALINTEGER_LITERAL ':' DECIMALINTEGER_LITERAL (DOT DECIMALINTEGER_LITERAL)?
         (('+' | '-') DECIMALINTEGER_LITERAL ':' DECIMALINTEGER_LITERAL)?)?
       | NOW LR_BRACKET RR_BRACKET
       ;

   ```

   由于语法分析器中对这一部分的使用比较灵活,因此在语法分析器中还设计了datetimeLiteral。后续可以研究一下这一部分是否可以继续优化。

   ```
   datetimeLiteral
       : DATETIME_LITERAL
       | dateExpression
      | INTEGER_LITERAL
       ;
   
   dateExpression
       : DATETIME_LITERAL ((PLUS | MINUS) DURATION_LITERAL)*
       ;
   ```

   6.3 数字型

   ```
   INTEGER_LITERAL
       : DEC_DIGIT+
       ;
   
   EXPONENT
EXPONENT_NUM_PART
       : DEC_DIGIT+ ('e'|'E') ('+'|'-')? DEC_DIGIT+
       ;
   
   fragment
fragment DEC_DIGIT:
                  : [0-9]
;

   ```

   另外,实数型字面量定义在语法分析中。这是因为 EXPONENT_NUM_PART 允许出行在路径中(如root.1e-3),后续可以讨论一下路径中节点命名的规范问题,看看这里能不能优化掉。

...

   ```
   singleStatement
       : DEBUG? statement SEMI? EOF
       ;
   
   statement
       : ddlStatement | dmlStatement | dclStatement | utilityStatement
       ;
   
   ddlStatement
       : setStorageGroup | createStorageGroup | createTimeseries
       | createFunction | createTrigger | createContinuousQuery | createSnapshot
       | alterTimeseries | deleteStorageGroup | deleteTimeseries | deletePartition
       | dropFunction | dropTrigger | dropContinuousQuery
       | setTTL | unsetTTL | startTrigger | stopTrigger
       | showStorageGroup | showDevices | showTimeseries | showChildPaths | showChildNodes
       | showFunctions | showTriggers | showContinuousQueries | showTTL | showAllTTL
       | countStorageGroup | countDevices | countTimeseries | countNodes
       ;
   
   dmlStatement
       : selectStatement | insertStatement | deleteStatement;
   
   dclStatement
       : createUser | createRole | alterUser | grantUser | grantRole | grantRoleToUser
       | revokeUser |  revokeRole | revokeRoleFromUser | dropUser | dropRole
       | listUser | listRole | listPrivilegesUser | listPrivilegesRole
       | listUserPrivileges | listRolePrivileges | listAllRoleOfUser | listAllUserOfRole
       ;
   
   utilityStatement
       : merge | fullMerge | flush | clearCache | clearCachesettle
       | setSystemStatus | showVersion | showFlushInfo | showLockInfo | showMergeInfo
       | showQueryProcesslist | killQuery | grantWatermarkEmbedding | revokeWatermarkEmbedding
       | loadConfiguration | loadTimeseries | loadFile | removeFile | unloadFile;
   ```

...

   ```
   nodeName
       : ID wildcard?
       | wildcard
       | (ID | OPERATOR_IN)? LS_BRACKET DECIMAL_LITERAL? ID? RS_BRACKET? ID?
       | literalCanBeNodeName
       | keywordsCanBeNodeName
       ;
   
   nodeNameWithoutWildcard
       : ID
       | (ID | OPERATOR_IN)? LS_BRACKET DECIMAL_LITERAL? ID? RS_BRACKET? ID?
       | literalCanBeNodeName
       | keywordsCanBeNodeName
       ;
   
   wildcard
       : STAR
       | DOUBLE_STAR
       ;
   
   literalCanBeNodeName
       : QUOTED_STRING_LITERAL
       | datetimeLiteral
      | (MINUS|PLUS)? INTEGER_LITERAL
       | (MINUS|PLUS)? EXPONENT_NUM_PART
       | BOOLEAN_LITERAL
       ;
   
   keywordsCanBeNodeName
       : DATATYPE_VALUE
       | ENCODING_VALE
       | COMPRESSOR_VALUE
       | PRIVILEGE_VALUE
       | ... ...
       : DATATYPE_VALUE
       | ENCODING_VALE
      | COMPRESSOR_VALUE
      | ASC
| DESC
| DEVICE
;

   ```

   常量/字面量

   ```
   constant
       : STRING_LITERAL
       | dateExpression
      | (MINUS|PLUS)? INTEGER_LITERAL
       | (MINUS|PLUS)? realLiteral
       | BOOLEAN_LITERAL
       | NULL_LITERAL
       | NAN_LITERAL
       ;
   
   realLiteral
      : DECIMALINTEGER_LITERAL DOT (INTEGER_LITERAL|EXPONENT_NUM_PART)?
      | DOT (INTEGER_LITERAL|EXPONENT_NUM_PART)
       | EXPONENT_NUM_PART
       ;
   
   datetimeLiteral
       : DATETIME_LITERAL
       | dateExpression
      | INTEGER_LITERAL
       ;
   ```

...

    SHOW MERGE -> SHOW MERGE INFO
   SHOWSHOW FLUSH TASK INFO -> SHOW FLUSH INFO
SHOW LOCK INFO 不变
  • 删除已经不支持的语法
    UPDATE prefixPath setClause whereClause? #updateStatement
  SHOW METADATA #showMetadata
  DESCRIBE prefixPath #describePath
  CREATE INDEX ON prefixPath whereClause? indexWithClause #createIndex
  DROP INDEX indexName=ID ON prefixPath #dropIndex
  TRACING ON #tracingOn
   TRACING OFF #tracingOff

3 需进一步讨论的点

  • nodeName 命名规范命名规范:

  • 引用符号的使用引用符号的使用:

4

...

语法解析效率测试(未开始)