このセクションでは、完全な Q 言語の文法をリストします。トークンの構造については、『字句エレメント』を参照してください。
以下のテーブルでは、文法の表示に使用される表記上の規則を要約しています。
: expr
: expr′
| expr′ |= expr′
: implies-expr
| let-expr
| if-expr
| universal-expr
| existential-expr
: let ID = expr in expr′
: if expr then expr else expr′
: for_all ID in expr = expr′
: there_exists ID in expr = expr′
: or-expr
| or-expr implies implies-expr
: and-expr
| or-expr or and-expr
: relational-expr
| and-expr and relational-expr
: additive-expr
| additive-expr = additive-expr
| additive-expr <> additive-expr
| additive-expr ~= additive-expr
| additive-expr ~<> additive-expr
| additive-expr < additive-expr
| additive-expr <= additive-expr
| additive-expr > additive-expr
| additive-expr = additive-expr
: multiplicative-expr
| additive-expr + multiplicative-expr
| additive-expr - multiplicative-expr
: unary-expr
| multiplicative-expr * unary-expr
| multiplicative-expr / unary-expr
: primary-expr
| - unary-expr
| not unary-expr
: constant
| $ ID
| $ ID of primary-expr
| map { expr } over primary-expr
| filter { expr } over primary-expr
| traverse { expr } over primary-expr
| sort-expr
| ID primary-expr
| conversion-expr
| parenthesized-expr
| path
: REGEXP_LITERAL
| STRING_LITERAL
| INTEGER_LITERAL
| REAL_LITERAL
| BOOLEAN_LITERAL
: sort-component ( & sort-component )* over primary-expr
: sort-direction { expr }
: sort
| sortd
: conversion-operator primary-expr
: string
| integer
| real
| boolean
: ( )
| ( expr )
| ( expr (, expr )+ )
: anchor
| anchor -association-chain
| association-chain
: this
| current
| model
| ID
: simple-association ( -simple-association )* [ association-chain-tail ]
: [ ID : ] [^] ASSOC_LITERAL [ { expr } ]
: -reference-association
| -composite-association
: @ ID
: ( component-association ( ; component-association )+ )
: reference-association
| association-chain