语法TQL EBNF-Notation
的托斯卡查询语言(TQL)正式的语言,这意味着必须使用一个搜索查询正式的语法所以,系统能够理解他们。
所谓的结构包括非终结符和终端。非终结符表达式,可以取代其他表达式(非终结符或终端)。
终端代表原子元素,不能取代其他表达式。正确的查询理解TQL必须由一系列的终端。能够创建一个有效的搜索表达式,所有非终结符都逐渐取代,这样最终所需的查询只包含终端。
EBNF符号使用能够描述TQL语法(见“EBNF-Notation”章)。
EBNF-Notation
在这方面是很有帮助的,非终结符TQL总是以小写字母开头。终端是特殊字符(例如:“]”,“)”“:”),或者从一个大写字母开始。
语法的TQL
语法包括所谓的作品。这些规则与非终结符可以取代其他非终结符和终端。查询必须由一个序列的终端。创建一个有效的查询,所有非终结符必须被终端所取代。
![]() |
查询:= {arrowOperator [returnToken] searchExpression} |
上述生产由非终结符查询,arrowOperator,returnToken和searchExpression(注意:他们都开始用小写字母)。多亏了花括号arrowOperator returnToken searchExpression可以经常需要排队吗returnToken是可选的。
语法包括一笔自顶向下的产品处理。起点是开始符号组成的一个非终结符,这是取代,直到搜索查询终端组成的。
完成TQL-Grammar
Startsymbol:查询
查询 |
::= {arrowOperator [returnToken] searchExpression} |
|
searchExpression |
::= (assocName | |聚合specialAssocName | setOperation | subsetOperation | sortOperation | objectsSelector) [colonToken类型][leftSquareBracket logicalExpression rightSpareBracket] |
|
logicalExpression |
::= (notToken logicalExpression) | leftParenthesis logicalExpression rightParenthesis | comparisionExpression {logicalOperator logicalExpression} |
|
comparisonExpression |
::=表达式compOperator表达式 |
|
表达式 |
::=项{addOperator项} |
这学期可能stringLiteral所取代,intLiteral,一个属性或一个值 |
术语 |
::=因素{mulOperator因素} |
|
因素 |
::= leftParenthesis表达式rightParenthesis | functionStatement |值 |
|
functionStatement |
::= functionName leftParenthesis rightParenthesis表达式}{逗号表达式 |
|
价值 |
::= stringLiteral | intLiteral |属性 |
|
属性 |
::= {assocName pointToken}标识符 |
|
assocName |
::=标识符 |
assocName取而代之的是一个标识符 |
类型 |
::=标识符 |
通过输入您指定类型的对象应该在各自的搜索查询。 |
::= doublequote doublequote文本 |
自由文本代表一个地方持有人可定义字符串。特殊字符需要使用一个反斜杠转义字符。可以转移一些特殊字符在文本中使用引号(“)作为分隔符的字符串。 | |
intLiteral |
::=(“+”|“-”)数字 |
|
uintLiteral |
::=数字 |
|
标识符 |
::=(信|“_”){信|数字|“_”}|引用文本引用 |
|
聚合 |
::= "团体" |“SUPERPART”|“自我”|“项目” |
|
specialAssocName |
::= " AllReferences”|“OwningObject” |
|
setOperation |
::= setFunction leftParenthesis rightParenthesis搜索搜索}{逗号) |
|
setFunction |
::= "补" |“联盟”|“十字路口” |
|
sortOperation |
::= sortFunction{逗号stringLiteral}] rightParenthesis leftParenthesis搜索 |
|
sortFunction |
::= "类" |
|
objectsSelector |
::= "对象" leftParenthesis uniqueIdOrNodePath rightParenthesis{逗号uniqueIdOrNodePath}) |
|
uniqueIdOrNodePath |
::= uniqueIdString | nodePathString |
|
uniqueIdString |
::= stringLiteral |
|
nodePathString |
::= stringLiteral |
|
subsetOperation |
::=“子集”leftParenthesis intLiteral[逗号uintLiteral]] rightParenthesis |
|
arrowOperator |
:= " = > " | " - > " |
|
compOperator |
::= " = = " | " !=" | "=i=" | "!i=" | ">" | "<" | ">=" | "<=" | "=?" | "=i?" | "!?" | "!i?" | // LIKE "=*" // LIKE (old version) "=~" | "=i~" // REGEX |
compOperators是用来连接两个表达式和确定一个逻辑值(真、假) |
logicalOperator |
::= "和" | "或" |
结合,分离 |
addOperator |
::= " + " |“-” |
|
mulOperator |
::= " * " | " |
|
returnToken |
::= "返回" |
|
notToken |
::= "不" |
与notToken可以否定一个逻辑表达式 |
pointToken |
::= "。" |
|
colonToken |
::= ":" |
|
leftSquareBracket |
::= " (" |
代表一个左方括号 |
rightSquareBracket |
::= ")" |
代表一个右方括号 |
leftParenthesis |
::= " (" |
代表一个左括号 |
rightParenthesis |
::= ")" |
代表一个右括号 |
逗号 |
::= "," |
|
配额 |
::= " " |
|
思想矛盾 |
::= " " |
|
quantifierOperator | ::= <一>的 |
返回指定的值出现的所有对象。 |